<<

 TUGboat, Volume  (), No. 

In different files Within one OpenType file weight (light, black) (VAVAV vs. VAVAV) width (abc vs. abc) ligatures (fi vs. fi) optical size figure style ( vs. 1234) ˆe installation and use of OpenType fonts in LATEX variant (e.g. italics) John D. Owens S C Abstract Table : features provided by different OpenType files (le ) and within a single OpenType file (right). ˆe emerging file standard in digital is the OpenType font standard, jointly developed by Microso and Adobe. OpenType fonts are natively supported by segments typeset in Adobe’s OpenType Pro, using several popular operating systems and have many fea- the following LATEX commands: tures and advantages that make them desirable for high- \usepackage{} quality typography. However, OpenType fonts are not \usepackage[tt,sf,lining,scale=0.92]{myriad} natively supported by the standard TEX engine. ˆis ar- ticle is a practical guide to installing OpenType fonts for What are the different typeface alternatives that can be use as text fonts in LATEX. part of our ? (Gelderman provides an intro- ˆe steps to install an OpenType font for use in LATEX duction to typeface characteristics [].) We can group are: possible alternatives into several broad categories, and . For each OpenType font file, and for each combina- then indicate how OpenType handles each category. tion of attributes for that font file, generate and in- Our first four categories are weight, width, optical stall font metric and encoding files. size, and variant. ˆe weight of a typeface refers to the thickness of the strokes that constitute its . A font . Next, for each font family, generate and install a font designer may also vary a typeface’s width relative to its description (.fd) file that maps LAT X font selection E height. ˆe major advantage of vector font formats (such commands to the installed font files. as OpenType, PostScript , and TrueType) is their . Finally, write and install a style (.sty) file that allows ability to be scaled to any size. However, type designers the user to select the font and its options for use have found that the most visually appealing fonts are ones within TEX. that are designed for a particular size range, called an op- We begin by discussing font background, the TEX font tical size. Finally, the standard upright “roman” style for handling scheme, and existing font tools, then describe fonts is not the only possible style. Font users may also each of the three steps above in detail. desire italic or oblique or outline forms of a particular typeface, which together are termed variants. In LATEX’s  Font basics and font families New Font Selection Scheme (NFSS), the combination of ˆe advanced typographic features of the OpenType font weight and width is called series and the variant is called format have motivated its widespread use in a variety of shape; we use this terminology in Section .. demanding applications. Before we dive into supporting In OpenType, each unique combination of weight, OpenType in TEX, however, let’s take a step back and look width, optical size, and variant is associated with a sep- at our eventual goal. As a TEX user, we are less inter- arate font file. As an example, the Adobe Kepler type- ested in using just a single font with a single set of options face has several alternatives in each of these categories. and more interested in using a font family: a collection of Kepler features six weights (light, regular, medium, semi- compatible font variants, usually from the same typeface, bold, bold, and black), each with four widths (condensed, that can be used together. For instance, we might want to semicondensed, regular, and extended). Most of Kepler’s group together a plain and an italic form of a particular combinations of weight and width feature four optical typeface into a family. We might want to make sizes (from smallest to largest, caption, regular, subhead, available in our family as well, or perhaps incorporate and display), and each weight-width-optical-size combi- several different weights or optical sizes. Once we have nation has both an upright and italic variant. ˆus it is lit- defined our font family, we would then like to ask TEX to tle wonder that Kepler’s many combinations require  enable the entire family with a single command. As an ex- different OpenType files. And a er we catch our breath to ample, this document is typeset in an Adobe OpenType consider all the typographical options already available to Minion Pro font family with old-style figures, with code us, we dive into a single OpenType file to find still more options. Editor’s note: Due to the nature of this article, it is typeset in the Adobe Minion and Adobe Myriad . We thank Adobe for In addition to the categories that require different permission to use these fonts in both the print and publications. files, the OpenType font format also allows a single font TUGboat, Volume  (), No.  

