HOME

TheInfoList



OR:

Metafont is a description language used to define raster fonts. It is also the name of the
interpreter Interpreting is translation from a spoken or signed language into another language, usually in real time to facilitate live communication. It is distinguished from the translation of a written text, which can be more deliberative and make use o ...
that executes Metafont code, generating the bitmap fonts that can be embedded into e.g.
PostScript PostScript (PS) is a page description language and dynamically typed, stack-based programming language. It is most commonly used in the electronic publishing and desktop publishing realm, but as a Turing complete programming language, it c ...
. Metafont was devised by
Donald Knuth Donald Ervin Knuth ( ; born January 10, 1938) is an American computer scientist and mathematician. He is a professor emeritus at Stanford University. He is the 1974 recipient of the ACM Turing Award, informally considered the Nobel Prize of comp ...
as a companion to his
TeX Tex, TeX, TEX, may refer to: People and fictional characters * Tex (nickname), a list of people and fictional characters with the nickname * Tex Earnhardt (1930–2020), U.S. businessman * Joe Tex (1933–1982), stage name of American soul singer ...
typesetting system. One of the characteristics of Metafont is that the points defining the shapes of the
glyph A glyph ( ) is any kind of purposeful mark. In typography, a glyph is "the specific shape, design, or representation of a character". It is a particular graphical representation, in a particular typeface, of an element of written language. A ...
s—for example top of a
stem Stem or STEM most commonly refers to: * Plant stem, a structural axis of a vascular plant * Stem group * Science, technology, engineering, and mathematics Stem or STEM can also refer to: Language and writing * Word stem, part of a word respon ...
, or intersection of a stem and crossbar—are defined with geometrical equations; the intent that the three stems of an ‘m’ are equally spaced horizontally might be expressed as x_2-x_1 = x_3-x_2 if points 1, 2, and 3 are at the bottom ends of the three stems, whereas the intent that they all end on the same vertical position would be y_1 = y_2 = y_3 . Metafont is a macro language, where operations such as "draw a lower case top of stem serif at point 4" might appear as one macro instruction (with the point as argument) in the program for a letter. For describing shapes, Metafont has a rich set of
path A path is a route for physical travel – see Trail. Path or PATH may also refer to: Physical paths of different types * Bicycle path * Bridle path, used by people on horseback * Course (navigation), the intended path of a vehicle * Desir ...
construction operations that mostly relieves the user of having to calculate control points. Many families of Metafont fonts are set up so that the main source file for a font only defines a small number of design parameters (
x-height upright 2.0, alt=A diagram showing the line terms used in typography In typography, the x-height, or corpus size, is the distance between the baseline and the mean line of lowercase letters in a typeface. Typically, this is the height of the le ...
, em width, slant, vertical stroke width, etc.), then calling a separate source file common for a whole range of fonts to actually draw the individual glyphs; this is the meta aspect of the system.


Modes of operation

Metafont is most often run as a helper to output device (printer, screen) drivers; in those cases, its job is to generate bitmaps for a font for a specific combination of output device (called a ''mode'' in Metafont) and resolution (visible in the name of the output file, see below). These bitmaps are typically stored for later reuse, so that Metafont does not have to be run every time a document is displayed, but on the other hand TeX distributions with a Metafont component have typically not included any prebuilt bitmap fonts, since they would be rather large in comparison to the sources from which they could be generated. Since Metafont fonts were traditionally the TeX default from which other font formats were exceptions, an incomplete installation of a non-Metafont font can sometimes result in Metafont being called and emitting a confusing "''somefont''.mf not found" error message. Equally important, but not as common, is running Metafont to generate a font metric (TFM) file; a TFM file is only generated if the ''fontmaking'' variable is positive. Traditionally TeX distributions have often come with all TFM files pregenerated (since they are pretty small), but someone installing a Metafont font from sources will have to generate its TFM file before TeX can use it. A third way of operating Metafont is ''proof mode'': if the ''proofing'' variable is positive then the bitmap font file also contains additional information provided via special commands, in particular the positions and names of points the font designer considered important for the design. If using the separate gftodvi utility to generate enlarged images of the font glyphs, this information from specials is included; point positions are not limited to pixel resolution. Metafont can also be run interactively, and has commands for displaying on the screen the images it produces. Knuth has said that he uses Metafont as a kind of desk calculator for solving complicated equations, though he now uses MetaPost for mathematical illustrations. Metafont can render any kind of graphical output, not just glyphs. However, MetaPost and
Asymptote In analytic geometry, an asymptote () of a curve is a line such that the distance between the curve and the line approaches zero as one or both of the ''x'' or ''y'' coordinates tends to infinity. In projective geometry and related contexts, ...
are preferred for mathematical illustrations. Metafont is most commonly invoked without a direct request from the user. DVI files can only contain references to typefaces, rather than the sets of raster or vector glyphs that other formats like PostScript allow. Consequently, the glyphs in the typefaces need to be accessed whenever a request is made to view, print or convert a DVI file.


