Font Installation the Shallow Way∗
Total Page:16
File Type:pdf, Size:1020Kb
Font installation the shallow way∗ SIEP KROONENBERG Rijksuniversiteit Groningen Department of Economics P.O. Box 800 9700 AV Groningen, The Netherlands siepo (at) cybercomm dot nl Abstract For one-off projects, you can cut corners with font installation and end up with a more manageable set of files and a cleaner TEX installation. This article shows how and why. Keywords Font installation, afm2pl, afm2tfm, TrueType, pdftex, mapfiles If you are putting together a flyer or invitation or other system, whether or not it contains afm2pl or book cover, then it would be nice if you could test afm2tfm. a batch of fonts from your CorelDRAW or Illustra- An example tor CD, or your Windows font directory, without too We use a decorative script font Pepita that Adobe bun- much trouble and without polluting your TEX instal- lation with a lot of stuff you are never going to use dles (or used to bundle) with some of its software. again. pdftex needs the actual font file epscr___.pfb, its This article takes you through the steps needed TEX font metrics file epscr7t.tfm and a mapfile con- to use one or more fonts in one particular document. taining an entry relating the two. First, we copy not We won’t really install the fonts; we just generate the only epsrc___.pfb but also epsrc___.afm to the working directory. We need the latter file to generate files that TEX needs and leave them where TEX will find them, i.e. in the working directory. This makes the .tfm file. Next, we enter the following commands it easy to take the project to another system, and easy on a command line: to clean things up. afm2pl -p ot1 epscr___.afm epscr7t.pl We will primarily use afm2pl to generate .tfm pltotf epscr7t (TEX Font Metric) files. Later on, we show the steps The extensions .afm and .pl are optional. The required for afm2tfm. Both programs are simpler and first command converts the .afm file to an (almost) much faster to use than the usual choice, fontinst. human-readable text version of the desired .tfm file. They create few intermediate or unnecessary files and The second command creates the more compact bi- do their job without virtual fonts. Virtual fonts and nary version. fontinst have their place, but sometimes there is no Before we can use this font, we must tell LATEX good reason to put up with the inevitable mess. about it. We do this with a font family definition file afm2tfm is available on all major free TEX imple- ot1myfontfam.fd: mentations. afm2pl is part of current TEX Live distri- \ProvidesFile{ot1myfontfam.fd} butions. Note that these programs are needed only to \DeclareFontFamily{OT1}{myfontfam}{} \DeclareFontShape{OT1}{myfontfam}{m}{n}{ create the necessary font support files for TEX; once these files have been created, they can be used on any <-> epscr7t }{} The prefix ot1 indicates the encoding, which tells ∗This article appeared originally in slightly different form in MAPS 33, fall 2005. which characters occur at what positions. The next section will say more about encodings. The param- eters to \DeclareFontShape are successively encod- 66 TUGboat, Volume 27 (2006), No. 1 — Proceedings of EuroTEX 2006 Font installation the shallow way ing, family name, weight (e.g. bold), shape, font file We hope that mainstream TEX will eventually (without extension) and special options. You can nor- move to Unicode, which is a comprehensive encod- mally leave this last parameter empty. With just one ing of all conceivable characters, including far-eastern family member, we are not fussy about font charac- alphabets and mathematical symbols. When that hap- teristics and just pick defaults. We also leave this file pens, we can forget about encodings and also do away in the working directory. with many applications of virtual fonts. There are This is the code of our first testfile exabasic.tex, already some Unicode-based variants of TEX.2 which uses this font: For a PostScript .pfb or .pfa font, character met- \documentclass{article} rics are stored in a separate .afm file. These metrics \pagestyle{empty} are associated with characters, not with character po- \pdfmapfile{=epscr7t.map} sitions. Therefore you should specify an encoding to afm2pl or afm2tfm.3 The same encoding must also \newcommand{\fancyfont}% be specified in the mapfile entry. A PostScript font {\fontfamily{myfontfam}\selectfont} usually has more characters than fit into a single TEX \begin{document} encoding. \fancyfont A command-line option such as ‘-p texnansi’ or Hello, world! ‘-p texnansi.enc’ means that the encoding should be read from a file texnansi.enc. This encoding Accents: \’el\‘eve bl\"of \"i; probably has a different internal name. Kerning: WAV, LTa \end{document} OT1 encoding The \pdfmapfile command causes pdflatex to If you don’t tell TEX otherwise, it assumes that you read the file epscr7t.map, which tells pdftex how are using the OT1 encoding. This encoding uses only to get the font into the output file. The prepended ‘=’ 128 of the 256 available slots. TEX creates missing tells pdftex that it should read epscr7t.map in addi- accented characters from an unaccented base charac- tion to, not instead of, the default mapfile, and that in ter and a separate accent character. Unfortunately, case of a conflict epscr7t.map wins. this interferes with hyphenation. Apart from this, the Now we are ready to compile exabasic.tex: OT1 encoding has various other oddities, and is best pdflatex exabasic avoided. OT1-encoded fonts often have a TEX name 7t 4 ot1.enc This is the result: ending in . Note that comes with afm2pl and is probably not available if you don’t have afm2pl Hello, world! on your system. Accents: ´el`eve bl¨of ¨ı; Kerning: WAV, LTa T1 encoding Encodings T1 is the successor to OT1. It uses all available slots, and has lots of accented characters, including those for We already mentioned encodings briefly. Now it is Eastern European languages. Because the T1 encoding time to dig a little deeper, because it is a topic that left no room for symbols such as ‘‰’ or ‘©’ or ‘‡’ you can easily trip you up. will need to get those from a second encoding of the An encoding defines what character corresponds same font. This second encoding is called TS1 or ‘text to which number. Only numbers between 0 and 255 companion’. are allowed. A .tfm file associates character metrics di- rectly with character positions and doesn’t know what 2Omega and its offshoot Aleph are Unicode-based. Users may also be interested in X T X(http://scripts.sil.org/xetex), position represents what character. TEX simply makes E E which is built on top of a regular TEX implementation and lets you assumptions about this correspondence or encoding, use Unicode fonts installed on the system directly with TEX. and if you disagree with those assumptions then you 3If you don’t specify an encoding, then you get the encoding from the .afm file, which is almost certainly not what you want. need to load some macro package or other to tell TEX 4For afm2pl and afm2tfm, font names have no particular meaning. otherwise. This is one more difference with fontinst. I add encoding suffixes such as 7t and 8y to font names just as reminders to myself. TUGboat, Volume 27 (2006), No. 1 — Proceedings of EuroTEX 2006 67 Siep Kroonenberg For most traditional PostScript fonts, some of the Accents: \’el\‘eve bl\"of \"i; accented characters in the T1 encoding aren’t actually Symbols: present and must be created with virtual font tech- \textparagraph{} \textdaggerdbl{} \texttrademark{} \textcopyright nology from a base character and an accent. Since \end{document} it doesn’t have to be done by TEX itself, this is no obstacle to hyphenation. And this is the result. Notice the extra symbols. Although you can tell afm2pl to use T1 encoding, These are absent from the T1 encoding and would it can’t create composite characters, and such compos- have required a text companion font. ite characters will be missing unless they are already Hello, world! present in the original font. Accents: élève blöf ï; Symbols: ¶ ‡ ™ © T1-encoded fonts often have a TEX name ending in 8t. TrueType Another scalable font format is TrueType, which is Texnansi encoding supported by pdftex but currently not by dvips. Font The texnansi encoding, known as LY1 to LATEX, was metrics are stored in the font file itself. Using True- introduced by Y&Y, the now-defunct company be- Type is somewhat more work; the following com- hind Y&YTEX, dviwindo and dvipsone. It combines mands are required to import a TrueType font such a good selection of both accented letters and typo- as Trebuchet: graphic symbols, and normally contains everything ttf2afm trebuc.ttf >trebuc.afm you need in a single encoding, at least for Western Eu- afm2pl -p texnansi trebuc trebuc8y ropean languages. Texnansi-encoded fonts often have pltotf trebuc8y a name ending in 8y. <edit mapfile to replace .pfb with .ttf> The package texnansi selects the texnansi encod- ttf2afm extracts the metric information from the ing and contains some additional code to smooth out .ttf file.5 incompatibilities with T1 and OT1. afm2pl has no way of knowing that the .afm de- A texnansi example scribes a TrueType font, and guesses that the actual For this example, we choose Augie, a handwriting font fontfile is trebuc.pfb. Therefore you have to fix the mapfile afterwards. from TEX Live. These are the commands for generat- ing the .tfm and .map files: We leave it as an exercise for the reader to write the A afm2pl -p texnansi augie___.afm augie8y.pl .fd file and LTEX source for the following example: pltotf augie8y Hello, world! This is ly1augie.fd (notice the ly1 prefix): Accents: élève blöf ï; Kerning: WAV, LTa, WAV, LTa.