file to specify a variety of other features. Not all of these In this article, we use the “” encoding, an alter- features are currently supported in TEX, but many of them native to  developed by  that is well-suited are. For instance, the kerning feature adjusts the spaces for Type--flavored fonts. (Among other advan- between pairs of glyphs. Enabling ligatures replaces pairs tages, the  encoding maps directly to Adobe’s of glyphs like ‘f’ and ‘i’ with a single ‘fi’ . Besides font encoding and thus requires no virtual fonts.) kerning and ligatures, the two classes of OpenType fea- MAP Finally, the map files tie the above files together. tures that we cover in this article are the choice of figure map files (and map file formats) are specific to styles (for example, old-style [] vs. lining [01234]) output drivers and associate tfm and Type  font and S C. names with pfb files, which contain the shapes of Table  summarizes the features provided by differ- glyphs in those fonts. ent OpenType files and within an OpenType file. With Only when these files have been properly installed for a this overview of the many typeface alternatives that we particular font, and databases updated, can TEX would like to assemble into families, we can turn to how then typeset glyphs from that font in a document. TEX interacts with fonts. Writing all these files by hand would be both tedious and error-prone, so two excellent pieces of so ware have  TEX font handling automated the font installation process. In modern operating systems such as Microso Win- • fontinst [], by Alan Jeffrey, Rowland McDonnell, dows and Apple Mac OS X, applications that use Open- and Lars Hellström, automates the installation of Type fonts can read font information directly from the PostScript Type  fonts into T X. Philipp Lehman’s OpenType file. T X, on the other hand, stores font infor- E E font installation guide [] is an outstanding tutorial mation in a variety of files, and the complexity of creating for fontinst. and installing these files is the major reason that font han- However, fontinst does not offer access to Open- dling has traditionally been a tricky task in TEX. ˆe OpenType font format can contain font data in Type features. Also, fontinst scripts are written in either of two formats, Adobe PostScript Type  or True- TEX, and are challenging for non-experts to write Type. In this section we describe the font files that are and use. associated with Type  and Type--flavored OpenType • Eddie Kohler’s otftotfm [], part of his LCDF Type- fonts. To support a Type  font, TEX requires the fol- tools suite, creates and installs the required TEX files lowing files, each with its own function, with file loca- (tfm, pfb, vf, enc, and map) from OpenType font tions specified by the TEX Directory Structure standard. files. Note that otftotfm generates PostScript Type More detailed descriptions of these formats can be found  fonts from OpenType; please ensure that the legal in Alan Hoenig’s TEX Unbound [] and Chapter  of the license for your fonts allows such a format conver- second edition of ˆe LATEX Companion []. sion. otftotfm is a command-line tool that accepts a set of options and applies them to a single OpenType TFM “T X Font Metrics” (tfm) files describe the dimen- E font file. sions of each (glyph), along with a few Section  describes two tools built around otfto- font-wide parameter, which together are used by tfm that both automate calls to otftotfm across mul- TEX to perform layout. tiple font options and also create the necessary TEX PFB For Type  fonts, “Printer Font Binary” (pfb) files fd and sty support files. contain Adobe PostScript Type  procedures that In this article, we focus on otftotfm as the underlying describe the shape of each glyph. ˆese procedures tool that translates OpenType fonts into a T X-readable are included by the output driver (for example, the E form. We also focus on the procedure for setting up text dvips or program) in the output file (for ex- fonts. ˆe setup for math fonts requires additional com- ample, PostScript or PDF). mands described in Chapter .. of ˆe LATEX Com- VF “Virtual Font” files provide a mapping between the panion []. ˆe next section outlines how otftotfm in- glyphs in the tfm files and the glyph order used by stalls OpenType fonts, and the remainder of the article TEX (which is, in turn, specified with the encoding describes how to extend otftotfm to handle multiple font file, below). ˆey are not needed for all fonts. files and font families and how to make the installed fonts ENC Encoding files specify an ordering of glyphs called available to TEX users. the “font-encoding vector”. While typeset docu- ments in English might require only the glyphs  OpenType to TEX in TEX’s default “” font-encoding vector (used ˆe first step in making OpenType fonts available to TEX by Roman, for example), other users is to deposit the various font files into the TEX in- or scripts need more or different glyphs. stallation for each variant in the font family. We begin by  TUGboat, Volume  (), No. 