Output files

Metafont outputs several kinds of files: for a file called NAME.mf, it can output: * NAME.NNNNgf – File with raster output at resolution NNNN (2602 by default). * NAME.tfm – File with
TeX font metric Tex, TeX, TEX, may refer to: People and fictional characters * Tex (nickname), a list of people and fictional characters with the nickname * Tex Earnhardt (1930–2020), U.S. businessman * Joe Tex (1933–1982), stage name of American soul sing ...
information, which is the information TeX needs. Usually metafont has to be told to generate this file. * NAME.log – Log file output from processing After running Metafont, typically one uses the gftopk program to convert the NNNNgf files to pk (packed) format (.NNNNpk). The pk format was primarily introduced to reduce file size (to about half), but expected to also speed up processing since less data would have to be
input/output In computing, input/output (I/O, i/o, or informally io or IO) is the communication between an information processing system, such as a computer, and the outside world, such as another computer system, peripherals, or a human operator. Inputs a ...
. The GF and PK formats both employ
run-length encoding Run-length encoding (RLE) is a form of lossless data compression in which ''runs'' of data (consecutive occurrences of the same data value) are stored as a single occurrence of that data value and a count of its consecutive occurrences, rather th ...
of bitmaps, but make different binary encodings of the run-lengths. The PK format also does some preprocessing of the bitmaps (bounding box, eliding repeated rows) and encodes all rows of a character as one long bit-sequence. In the ''TeX Directory Structure'' standard, filenames are limited to 8+3 characters, so GF and PK files would only have extensions .gf and .pk. Files for different resolutions are kept apart by placing them in separate directories, named dpiNNNN, e.g. dpi300/cmr10.pk.


Language

The Metafont language is an interpreted language for programs that are ''essentially declarative rather than imperative''.


Variables and equations

