TypeScripts - Old Content

From Wiki
Jump to navigation Jump to search

Typescripts are the ConTeXt way of using fonts and defining font families.

Beware, the examples on this page work only with MkII / pdfTeX (i.e. neither XeTeX nor LuaTeX).


Sample typescript for the free text font Gentium. Installation instructions are at Installing a TrueType font, step by step - Old Content. A typescript must live in your project folder or in another folder in your ConTeXt path (e.g., (texmf)/tex/context/user)

% type-sil-gentium.tex
% Typescript for serif family SIL Gentium

% load mapfile

\starttypescript [map] [gentium] [\defaultencoding]
    \loadmapfile [\defaultencoding-sil-gentium.map]

% mapping from PostScript name (or visible font name, if it's a TrueType font) to TFM file name
% The second argument means that these names are loaded with either the 'gentium'
% or 'gentium-alt' names.

\starttypescript [serif] [gentium,gentium-alt] [\defaultencoding] % mapping is used by two "name" typescripts
    \definefontsynonym [Gentium]           [\defaultencoding-genr101]  [encoding=\defaultencoding]
    \definefontsynonym [Gentium-Italic]    [\defaultencoding-geni101]  [encoding=\defaultencoding]
    \definefontsynonym [GentiumAlt]        [\defaultencoding-genar101] [encoding=\defaultencoding]
    \definefontsynonym [GentiumAlt-Italic] [\defaultencoding-genai101] [encoding=\defaultencoding]

% mapping from generic family name to PostScript name

\starttypescript [serif] [gentium] [name]
    \definefontsynonym [Serif]       [Gentium]
    \definefontsynonym [SerifItalic] [Gentium-Italic]

% additional mapping to alternate glyphs, not further used

\starttypescript [serif] [gentium-alt] [name]
    \definefontsynonym [Serif]       [GentiumAlt]
    \definefontsynonym [SerifItalic] [GentiumAlt-Italic]

% sample family definition
% here we define only the serif (rm) version.

\starttypescript [sil-gentium]
    \definetypeface [sil-gentium] [rm] [serif] [gentium] [default] [encoding=\defaultencoding]
%   \definetypeface [sil-gentium] [ss] [sans]  [default] [default] [encoding=\defaultencoding]
%   \definetypeface [sil-gentium] [tt] [mono]  [default] [default] [encoding=\defaultencoding]
%   \definetypeface [sil-gentium] [mm] [math]  [default] [default] [encoding=\defaultencoding]

The multiple mapping is not strictly needed, but increases flexibility.

To use your new typescript, write the following in your environment file (or single TeX file):

\setupencoding[default=ec] % defines \defaultencoding



\setupbodyfontenvironment [default] [em=italic] % slanted is default emphasize in ConTeXt

The map file was written by texfont and lives in (texmf)/fonts/map/pdftex/context. It combines raw TFM (metrics), PostScript name, font file and encoding

% ec-sil-gentium.map
ec-raw-genai101 GentiumAlt-Italic 4 < genai101.pfb ec.enc
ec-raw-genar101 GentiumAlt 4 < genar101.pfb ec.enc
ec-raw-geni101 Gentium-Italic 4 < geni101.pfb ec.enc
ec-raw-genr101 Gentium 4 < genr101.pfb ec.enc

The next step: making it more generic

If you'd like to write a typescript that handles many more encodings, somewhat more generically, here is one model to build upon:

% type-sil-gentium.tex
% Typescript for serif family SIL Gentium

% This is the first change we need to make: we list all the encodings it can match,
% and then use that data within the typescript:

\starttypescript [map] [gentium] [ec,texnansi,8r,t5,t2a,t2b,qx]
    \loadmapfile [\typescriptthree-sil-gentium.map]

% We use the same technique. As the encoding variable shows up in the third
% argument, we use \typescriptthree.

\starttypescript [serif] [gentium] [ec,texnansi,8r,t5,t2a,t2b,qx]
    \definefontsynonym [Gentium]           [\typescriptthree-genr101] [encoding=\typescriptthree]
    \definefontsynonym [Gentium-Italic]    [\typescriptthree-geni101] [encoding=\typescriptthree]
    \definefontsynonym [GentiumAlt]        [\typescriptthree-genar101][encoding=\typescriptthree]
    \definefontsynonym [GentiumAlt-Italic] [\typescriptthree-genai101][encoding=\typescriptthree]

% Getting fancy: occasionally you want to access alternates from the main font:

\starttypescript [serif] [gentium] [name]
    \setups [font:fallback:serif] % We use the new (and fast loading) font fallbacks to cover bold markup.
    \definefontsynonym [Serif]               [Gentium]
    \definefontsynonym [SerifItalic]         [Gentium-Italic]
    % Gentium contains only two faces, so we map everything else on Italic
    \definefontsynonym [SerifSlanted]        [SerifItalic]
    \definefontsynonym [SerifBoldItalic]     [SerifItalic]
    \definefontsynonym [SerifCaps]           [SerifItalic]
    \definefontsynonym [SerifBoldCaps]       [SerifItalic]
    % markup of \Var[alt] results in a (subtle) font switch (Gentium's alternate glyphs change only some diacritics):
    \definefontvariant [Serif] [alt] [Alt]
    % unfortunately you need to define eight synonyms to handle the fallback cases:
    \definefontsynonym [SerifRegular]        [Serif]
    \definefontsynonym [SerifRegularAlt]     [GentiumAlt] % you must define "Regular" for every additional variant
    \definefontsynonym [SerifBoldAlt]        [GentiumAlt]
    \definefontsynonym [SerifCapsAlt]        [GentiumAlt]
    \definefontsynonym [SerifItalicAlt]      [GentiumAlt-Italic]
    \definefontsynonym [SerifSlantedAlt]     [GentiumAlt-Italic]
    \definefontsynonym [SerifBoldItalicAlt]  [GentiumAlt-Italic]
    \definefontsynonym [SerifBoldSlantedAlt] [GentiumAlt-Italic]

% sample family definition
% here we define only the serif (rm) version.

\starttypescript [sil-gentium] [ec,texnansi,8r,t5,t2a,t2b,qx]
    \definetypeface [sil-gentium] [rm] [serif] [gentium] [default] [encoding=\typescripttwo]
%   \definetypeface [sil-gentium] [ss] [sans]  [default] [default] [encoding=\typescripttwo]
%   \definetypeface [sil-gentium] [tt] [mono]  [default] [default] [encoding=\typescripttwo]
%   \definetypeface [sil-gentium] [mm] [math]  [default] [default] [encoding=\typescripttwo]