showing how otftotfm installs a single font, using Adobe  Font description (fd) files Minion Pro’s Semibold Italic font as an example. A font description file is a TEX source file that maps in- otftotfm -a -e texnansx -fonum -fkern -fliga \ stalled font file names to font attributes as used in (LA)TEX. MinionPro-SemiboldIt.otf \ Typically, each font family is described by a single fd file. LY1-MinionPro-SemiboldIt-onum As we previously mentioned, these techniques are appli- cable to text fonts; math fonts require additional com- Let’s analyze this example. -a is the magic “auto- mands []. matic” flag, automatically installing the relevant T X font E Only two TEX commands are necessary in an fd file. files from Section  (tfm, pfb, vf, enc, and map) into their ˆe first declares a font family, and the second declares proper locations within the TEX directories. -e texnansx a specific font within that font family. We’ll look at them specifies the encoding file for the  encoding. ˆree one at a time. OpenType features (old-style numerals, kerning, and lig- atures) are requested with the -f flags, and the final two . \DeclareFontFamily arguments are the names of the OpenType input font file ˆe \DeclareFontFamily command indicates that a certain and the output font name. ˆe otftotfm manual explains font family is available in a certain encoding scheme. ˆe these options in detail, and also enumerates available names of encoding schemes are fixed (as mentioned be- OpenType features []. fore, we use  in this paper), but the name of the font Extending otftotfm to more input fonts and more  family is arbitrary. ˆe most well-known naming scheme variants is straightforward: simply call otftotfm for each is Karl Berry’s fontname scheme [], which concatenates and every combination of desired features. For complex a unique three- code for each typeface with a one- variant combinations and fully featured font families, the letter suffix that indicates the font family (Section .). number of calls to otftotfm can exceed many hundreds. (ˆis naming scheme is required when using nfssext.sty, ˆe tools described in Section  automate this process. described in the next section.) LCDF’s otfinfo tool [] can identify the supported Let us continue with the Minion-Pro-with-old-style- OpenType features for any OpenType font file, but which numerals example; Minion is abbreviated pmn, and font features are interesting for TEX users? families associated with old-style numerals are desig- • ˆe kerning (kern) and (liga) features should nated by j (more details about what constitutes a font always be turned on if available. family are in Section .). ˆe resulting command is: • OpenType fonts may support several kinds of nu- \DeclareFontFamily{LY1}{pmnj}{} merals; onum (old-style numerals) and lnum (lin- ˆe third argument to \DeclareFontFamily is less o ing numerals) can both be supported in TEX and are used; it can contain special options for font loading and commonly requested typographic features. is explained in ˆe LATEX Companion [].

• S C are enabled by the smcp feature. . \DeclareFontShape • Superior (sups) and inferior (sinf) figures are useful ˆe \DeclareFontShape command associates a particular for footnotes, inline , and scientific typeset- font with a particular combination of encoding, font fam- ting; swashes (swsh) are more DECORATIVE alter- ily, series, and shape, a classification which we previously natives to standard characters. discussed in Section . To classify the particular Adobe Minion font we installed in Section , we invoke the fol- ˆe otftotfm web [], in “otftotfm examples”, lowing -argument command: contains examples of more advanced OpenType features, but as we note in Section , more advanced features rarely \DeclareFontShape{LY1}{pmnj}{sb}{it}{ <-> LY1-MinionPro-SemiboldIt-onum}{} have high-level support in TEX or LATEX. In this article we concentrate on the overall installation procedure for ˆe first four arguments are the classification; the fi h OpenType fonts and support of more basic features; read- argument is the font file(s) associated with that classifi- ers in need of more advanced features may consider the cation; and the last argument is used in a similar way to ConTEXt environment [] or X TE EX[]. the third argument of \DeclareFontFamily. ˆis particu- A er otftotfm finishes installing all font files into lar command associates the combination of  encod- TEX, texhash and updmap must be called to make TEX ing, Minion-with-old-style-numerals font family, semi- aware of the new installation. Now, the new fonts are bold series (sb), and italic shape (it) with the installed available for in TEX — but how? ˆe next sec- font named LY1-MinionPro-SemiboldIt-onum. Note this tion describes how to instruct TEX to use the correct font. font name is (necessarily) identical to the output name in TEX uses the “font description” file for this purpose. the command we invoked in Section . TUGboat, Volume  (), No.  