Variables in Metafont can be of eight different types: * Numeric: fixed-point signed numbers with an
epsilon Epsilon (, ; uppercase , lowercase or ; ) is the fifth letter of the Greek alphabet, corresponding phonetically to a mid front unrounded vowel or . In the system of Greek numerals it also has the value five. It was derived from the Phoenic ...
of 2^, capped to be less than 4096 ( Q12.16). This is the default for variables not declared to be of another type. * Pair: a pair of numerics, used primarily for representing points in the plane. * Path: as in
PostScript PostScript (PS) is a page description language and dynamically typed, stack-based programming language. It is most commonly used in the electronic publishing and desktop publishing realm, but as a Turing complete programming language, it c ...
/
PDF Portable document format (PDF), standardized as ISO 32000, is a file format developed by Adobe Inc., Adobe in 1992 to present documents, including text formatting and images, in a manner independent of application software, computer hardware, ...
/ SVG, a
parametric curve In mathematics, a parametric equation expresses several quantities, such as the coordinates of a point (mathematics), point, as Function (mathematics), functions of one or several variable (mathematics), variables called parameters. In the case ...
in the plane whose coordinate functions are
piecewise In mathematics, a piecewise function (also called a piecewise-defined function, a hybrid function, or a function defined by cases) is a function whose domain is partitioned into several intervals ("subdomains") on which the function may be ...
cubic polynomials. As in those other systems, path segments are encoded as
Bézier curve A Bézier curve ( , ) is a parametric equation, parametric curve used in computer graphics and related fields. A set of discrete "control points" defines a smooth, continuous curve by means of a formula. Usually the curve is intended to approxima ...
s in terms of knots and control points. * Transform: an
affine transformation In Euclidean geometry, an affine transformation or affinity (from the Latin, '' affinis'', "connected with") is a geometric transformation that preserves lines and parallelism, but not necessarily Euclidean distances and angles. More general ...
of the plane, equivalent to a "(transformation) matrix" in PostScript/PDF. * Pen: a convex polygon, representing the shape of a "pen" used for drawing. * Picture: a
raster image upright=1, The Smiley, smiley face in the top left corner is a raster image. When enlarged, individual pixels appear as squares. Enlarging further, each pixel can be analyzed, with their colors constructed through combination of the values for ...
with a signed integer value for each pixel. * Boolean * String (of 8-bit characters) Metapost adds color (a triple of numerics) as a ninth type and has a completely different (non-raster) model for pictures; the latter is the main point of divergence between the two programs. Metafont vardef macros also live in the same namespace as variables and may in some ways be regarded as a ninth type of variable, although macros do not exist as first-class values in Metafont. Unusually, the names of variables are not simple tokens, but sequences of symbolic tokens and numeric indices; the variable name x2r is thus not one
alphanumeric Alphanumericals or alphanumeric characters are any collection of number characters and letters in a certain language. Sometimes such characters may be mistaken one for the other. Merriam-Webster suggests that the term "alphanumeric" may often ...
token, but a sequence of the three tokens x (symbolic), 2 (numeric), and r (symbolic). Record and
array An array is a systematic arrangement of similar objects, usually in rows and columns. Things called an array include: {{TOC right Music * In twelve-tone and serial composition, the presentation of simultaneous twelve-tone sets such that the ...
types may be simulated through collections of variables that share a common name prefix, an idiom supported by the type declaration system giving all variables whose names which differ only in numeric indices the same type (as expected for arrays) while keeping variables whole name differ in some symbolic token separate (as expected for records). A very distinctive feature of Metafont is the use of
equation In mathematics, an equation is a mathematical formula that expresses the equality of two expressions, by connecting them with the equals sign . The word ''equation'' and its cognates in other languages may have subtly different meanings; for ...
s to define variables. A numeric variable (or component of a pair or transformation variable) may be in the three states ''known'' (set), ''unknown independent'' (not set), and ''unknown dependent'' (not set, but given by a linear expression of one or several independents). When Metafont executes an equation statement, it turns one of the independents involved into a dependent and eliminates it from the expressions for all other dependents; when no independents remain in the expression for a dependent variable, that variable becomes known. Solving ''linear'' equation systems thus is a built-in feature of the Metafont language, and the recommended method of assigning most variables (especially those whose values have geometric significance) is to state equations determining their values. Equation systems frequently mix numeric (scalar) equations with pair (vector) equations. An exception to the above is the class of ''internal quantity'' variables. These have names consisting of just one symbolic token, are always numeric, and are always known. They have a more direct internal representation than ordinary variables, making it convenient for primitive operations in Metafont (or extensions thereof) to use them implicitly.


Syntax

Metafont has numeric and string constant tokens with mainstream syntaxes; strings are delimited by " quotes, numeric constants can have decimals but not an exponent part. All other tokens are classified as ''symbolic'', and can be redefined arbitrarily; there is no restriction that tokens with certain meanings must have names consisting of certain characters. At runtime, there can additionally be ''capsule'' tokens, which are effectively constant value tokens of arbitrary type; in the source code those appear as symbolic tokens. Except where characters are involved in numeric or string constants, the extent of the token containing a particular character depends on to which class the character belongs; unlike
TeX Tex, TeX, TEX, may refer to: People and fictional characters * Tex (nickname), a list of people and fictional characters with the nickname * Tex Earnhardt (1930–2020), U.S. businessman * Joe Tex (1933–1982), stage name of American soul singer ...
, Metafont has fixed character classes. The characters ,, ;, (, and ) are "loners" and only form single character tokens. For the character classes <=>:, , ‘’ (single quotes), +-, /*\, !?, #&@$, ^~, /code>, /code>, , and ., as well as the class of underscore together with upper and lower case A–Z, the token consists of the longest consecutive sequence of characters from the same class. Whitespace characters don't contribute tokens. % starts a comment lasting until end of line. A notable application of these rules is that # is frequently appearing as part of variable names in Metafont code, e.g. em# and pt#. Delimiters (such as parentheses) do not have built-in meanings, instead there is a command that turns two symbolic tokens into a pair of matching delimiters, but normally Metafont programs use only the ordinary parentheses. Besides to override priorities in expressions, delimiters are also required around certain kinds of macro arguments.


Graphics

Curves in Metafont are defined as
cubic spline In numerical analysis, a cubic Hermite spline or cubic Hermite interpolator is a spline (mathematics), spline where each piece is a third-degree polynomial specified in Hermite interpolation, Hermite form, that is, by its values and first derivat ...
s, rather than quadratic, for greater versatility at the cost of more complex arithmetic. Unlike more common outline font formats (such as
TrueType TrueType is an Computer font#Outline fonts, outline font standardization, standard developed by Apple Inc., Apple in the late 1980s as a competitor to Adobe Inc., Adobe's PostScript fonts#Type 1, Type 1 fonts used in PostScript. It has become the ...
or PostScript Type 1), a Metafont font is primarily made up of strokes with finite-width "pens", along with filled regions. Thus, rather than describing the outline of the glyph directly, a Metafont file describes the pen paths. Some simpler Metafont fonts, such as the calligraphic mathematics fonts in the
Computer Modern Computer Modern is the original family of typefaces used by the typesetting program TeX. It was created by Donald Knuth with his Metafont program, and was most recently updated in 1992. Computer Modern and its variants remain very widely used in ...
family, use a single pen stroke with a relatively large pen to define each visual "stroke" of the glyphs. More complex fonts such as the
Roman Roman or Romans most often refers to: *Rome, the capital city of Italy *Ancient Rome, Roman civilization from 8th century BC to 5th century AD *Roman people, the people of Roman civilization *Epistle to the Romans, shortened to Romans, a letter w ...
text fonts in the Computer Modern family use a small pen to trace around the outline of the visual "strokes", which are then filled; the result is much like an outline font, but with slightly softened corners defined by the pen shape. Since the font shapes are defined by equations rather than directly coded numbers, it is possible to treat parameters such as aspect ratio, font slant, stroke width,
serif In typography, a serif () is a small line or stroke regularly attached to the end of a larger stroke in a letter or symbol within a particular font or family of fonts. A typeface or "font family" making use of serifs is called a serif typeface ( ...
size, and so forth as input parameters in each glyph definition (which then define not a single font, but a meta-font). Thus, by changing the value of one of these parameters at one location in the Metafont file, one can produce a consistent change throughout the entire font. Computer Modern Roman illustrates many uses of this feature; a typical TeX installation includes a number of versions of the font in pitches from 5 to 17 cpi, with the stroke widths the same in all sizes (rather than increasing as the font is scaled up). In addition, the Computer Modern typewriter and
sans-serif In typography and lettering, a sans-serif, sans serif (), gothic, or simply sans letterform is one that does not have extending features called "serifs" at the end of strokes. Sans-serif typefaces tend to have less stroke width variation than ...
fonts are defined using essentially the same Metafont file as the Roman font, but with different global parameters.


Use

While well-known type designers, such as
Hermann Zapf Hermann Zapf (; 8 November 1918 – 4 June 2015) was a German type designer and calligrapher who lived in Darmstadt, Germany. He was married to the calligrapher and typeface designer Gudrun Zapf-von Hesse. Typefaces he designed include ...
, have collaborated with Knuth to create new fonts using Metafont, the system has not been widely adopted by professional type designers. Knuth attributes this to the fact that "asking an artist to become enough of a mathematician to understand how to write a font with 60 parameters is too much."
Jonathan Hoefler Jonathan Hoefler (; born 1970) is an American type designer. Hoefler founded the Hoefler Type Foundry in 1989, a type foundry in New York. Early life Jonathan Hoefler was born on August 22, 1970, in New York City to Doreen Benjamin and Char ...
commented that the Metafont system ultimately became "a technology behind zero of your favourite fonts...Knuth's idea that letters start with skeletal forms is flawed." The Metafont system allows fonts to be processed in unusual ways; in 1982, Knuth showed how it could be used to morph fonts, with a
serif In typography, a serif () is a small line or stroke regularly attached to the end of a larger stroke in a letter or symbol within a particular font or family of fonts. A typeface or "font family" making use of serifs is called a serif typeface ( ...
font slowly transitioning into a
sans-serif In typography and lettering, a sans-serif, sans serif (), gothic, or simply sans letterform is one that does not have extending features called "serifs" at the end of strokes. Sans-serif typefaces tend to have less stroke width variation than ...
design over the course of a text.


History

Donald Knuth Donald Ervin Knuth ( ; born January 10, 1938) is an American computer scientist and mathematician. He is a professor emeritus at Stanford University. He is the 1974 recipient of the ACM Turing Award, informally considered the Nobel Prize of comp ...
started work on font creation software in 1977, and produced the first version of Metafont in 1979. Due to shortcomings in the original Metafont language, Knuth developed an entirely new Metafont system in 1984, and it is this revised system that is used today; Metafont has a versioning system similar to that of
TeX Tex, TeX, TEX, may refer to: People and fictional characters * Tex (nickname), a list of people and fictional characters with the nickname * Tex Earnhardt (1930–2020), U.S. businessman * Joe Tex (1933–1982), stage name of American soul singer ...
, where the number
asymptotically In analytic geometry, an asymptote () of a curve is a line such that the distance between the curve and the line approaches zero as one or both of the ''x'' or ''y'' coordinates tends to infinity. In projective geometry and related contexts, ...
approaches '' e'' with each revision.


Example

The following example creates a closed beanlike shape for the character "B" of a font: %file name: beta.mf %mode_setup; % Define a beanlike shape for the character B beginchar("B",11pt#,11pt#,0); % Setup coordinates as an equation system y1=y2=y3=0; y4=y5=y6=h; x1=x4=0; x2=x5=w; x3=x6=2*w; % Define pen pickup pencircle xscaled 0.2w yscaled 0.04w rotated 45; % Draw the character curve % z1 is the same as (x1, y1) draw z1..z3..z6..z5..z4..cycle; endchar; end This yields the following glyph: The above example will be processed with a command line such as: mf '\mode=ljfour; mode_setup; input beta.mf'; gftopk beta.600gf beta.600pk Then it can be used in a LaTeX file such as the following (all files should dwell in the same directory, or the TeX system should be informed about them using appropriate methods): \documentclass \newfont \newcommand \begin Let's try having a strange \otherbeta\ here. \end The resulting PDF file should look like this:


Producing PostScript Type 1 fonts

There are several tools for converting Metafont programs to PostScript Type 1 fonts. Most make use of MetaPost's ability to convert a subset of Metafont's language into
EPS An extended play (EP) is a Sound recording and reproduction, musical recording that contains more tracks than a Single (music), single but fewer than an album. Contemporary EPs generally contain up to eight tracks and have a playing time of 1 ...
outlines, which can subsequently be converted to PostScript Type 1 fonts. Generating vector outlines of Metafont pen strokes is nontrivial, as the Metafont model of a glyph is a raster image and the exact outlines of most strokes are not
Bézier curve A Bézier curve ( , ) is a parametric equation, parametric curve used in computer graphics and related fields. A set of discrete "control points" defines a smooth, continuous curve by means of a formula. Usually the curve is intended to approxima ...
s. * The Polish JNS team developed METATYPE1 (based on MetaPost) for creating PostScript Type 1 fonts. Its big disadvantage is that no pens may be used which highly reduces the power of Metafont language. Initially, tool has been used by the Polish GUST typeface foundry to produce a modernized and extended variant of
Computer Modern Computer Modern is the original family of typefaces used by the typesetting program TeX. It was created by Donald Knuth with his Metafont program, and was most recently updated in 1992. Computer Modern and its variants remain very widely used in ...
, called Latin Modern. * mf2pt1, which is also based on Metapost, was developed by Scott Pakin with some contributions from Werner Lemberg. It also has several limitations detailed in its manual, the most significant one being the restriction that each glyph must be drawn entirely from closed paths. In order to overcome the limitations of mf2pt1, the EPS output by Metapost can be post-processed with
FontForge FontForge is a FOSS font editor which supports many common font formats. Developed primarily by George Williams until 2012, FontForge is free software and is distributed under a mix of the GNU General Public License Version 3 and the 3-clause ...
, which is capable of interpreting complex PostScript paths generated by Metapost from Metafont's elliptic pens, and also capable of removing contour overlaps. Since FontForge supports scripting, this post-processing step can also be automated. This approach was used to produce Type 1 outlines for the MnSymbol mathematical font developed by Achim Blumensath; MnSymbol was designed as a companion to Minion Pro. * MetaFog is a proprietary converter that can analytically convert pen strokes, but it requires manual post processing to eliminate degenerate cases, and it is not publicly available. It can process only Metapost output. The common approach to generate Type 1 fonts with pen strokes remains to generate a high-resolution bitmap and then use an autotracer, implemented by packages such as mftrace and TeXtraceTeXtrace
– a collection of scripts for UNIX that convert any TeX font into a Type1 .pfb outline font immediately suitable for use with dvips, pdftex, acroread (and any many other programs). Created by Peter Szabo.


See also

* Ikarus (typography software) * MetaPost, a vector drawing language derived from Metafont


Notes


References


Sources

*
Donald Knuth Donald Ervin Knuth ( ; born January 10, 1938) is an American computer scientist and mathematician. He is a professor emeritus at Stanford University. He is the 1974 recipient of the ACM Turing Award, informally considered the Nobel Prize of comp ...
: ''Metafont: The Program'', Addison-Wesley 1986. * Donald Knuth: ''The Metafontbook'', Addison-Wesley 1986. . Th
source code of the book in TeX
(and
needed macro
is available online on
CTAN C mathematical operations are a group of functions in the C standard library, standard library of the C programming language implementing basic mathematical functions. Different C standards provide different, albeit backwards-compatible, sets of ...
. * Donald Knuth: Th
Metafont source code
is written in the
WEB Web most often refers to: * Spider web, a silken structure created by the animal * World Wide Web or the Web, an Internet-based hypertext system Web, WEB, or the Web may also refer to: Computing * WEB, a literate programming system created by ...
programming language, and includes very extensive documentation about the algorithms used in Metafont. * Yannis Haralambous, "Fonts and Encodings", O'Reilly 2007, , Appendix F: "METAFONT and its derivatives" * K. Píška, "Creating Type 1 fonts from Metafont sources: comparison of tools, techniques and results", in ''TeX, XML, and Digital Typography'' (Springer-Verlag, Berlin, 2004), Lect. Notes Comput. Sci., Vol. 3130, pp. 240–56
preprint
* Hofstadter, Douglas R.
"Metafont, Metamathematics, and Metaphysics: Comments on Donald Knuth's Article 'The Concept of a Meta-Font'"
''Visible Language'', Vol. XVI no. 4, pp. 309–338 (republished in Hofstadter's book ''Metamagical Themas'', NY: Basic Books, 1985)


External links


The Metafont Tutorial
(PDF). Christophe Grandsire, 2004. {{Free and open-source typography Free TeX software Font formats Donald Knuth Cross-platform software Declarative programming languages Computer-related introductions in 1977