- TeX font metric
Infobox file format
name = TeX font metric
icon =
extension =.tfm
mime = application/x-tex-tfm (unofficial)
owner =Donald E. Knuth
typecode =
genre = font metricTeX font metric, or TFM, is a fontfile format used by theTeX typesetting system. It is a font metric format, not an outline font format likeTrueType , because it provides only the information necessary to typeset the font such as each character's width, height and depth. The actualglyphs are stored elsewhere. This is not unique to TeX; Adobe's AFM files and Windows' PFM files use the same technique.TFM files contain all of the information TeX needs to produce its device-independent (DVI) output. The actual glyphs are then inserted by the eventual DVI output driver or previewer, using, for instance,
TrueType fonts, or fonts inMETAFONT 's PK format. The format is designed to be extremely compact: in the originalComputer Modern distribution, every font's TFM file is smaller than 2kb. [cite web | title = CTAN:/tex-archive/fonts/cm/tfm/ | publisher = Comprehensive TeX Archive Network | date = 1996-07-08 | url = http://www.ctan.org/tex-archive/fonts/cm/tfm/ | accessdate = 2006-07-30 ]pecification
The canonical specification of the TFM format is embedded in the
source code of the program "TFtoPL". [cite paper | author = Knuth, Donald E. | title = TFtoPL | version = Version 3.1 | publisher = | date = November 1989 | url = http://www.ctan.org/tex-archive/systems/knuth/texware/tftopl.web | format =WEB source code; extract full documentation usingWEAVE | accessdate = 2006-07-30 ]A TFM file is broken down into a series of four-byte words, which can contain data fields of various lengths. Any data fields that are more than one byte long are held in
big endian order. (The exact same file will be generated, regardless of architecture of the computer generating it.) The six-word (24-byte) file header contains twelve unsigned 16-bit integers which describe the length of the file, the range of character codes contained in the font, and the size of each of the tables. A single TFM file describes between 0 and 256 characters, inclusive.The body of the TFM file consists of a series of ten tables, each one except for the first laid out as an array of fixed-length fields. A 32-bit signed fixed-point number with 12 bits to the left of the decimal point, referred to as a
fix_word
, is used heavily. The first table,header
, contains a checksum designed to prevent a document compiled into a DVI with one set of fonts from being printed with a different set, as well as ASCII descriptions of the character coding scheme (e.g.,ASCII
orTeX text
) and the font family. It also contains the font's design size; all followingfix_word
values are interpreted as multiplication factors for this.The next table,
char_info
, consists of one word per character, and contains indexes into the width, height, depth and italic correction tables. This is a device to save space, because width values, for instance, are frequently duplicated. Because height and depth values are duplicated more frequently, to fit all of these values into a single word, the indexes are limited to four bits. Because of this, there is a limit of sixteen different character heights and sixteen different character depths in any given TFM file. Also, there is a limit of sixty-four different italic corrections. There is also one more index which can point into thelig_kern
table, or to information about extensible characters, depending on a two-bittag
value. Extensible characters use a series of repeated characters to construct a single large one of arbitrary size, usually large delimiters such as parentheses or brackets.There then follow the four tables
width
,height
,depth
anditalic
, which contain values (infix_char
format) referred to by indexes inchar_info
.Ligatures and
kerning are represented using a simple programming language consisting of fixed-length four-byte operations in thelig_kern
table; it makes use of kerning values (specified asfix_word
s) in thekern
table, which follows it.Extensible characters are specified in the
exten
table, using a series of four-byte words specifying the top, middle, bottom and repeated sections of an extensible character. For instance, the character at left below would be obtained by setting (top
,mid
,bot
,rep
) to the character codes for (/, <, , |). The first three character codes can be set to zero. For instance, ifmid
were set to 0 in the previous example, the result would change from the brace drawn at left to the parenthesis drawn to its right./ /
<
Of course, the font would use specially designed characters for this, instead of reusing existing ones, but the principle is the same.
The final table,
param
, contains a series of specifically definedfix_word
values, including the font'sx-height and the amount of italic slant (to determine how far to shift accents). Certain coding schemes such asTeX math symbols
andTeX math extension
define extra parameters which appear after these.Property lists
There is a
human-readable equivalent to the TFM format called PL, for property list. There is an exact correspondence between a TFM file and a PL file: one can be freely converted to the other and back again with no loss of information using thetftopl
andpltotf
programs. The PL format, optimized for usability instead of space, does not make the same use of references that the TFM format does. For instance, many characters in a font may use the same character width, which would be represented only once in the TFM format, and this value would be referenced by each character, since the index would be significant smaller than the full-precision numerical value. In the PL format, however, the full value is written out each time it appears.For example, this is the code for the upper-case letter Y in
Computer Modern Roman, ten point:(CHARACTER C Y (CHARWD R 0.750002) (CHARHT R 0.683332) (CHARIC R 0.025) (COMMENT (KRN C e R -0.083334) (KRN C o R -0.083334) (KRN C r R -0.083334) (KRN C a R -0.083334) (KRN C A R -0.083334) (KRN C u R -0.083334) ) )
The kerning values seen here are copied from the another section of the PL file in order to make it easier to read, which in itself is redundant. Notice how the full numeric values of the kerning constants are written out each time they appear, instead of being stored once and referred to by a much smaller index.
References
External links
* [http://www.math.umd.edu/~asnowden/comp-cont/tfm.html Description of the TFM File Format]
Wikimedia Foundation. 2010.