With only these two commands, you can specify a W NFSS  completely functional fd file. ˆree additional commands light l are useful, however, for a more fully featured family. book m regular m Optical size variants Now, what’s the <-> symbol be- medium mb fore the font name (in the above \DeclareFontShape ex- demibold db ample)? It’s the size range and indicates the font sizes as- semibold sb sociated with that font name. <-> is actually a special case bold b of the more general notation , meaning “use this black eb font only for sizes greater than or equal to n and up W NFSS  to m”. Removal of n or m removes the bound, so <-> in- condensed c dicates a match for all font sizes. With this notation, the narrow n extension to multiple font files for a particular combina- semicondensed sc tion at different sizes (necessary for optical size variants) regular — is straightforward: semiextended sx \DeclareFontShape{LY1}{pmnj}{sb}{it}{ extended x <6-8.4> LY1-MinionPro-SemiboldItCapt-onum V NFSS  <8.4-13> LY1-MinionPro-SemiboldIt-onum normal (upright) n <13-19.9> LY1-MinionPro-SemiboldItSubh-onum italic it <19.9-72> LY1-MinionPro-SemiboldItDisp-onum}{} slanted sl oblique sl What happens if you’re missing a outline ol particular variant for a font family? ˆe sub command small caps sc allows the substitution of one variant for another. For in- small caps + italic si stance, few font families feature a slanted (oblique) vari- ant, so fd files o en substitute italic for slanted if slanted Table : A selection of NFSS codes for font weights, widths, and is requested. ˆe following command asks for any refer- variants. From Lehman []. ence, at any size, to semibold-slanted in our font family to be satisfied instead by semibold-italic. for shape and series abbreviation strings, including NFSS, \DeclareFontShape{LY1}{pmnj}{sb}{sl}{ must work together with the font selection commands <-> sub * pmnj/sb/it}{} in Section . Philipp Lehman’s tutorial contains a fairly Besides substituting italic for slanted, substituting complete mapping between weight, width, and variant bold for bold-extended is also common, as in the exam- names and NFSS encodings []; we reproduce common ple below for the normal (n) shape. encodings in Table . \DeclareFontShape{LY1}{pmnj}{bx}{n}{ Lehman presents the following for gen- <-> sub * pmnj/b/n}{} erating the series and shape abbreviations used in \De- clareFontShape. First, the weight and width are combined Scaling Finally, \DeclareFontShape permits a font to be to create “series”. If both weight and width are “regular”, automatically scaled through the size command,¹ which the series is set to m; otherwise the series is set to the con- is invoked by placing the scaling factor in be- catenation of the weight and width codes, ignoring “regu- tween the size range and the filename. ˆe example below lar” if present. Creating the shape is also straightforward: instructs TEX to typeset Minion’s semibold italic variant if the variant is “regular”, the shape is n, otherwise the at  of its natural size. shape is the concatenation of all variant codes, with the \DeclareFontShape{LY1}{pmnj}{sb}{it}{ exception of small-caps and italics. ˆis shape is instead <-> [0.95] LY1-MinionPro-SemiboldIt-onum}{} designated si, and font selection using si is described in Section ... . Naming shape and series ˆe de facto standard for the abbreviation strings associ- . Font families ated with shape and series in fd files is described by LATEX’s Some font features do not fit into the series-shape scheme. “New Font Selection Scheme” (NFSS)[]. Any choice ˆe most common of these features is numerical figure types, which may vary as lining (1234), old-style (), ¹ ˆis is most common when two different typefaces that do not match in size are used together in a document; in the next section we superior (¹²³⁴), inferior (₁₂₃₄), and so on. To handle font expose this capability to the document author. selection with different styles of figures in TEX, typically,  TUGboat, Volume  (), No. 

