Fonts in XeTeX - Old Content

From Wiki
Jump to navigation Jump to search

< XeTeX >

Fonts get special treatment in XeTeX. By supporting a rich, within-TeX means of font specification, one avoids the usual difficulties associated with the TeX font mess: no dealing with map files, encodings, Karl Berry naming schemes, tfms, or virtual fonts. This page describes the various typescripts introduced with type-otf.tex (shared with LuaTeX, up-to-date) and type-xtx.tex (XeTeX specific - might need a revision).

Note that typescripts were slightly broken after version 2007.01.xx and before 2007.09.28. Please update. Also, on Mac, old fonts that store their code in the resource fork (Postscript Type 1, Postscript Type 3) don't seem to work with xdvipdfmx. Using xdv2pdf instead of xdvipdfmx is possible with some tweaking.

NB: Major changes that need updates both on wiki and in type-xtx:

  • encoding=uc is made obsolete: no font encoding specification is needed any mode since only Unicode font encoding is supported anyway
  • features=default will set tex-text option, but note that that file is not present in minimals yet
  • [name:\typescripttwo\xetexcolon mapping=tex-text][encoding=uc] should be replaced by [name:\typescripttwo][features=default]
  • some others ...

Quick start

If you want to start using some of the fonts installed in your system (e.g. Serapion Pro), start with the following snippet:

\definetypeface[Serapion][rm][Xserif][Serapion Pro]
\setupbodyfont[Serapion, 12pt]

In this case the document will be set in 12pt Serapion Pro typeface. If you want to start fiddling with the fonts a bit more, read on about the typescripts.

Compatibility Typescripts

The first class of typescript enables one to use familiar typescripts, such as times, palatino, postscript, and the like, from type-exa. The following typescripts are defined for the uc encoding:

Times Roman - no slanted, no small caps
Book Antiqua - (Apple's Palatino clone) no slanted, no small caps
Helvetica Neue - Apple's default Helvetica doesn't offer an oblique, so Helvetica Neue is substituted
Courier - No italics or oblique. None of Apple's default monospaced fonts ship with an oblique, so this typescript is necessarily limited.
Lucida Bright, Sans, Typewriter, Calligraphy, Handwriting, and Fax are all provided with Microsoft's Office 2004. For those with that software and those fonts, these typescripts are provided to take advantage of the predefined ones in ConTeXt. Keep in mind that the lucida math fonts are still for-pay only.

You can simply invoke these typescripts with the familiar calls, except that they have the uc encoding:


Please note that there is absolutely no attempt to retain font metrics, so this will almost certainly re-flow legacy documents. The following typescripts/typefaces from type-exa are thus available:

  • postscript
  • times
  • palatino
  • lucida (if you have the fonts)

Wildcard typescripts

XeTeX offers some nice features in terms of automatically finding related fonts in a family, namely the italic, bold, and bolditalic alternatives. To take advantage of that, there's a set of wildcard typescripts that take an arbitrary Macintosh font name as input, and provide as many of the alternatives it can find. To set these typescripts (and the calling conventions) apart from the familiar ones, the typescripts are identified with Xserif, Xsans, and Xmono. As they use some specific XeTeX features, they all use the uc encoding.

To call the typescripts, it's most convenient to define a typeface that uses these features. The named font slot should contain the display name of the Regular alternative (not the family name) of the font in question. The typefaces are callable with four, five, or six arguments:

\definetypeface[myface][tt][Xmono] [Courier]       [default]
\definetypeface[myface][ss][Xsans] [Optima Regular][default][rscale=.87]

As you can see, you can activate relative scaling of face sizes. The above definitions look very much like any other typeface definition, except that the serif/sans/mono identifier is preceded with X, and that there is no underlying "Optima Regular" typescript defined anywhere. The rest is typescript and XeTeX magic.

Other typescripts

Typescript usage is best done by creating your own typeface and using it. There are no pre-defined combinations, only tools for making your own combinations. As you can use arbitrary fonts "on-the-fly" with the above wildcard typescripts, I see pre-built typescripts for Apple fonts as being more stifling to the designer than anything else!

Rich serif AAT font from Apple. There are many features in the font, not yet exploited by the basic typescript.
\definetypeface [MyFace][rm][serif][hoefler][default][encoding=uc]
Very extensive Unicode and language support in this sans serif AAT font from Apple. Only Regular and Bold weights are available.
\definetypeface [MyFace][ss][sans][lucidagrande][default][encoding=uc]
gillsans & gillsanslt 
Although there are not many features in this classic humanist sans, it is available at three different font weights. gillsans offers regular and bold, and gillsanslt offers light as the \tf variant and regular as the \bf weight.
\definetypeface [MyFace][ss][sans][gillsanslt][default][encoding=uc]
Nothing special in this typescript, except that it defines an OptimaBlack synonym for your use.
\definetypeface [MyFace][ss][sans][optima][default][encoding=uc]
zapfino & applechancery 
These rich AAT fonts are defined as 'handwriting' and 'calligraphy' fonts, respectively. By using them as 'serif' fonts, however, you can use other variants through the \it, \bf, etc. alternatives.
\definetypeface [MyFace][hw][handwriting][zapfino][default][encoding=uc] % or
\definetypeface [MyFace][rm][serif]      [zapfino][default][encoding=uc]

Non-Apple fonts

A couple of typescripts to get you started with non-Apple fonts:

timesnewroman & arial 
MS Office 2004 updates these fonts with quite impressive Unicode coverage.
\definetypeface [MS][rm][serif][timesnewroman][default][encoding=uc]
\definetypeface [MS][ss][sans] [arial]        [default][encoding=uc]
SIL also produce a very attractive Unicode font, Gentium, that is available in both regular and italic varieties.
\definetypeface [MyFace][rm][serif][gentium][default][encoding=uc]


Once you define your own typeface combination, you invoke it with the name you gave it (the first parameter in \definetypeface), in \setupbodyfont or \switchtobodyfont:

\setupbodyfont[MyFace, 11pt]

Creating your own typescripts

Let's take a look at the components of a new typescript:


The family (serif), typescript name (didot), and encoding (uc) are established.

\definefontsynonym  [DidotRegular]['Didot:mapping=tex-text']   [encoding=uc]

The first font synonym has a font-specific name (DidotRegular), and then a quoted font specification. The font name (Didot, which is the display name of the regular alternative of the font) is followed by a colon and then a feature (mapping=tex-text). This particular feature enables TeX-like markup with fonts that don't necessarily have features for understanding such things as '---'. The final argument tells ConTeXt that this is a Unicode font, and that it should convert named glyphs to Unicode values (as defined in enco-uc).

\definefontsynonym  [DidotItalic] ['Didot/I:mapping=tex-text'] [encoding=uc]
\definefontsynonym  [DidotBold]   ['Didot/B:mapping=tex-text'] [encoding=uc]

The next two font synonyms use a XeTeX feature as a shortcut: Didot/I and Didot/B are abbreviations for Didot Italic and Didot Bold, respectively.

\definefontsynonym  [DidotCaps]   ['Didot:mapping=tex-text;
         Letter Case=Small Capitals;Ligatures=!Common Ligatures'][encoding=uc]

Didot Caps require a few more features to be added, separated by a semicolon (or comma). The exclamation mark in !Common Ligatures is there to suppress that feature, which is turned on by default.

The 'name' typescript, which maps from the font-specific names to ConTeXt-wide names then follows:

 \definefontsynonym  [Serif]           [DidotRegular]
 \definefontsynonym  [SerifItalic]     [DidotItalic] 
 \definefontsynonym  [SerifBold]       [DidotBold]   
 \definefontsynonym  [SerifCaps]       [DidotCaps]   

...four of the usual typescripts are named above, but you need:

 \definefontsynonym  [SerifSlanted]    [DidotItalic] 
 \definefontsynonym  [SerifBoldItalic] [DidotBold]   
 \definefontsynonym  [SerifBoldSlanted][DidotBold]   

...three further synonyms acting as fallbacks for the typescript to be complete.

Other font specifications

Don't forget that you can use one-off font definitions for special uses with \definedfont, \startfont/\stopfont and the like:

\definedfont["Hoefler Text:mapping=tex-text;Style Options=Engraved Text;
              Letter Case=All Capitals;color=229966" at 24pt]
Big Title


\startfont[OptimaBlack sa 2]
Fat title


--Adam 02:39, 26 Nov 2004 (CET)

Accessing glyphs from OpenType fonts by name

\XeTeXglyphindex returns the index of a named glyph from (an OpenType) font.

\def\getglyph#1{\XeTeXglyph\XeTeXglyphindex "#1"} % getglyph is already taken in ConTeXt!!!

\definedfont['Antykwa Torunska']

I \getglyph{heart} this feature!

(An image will be put here as soon as XeTeX will be enabled on contextgarden.)

Using PostScript fonts

Note: It's not possible to use oldfashioned Mac resource fork fonts (where you have a "suitcase" with screen fonts) with ConTeXt!

This example uses PostScript fonts installed in the texmf tree:

\starttypescript	[sans]	[urw-grotesk]
	%			PostScript name				file name		instead of an encoding
	\definefontsynonym	[URWGroteskT-LighNarr]		[file:u004242t]	[features=default]
	\definefontsynonym	[URWGroteskT-MediNarr]		[file:u004244t]	[features=default]
	\definefontsynonym	[URWGroteskT-LighNarrObli]	[file:u004262t]	[features=default]
	\definefontsynonym	[URWGroteskT-MediNarrObli]	[file:u004264t]	[features=default]

\starttypescript	[sans]	[urw-grotesk]
	\definefontsynonym	[Sans]			[URWGroteskT-LighNarr]
	\definefontsynonym	[SansItalic]		[URWGroteskT-LighNarrObli]
	\definefontsynonym	[SansBold]		[URWGroteskT-MediNarr]
	\definefontsynonym	[SansBoldItalic]	[URWGroteskT-MediNarrObli]
	\definefontsynonym	[SansSlanted]		[SansItalic]
	\definefontsynonym	[SansBoldSlanted]	[SansBoldItalic]

\starttypescript	[my]	[urw-grotesk]
%	\definetypeface	[urw-grotesk]	[rm]	[serif]	[schola]	[default]
	\definetypeface	[urw-grotesk]	[ss]	[sans]	[urw-grotesk]	[default]	[encoding=uc]

\usetypescript		[my][urw-grotesk]
\setupbodyfont		[urw-grotesk,ss,8pt]

If you'd like to use active (OS-installed) fonts, replace "file:filename" with "name:public name" like this:

\definefontsynonym	[Eco-Regular]		[name:Eco101Roman]	[features=default] 
\definefontsynonym	[Eco-Bold] 		[name:Eco301Bold]	[features=default] 
\definefontsynonym	[Eco-Italic] 		[name:Eco102Italic]	[features=default] 
\definefontsynonym	[Eco-BoldItalic]	[name:Eco302BoldItalic]	[features=default] 

(Sample from [this thread].)