
Metric files galore
Most digital typefaces today, however, exist as postscript fonts. The metric information is stored in .afm (UNIX) or .pfm (PC) files or in FOND resources (Mac). These files must be converted to .tfm form in order for TeX to utilize the fonts. This chapter describes the conversion process.
Essentially all TeX distributions include the afm2tfm utility, which allows the straightforward production of .tfm files from .afm files, and whose use we will describe shortly. The existence and wide distribution of this utility solves the problem of .tfm extraction on UNIX systems, and makes changes the problem of obtaining a .tfm file into a problem of obtaing an .afm file on all other platforms. Many high-quality fonts from commercial vendors are distributed together with the corresponding .afm files.
In the absence of an .afm file, PC users need the pfm2afm conversion program; if this program was not included in your TeX distribution, it may be obtained via ftp from numerous archives.
Mac users will have more trouble extracting .afm data from FOND
resources. The commercial font manipulation application Fontographer is up
to the task, but is quite expensive. Bounding box data, but not kerning
pair data, may be extracted from .pfa files using the getafm.ps postscript
program.
Encoding vectors This is accomplished by providing afm2tfm with an .enc file containing
a list of the official Adobe character names in the order required by
our encoding vector. For example the T1.enc file contains the lines:
Be aware that, if you are
converting a metric file for a font with additional ligatures you
want automaticaly substituted (e.g. the ct- and st-ligatures of
some 17th century typefaces), or want to preserve your font's kerning
between numerals (e.g. because it contains oldstyle, nonlining numerals for
use within body text), you may have to add or remove some LIGKERN
commands.
afm to tfm conversion Why the two-step process, first invoking When you have made the relevant .tfm files available to TeX (often it
suffices to place them in the same directory as the .tex file that uses
them) you should be able to successfully produce a .dvi file. Does it
work? You will not, however, be able to view or print this .dvi file
until you have appropriately configured your .dvi printing and viewing
utilities, which is the subject of the next chapter.
One issue which must be addressed when converting metrics is that
the order in which the characters appear in the original metric
file may not be the order in which TeX expects them: when an afm
file says "the width of character 250 is so-and-so", the
afm file may think it is talking about the oe-ligature, but when
using the T1 encoding, TeX expects the oe-ligature to appear in
position 247 and position 250 to be occupied by the ú character.
We must somehow tell the afm2tfm converter about the order we want the
characters to appear in the tfm file.
The encoding vector contains a list of exactly 256 Adobe official
character names ordered according to the T1 encoding. The remaining
lines describe the standard LaTeX ligatures and blow away any kerning
associated with spaces (since TeX doesn't use space characters) and
numerals (in order to maintain alignment in tables). The complete
T1.enc file is available for download.
% T1 Encoding vector
/T1Encoding [
/grave /acute /circumflex /tilde /dieresis ...
... /yacute /thorn /germandbls ] def
%
% Ligatures to enforce
% LIGKERN f f =: ff ; f i =: fi ; f l =: fl ;
% LIGKERN ff f =: fff ; ff i =: ffi ; ff l =: ffl ;
% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ;
% LIGKERN quoteleft quoteleft =: quotedblleft ;
% LIGKERN quoteright quoteright =: quotedblright ;
% LIGKERN comma comma =: quotedblbase ;
% LIGKERN less less =: guillemotleft ;
% LIGKERN greater greater =: guillemotright ;
% LIGKERN question quoteleft =: questiondown ;
% LIGKERN exclam quoteleft =: exclamdown ;
%
% Kerns to eliminate
% LIGKERN space {} * ; * {} space ;
% LIGKERN zero {} * ; * {} zero ; one {} * ; * {} one ;
% LIGKERN two {} * ; * {} two ; three {} * ; * {} three ;
% LIGKERN four {} * ; * {} four ; five {} * ; * {} five ;
% LIGKERN six {} * ; * {} six ; seven {} * ; * {} seven ;
% LIGKERN eight {} * ; * {} eight ; nine {} * ; * {} nine ;
Now we are ready to perform the conversion. To generate
garrm.tfm with T1 encoding from garrm.afm, we run afm2tfm with
the command line
This produces the files garrm.tfm (with bad character ordering)
and garrm.vpl (which describes a so-called virtual font with
good character ordering). Next we run vp2vf with
afm2tfm garrm garrm -v garrm -t T1.enc
to obtain a new garrm.tfm file (with good character ordering) and
the virtual font file garrm.vf (which we will not be using). Mac users
note that, upon launching the afm2tfm and vp2vf tools, you will be given
the oportunity to enter options invoked on the command line.
vp2vf garrm garrmafm2tfm, then
vp2vf? Because it is sometimes useful to edit the .vpl file
which acts as a messenger between the two tools. We discuss such
cases later in the section on virtual fonts.
Back to the table of contents, or...
...on to the chapter on configuring dvi intrepreters