each type of figures generates its own font family. To gen- \ProvidesPackage{minion}[Minion Pro OSF v0.99b 9/06] erate the name of the font family, the three-letter font des- \RequirePackage[LY1]{fontenc} % uses LY1 encoding ignation has a one-letter suffix appended to its -letter \DeclareOption{lining}{\renewcommand*{% font name. Lining figures are associated with no suffix \rmdefault}{pmnx}} or with x, the “expert” suffix; old-style figures are j; supe- \DeclareOption{oldstyle}{\renewcommand*{% riors receive 1 and inferiors 0; and so on. ˆus the Min- \rmdefault}{pmnj}} ion (pmn) font family with lining figures is pmnx; Minion \ExecuteOptions{oldstyle} with old-style figures is pmnj; and so on. Section .. \ProcessOptions* shows how to perform font selection with different font \endinput families. . Selecting font variants  Style files Now we know how to select a given font family, which At this point we have installed our fonts into TEX (Sec- may feature a large number of font weights, widths, and tion ) and categorized them by family, shape, and series variants within it. Once we have selected a font family, (Section ). ˆe final step is to make those fonts available how can we direct TEX to select from our many alter- to the TEX document author as text fonts. ˆe tools de- natives within that font family, such as boldface, italic, scribed in Section  automate the creation of the sty files small-caps, and so on? ˆe answer is to change the cur- that contain the commands in this section. rent series and shape. While the low-level TEX commands (\fontseries and . Selecting a font family \fontshape) directly change the current series and shape, ˆe default “roman” (text) font family is defined by the LATEX’s higher-level commands are more commonly used. TEX variable \rmdefault. Redefining \rmdefault to another Most LATEX users know that \textbf selects boldface; LATEX font family (as named by \DeclareFontFamily) resets the implements this internally by setting the font series to roman font family. For instance, the command below sets \bfdefault, which is in turn defined as bx. Similarly, \textit the current font family to our example font family, Adobe (italics) utilizes italics by setting the font shape to \itde- Minion with old-style figures. fault, defined as it. And \textsc (small caps) sets the shape \renewcommand*{\rmdefault}{pmnj} to \scdefault, defined as sc. We can use similar techniques to add more selec- In fact this is all we need to do to use our new font tion commands for more features that are not part of the family. (Similarly, we set the default sans font fam- LAT X core set of commands. Philipp Lehman’s font in- ily by setting the variable \sfdefault, and the E stallation guide is an excellent tutorial for this task []; it family with \ttdefault.) However, rather than using one carefully constructs and explains a style file of NFSS ex- of these commands directly in T X files, it’s typical to in- E tensions, nfssext.sty. We now take a closer look at how stead wrap it in a style file and invoke \usepackage on to support alternate weights and how nfssext.sty supports that style file to perform this declaration. A minimal (but small caps with italics and switching between old-style complete) style file called minion.sty for LAT X that uses E ε and lining figures. the  encoding follows. \NeedsTeXFormat{LaTeX2e} .. Supporting alternate weights \ProvidesPackage{minion}[Minion Pro OSF v0.99a 9/06] By default, LATEX supports a bold (\textbf) weight com- \RequirePackage[LY1]{fontenc} % uses LY1 encoding mand. Let’s say we feel the default bold is a little too dark, \renewcommand*{\rmdefault}{pmnj} and we’d like to use semibold-condensed instead. We can \endinput accomplish this with a single line in our sty file: . Selecting between multiple font families \renewcommand*{\bfdefault}{sbc} What if we’d like to use the same style file to support Min- And now we like semibold-condensed so much, we’d like ion font families with both old-style (pmnj) and lining to add it as a new command, \textsb. (pmnx) figures? We use a package option to choose be- \newcommand\sbdefault{sbc} tween the two font families: \DeclareRobustCommand\sbseries \usepackage[oldstyle]{minion} {\not@math@alphabet\sbseries\mathsb \fontseries\sbdefault\selectfont} or \DeclareTextFontCommand{\textsb}{\sbseries} \usepackage[lining]{minion} For simple features, declaring a default value, a Robust- ˆe extended style file that supports these options is: Command, and a TextFontCommand suffice to make the \NeedsTeXFormat{LaTeX2e} feature available within TEX. TUGboat, Volume  (), No.  

.. Supporting small caps with italics differences and should suffice for most users; the au- Lehman points out that italics and small caps are both thors’ use of Perl (autoinst) or Python (otfinst) may make in the same “variant” category, so the built-in \textit and the difference for programmers familiar with one or the \textsc commands do not work harmoniously together. other. Among the features supported by both tools are: Barring changes to the core LATEX font selection prim- itives, text set to both italic and small-caps would only • A command-line interface that takes one or more preserve the innermost setting. OpenType font files as arguments; nfssext.sty remedies this problem by declaring an si • Installation of font families with the following fea- shape, analogous to it and sc, and its associated selection tures if present: roman and italic text; small-caps; commands: lining, old-style, superior, and inferior figures; and \newcommand*{\sidefault}{si} swashes; \DeclareRobustCommand{\sishape}{% • nfssext.sty font selection commands; \not@math@alphabet\sishape\relax • Support of optical sizes; and \fontshape\sidefault\selectfont} • Auto-generation and installation of sty and fd files. It then changes the italic and small-caps commands to Some of the differences are that autoinst also sup- check the current shape before setting the new shape. ports numerators, denominators, upright , and ti- Only if the current shape is italic and the new shape is tling text, and generates ornaments, while otfinst sup- small-caps, or vice versa, does it set the new shape to si. ports a scaling option at runtime. otfinst uses fontname (Recall that we assigned the si code to small-caps + italic naming, while autoinst is more verbose in its naming variants in Section ..) scheme. Finally, otfinst uses the metadata associated with T  is properly  small-cap, italic text. each OpenType font to determine the font’s characteris- {\textsc{The \textit{result}} is \textit{properly tics, while autoinst extracts the characteristics from the \textsc{nested}} small-cap, italic text. font’s filename. .. Supporting old-style and lining figures . Other tools Section . showed how to choose old-style or lining fig- Geoffrey Washburn’s otftofd [] automates the process ures by default. However, it may be useful to have one of creating fd files from OpenType fonts. Washburn indi- as the default and use the other via an explicit command. cates that it, like autoinst, is designed primarily for Adobe In nfssext.sty, the new commands \textos selects old-style font conventions. otftofd is a shell script written in the figures and \textln lining figures. In this article, for in- Caml Shell and uses otftotfm. stance, old-style is the default, so 1234\textln{1234} results ˆe MinionPro TEX package [] provides extensive in 1234. TEX support files for Adobe Minion, including compre- Because each style of figures is associated with a dif- hensive options for figure types, encodings, ornaments, ferent font family, using an alternate figure style requires letterspaced small caps, and calligraphic, math, black- changing the family. nfssext.sty accomplishes this task as board, and Greek fonts. ˆe MinionPro distribution was follows. Switching to lining figures for the font named built using otftotfm and thus contains all TEX support abc first tries font family abcx then font family abc, using files without the need for the steps described in this ar- the TEX primitive \selectfont; switching to old-style fig- ticle. MinionPro includes a package called fontaxes that ures switches to font family abcj. Fortunately this com- extends (and partially replaces) NFSS’s rigid classification plexity is all hidden inside nfssext.sty. of font attributes.  Tools  Conclusions For any OpenType font installation into TEX, the vital tool ˆis article has described the steps necessary to use Open- is otftotfm []. However, otftotfm only installs from a sin- Type fonts in TEX: use otftotfm to install TEX font metric gle OpenType font file with a single set of options, while and encoding files; build a font description file for each users typically would like to install an entire family of font family; and build a style file for convenient font se- OpenType font files with all available options. In addi- lection in a document. tion, otftotfm does not address the problem of creating fd OpenType handling in TEX is still far from ideal, or sty files. however. Systems like X TE EX[] use OpenType fonts na- To address these issues, Marc Penninga wrote au- tively with truly impressive results, and native OpenType toinst [] and John Owens wrote otfinst [], both of support is slated for future versions of pd ex []. How- which wrap around otftotfm to install entire TEX font ever, equally important are the other components of TEX families. ˆe two tools have far more similarities than that relate to font selection and invocation.  TUGboat, Volume  (), No. 

• NFSS is insufficient to elegantly describe the wide References variety of available font attributes. ˆe combination [] Karl Berry. Filenames for fonts. TUGboat, of weight and width into series is awkward, multi- ():–, November . ple variants may combine into a single shape, and http://www.tug.org/fontname. features such as figure styles are not covered at all. [] Achim Blumensath, Andreas Bühmann, and ˆe ideal font selection scheme not only includes Michael Zedler. MinionPro, September . all variants of a typeface but also allows simple, or- http://www.ctan.org/tex-archive/fonts/minionpro/. thogonal selection of any set of typeface features, and transparent substitution when features are not [] Maarten Gelderman. A short introduction to present. New, flexible approaches such as fontspec font characteristics. TUGboat, ():–, June . in X TE EX[] and MinionPro’s fontaxes are encour- aging steps toward such a scheme. [] Taco Hoekwater. Opening up the type. TUGboat, ():–, . • Even within NFSS the codes are not standardized. [] Alan Hoenig. TEX Unbound. Oxford University Lehman’s scheme appears to be widely used, how- Press, , NY, . ever, which is encouraging. [] Alan Jeffrey, Rowland McDonnell, and Lars • Even for simple features, font selection is wholly Hellström. fontinst: Font installation so ware for nonstandardized and non-orthogonal. Selection of TEX, December . alternate widths is not possible without low-level http://www.tug.org/applications/fontinst/. commands, the default italic and small caps com- [] Jonathan Kew. ˆe X TE EX typesetting system, mands do not work together because LATEX’s default . http://scripts.sil.org/xetex. handling of the “variant” category does not address [] Eddie Kohler. LCDF type so ware, . multiple variants, and using non-standard but de- http://www.lcdf.org/type/. sirable selection commands such as \textln in shared [] Philipp Lehman. ˆe font installation guide, files is discouraged because a default T X installation E December . http://www.ctan.org/tex-archive/ does not support them. info/Type1fonts/fontinstallationguide/. • Finally, while many advanced OpenType features [] Adam T. Lindsay. OpenType installation basics can be supported in TEX’s font files, invoking those for ConTEXt. ˆe PracTEX Journal, (), April features with high-level commands is a much more . troublesome task. For most features beyond the ba- [] Frank Mittelbach and Michel Goossens. ˆe sic ones, T X and LAT X have no standardized sup- E E LATEX Companion. Addison-Wesley, Boston, MA, port at the author level (or, in many cases, no sup- second edition, . port at all). Features like ornaments, contextual al- [] John Owens. otfinst, . http://www.ctan.org/ ternates, and discretionary ligatures would benefit tex-archive/fonts/utilities/otfinst/. from a discussion about how they can be invoked by the programmer in a standard way. [] Marc Penninga. fontools, . http: //www.ctan.org/tex-archive/fonts/utilities/fontools/. [] Will Robertson. Advanced font features with Acknowledgements Many thanks to Karl Berry for en- X TE EX—the fontspec package. TUGboat, couraging me to write this article and for his helpful ():–, . suggestions along the way. Eddie Kohler’s tools greatly [] LATEX Project Team. LATEXε font selection, June ease the task of OpenType support in TEX, and I also . http://www.ctan.org/tex-archive/macros/ thank Eddie for his prompt and thorough answers to my /doc/fntguide.. many questions about his tools. Karl Berry and Philipp [] Geoffrey Washburn. ot ofd, . http: Lehman were both quite helpful in understanding font- //www.ctan.org/tex-archive/fonts/utilities/otftofd/. name and how it’s used within the TEX world. ˆe use of Philipp’s nfssext.sty was vital in the development of  John D. Owens otfinst . ˆomas Phinney, Geraldine Wade, and Michael Department of Electrical and Duggan provided fonts for testing, and ˆomas secured Computer Engineering permission to use Adobe fonts for the article itself. Fi- University of California nally, thanks also to Nelson Beebe, Stephen Hartke, Oleg One Shields Avenue Katsitadze, Eddie Kohler, Marc Penninga, Will Robert- Davis, CA  USA son, and Michael Zedler for their thoughtful comments jowens (at) ece dot ucdavis dot edu on the article during the review process. http://www.ece.ucdavis.edu/˜jowens/