1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
\centerline{\bf Book Review: The \MFb book}
\medskip
\noindent{\sl
The \MF book, Donald E. Knuth, 1986, 361pp.
Published by Addison Wesley, price \quid19.95 (paper), \quid29.95 (hard).}
\medskip\noindent
\MF\ is a computer program written by Donald Knuth for the purpose
of designing digital graphic objects, especially fonts of type, in a device
independent way. {\sl The\/ \MF book\/} is Knuth's manual for the
software. This is a review of the book, not the program!
Readers of {\it The \TeX book\/} will feel immediately at home with {\sl The\/
\MF book}. Its style of presentation, design, layout and even the
number of chapters and appendices, are the same as its illustrious
predecessor. Once again, Knuth is attempting to provide in one book both a
tutorial and a reference manual for the software, through his careful and
elaborate system of `dangerous bend' paragraphs, and graded exercises and
examples. Whether this is a success depends to some degree on one's reading
habits: I find I simply cannot stop myself reading at the dangerous bend
signs, with the result that I failed to understand quite a lot of the book on
the first reading. Subsequent rereadings gradually cleared my mind. The
examples are all worth attempting, and teach one as much, if not more, than
mere passive reading.
Broadly speaking, Chapters 1 to 6 (`The name of the game', `Coordinates',
`Curves', `Pens', `Running \MF', `How \MF\ reads what you
type') present a gentle introduction to the basic concepts underlying the way
\MF works, and a real life example of the design of the uppercase
letters I and O (an example file `dedicated to Io, the Greek goddess of input
and output'). Thereafter the waters begin to flow more deeply. The five-page
chapter on variables leads into two substantial chapters on the mathematical
underpinning of \MF\ (`Algebraic expressions' and `Equations'), and
a three page chapter on the difference between assignment and equation
operations as used in \MF\ (`a person who makes too many assignments
is still locked into the habits of old-style ``imperative'' programming
languages \dots\ ; \MF's equation mechanism liberates us
\dots\ because it lets the computer take over the job of solving
equations.'). Chapters 11 to 16 (`Magnification and resolution', `Boxes',
`Drawing, filling and erasing', `Paths', `Transformations', `Calligraphic
effects') are more closely concerned with graphics and \MF's tools
for creating and manipulating images. Chapter 24, `Discreteness and
discretion', which deals with the difficult problems of digitisation, really
belongs with this group of chapters. As an aside, there is an interesting
comment at the beginning of chapter 24, where Knuth says that typefaces
produced solely by graphics programs cannot be expected to be as good as those
`carefully crafted to look best on a particular output device'. He goes on to
say that a small amount of hand-tuning (i.e., pixel editing) will always be
necessary to optimise a font for a particular device, but that a good
\MF\ program should produce a character in which only half a dozen pixels
will need changing. This is very unexpected, for while I think it is true, it
apppears to run counter to the whole `meta' idea of universality and device
independence which is so central to Knuth's work.
In Chapters 17 to 21 (`Grouping', `Definitions (also called macros)',
`Conditions and loops', `More about macros', `Random numbers') Knuth turns to
the control structures of the \MF language itself. Chapters 22 and
23 (`Strings', and `Online displays') cover \MF's interaction with
the graphics terminal which it is addressing. The final three chapters
(`Summary of expressions', `Summary of the language', `Recovering from
errors') are self explanatory. As with {\it The \TeX book}, much of the meat
of this book is to be found in the appendices. Again, they are alphabetically
enumerated A--J, with each letter also forming the first letter of the
appendix's title (`Answers to all the excercises', `Basic operations',
`Character codes', `Dirty tricks', `Examples', `Font metric information',
`Generic font files', `Hardcopy proofs', `Index', `Joining the \TeX\
community'). One wonders whether Knuth felt obliged to write eight
substantial appendixes just to get to I for Index! I find it slightly
annoying that so much of what one needs to know in order to install and run
\MF is tucked away in these appendices. For example, the first
place in which Knuth explains how to invoke \MF\ to create a real
font at a particular magnification is on page 269, in Section 4 of Appendix B!
Essential information is not always in the obvious place. The upshot of this
is that while reading {\sl The\/ \MF book\/} one has constant
recourse to the index, which fortunately is excellent. But any particular
installation of \MF\ will need a {\it Local guide\/} (human or
printed) to explain such mundane, but definitely non-trivial matters as how to
run the program, and how to print proofs.
Who is {\sl The\/ \MF book\/} written for? The first buyers of the
book will be the members of the \TeX\ community (\TeX ies prepared to boldly
go \dots) who are interested in Knuth's work on typesetting and
programming for its own sake, and as an extension of the \TeX\ system. These
readers may also buy {\sl \MF: the program}, the |WEB| listing of the
program itself. Another class of readers are those who use \TeX\ with
Knuth's Computer Modern (CM) series of fonts, and who wish to use
\MF\ to generate extra sizes or styles of these fonts, or to create the
occasional graphic symbol or logo. These readers may also wish to buy the
{\sl Computer Modern Typefaces\/} ({\sl CMT\/}) volume, in which Knuth sets
out the \MF\ programs for the 500 or so characters of the CM fonts,
together with listings of their parameters and related files. These programs
accompany all distributions of \MF\ itself, so with the two books it
is relatively easy to generate various extra fonts for any output device
driver. A third class of reader is that small band of indefatigable optimists
who contemplate creating a complete new font. Knuth says in the preface of
{\sl The\/ \MF book\/} that `a person or a team of persons should
expect to spend a year or more on the project if the type is actually supposed
to look right.' For those setting out to create a new font, {\sl The\/
\MF book\/} and {\sl Computer Modern Typefaces\/} are a minimum
requirement for understanding how to use \MF. But what neither of
these volumes provide are any guidelines about the process of font design. If
you already have beautiful, accurate drawings of your character set on fine
graph paper, then {\sl The\/ \MF book\/} will teach you how to use
\MF\ to turn these drawings into digitised fonts for an output
device, or a range of output devices. But one must look elsewhere for all the
skills and knowledge needed to produce the initial typeface. In the process
of designing the CM fonts, Knuth undoubtedly developed a great deal of
sensitivity to letter forms, and although this knowledge is embodied in his
\MF\ programs for the letters, it is difficult in the extreme to
work backwards from the programs to the general principles underlying his
design decisions (although this is what Knuth proposes). It is a pity Knuth
has not shared more of this with his readers explicitly, in particular the
readers of the companion {\sl CMT\/} book. If you are setting out to design
a new typeface, then {\sl The\/ \MF book\/} definitely presupposes
a substantial degree of sophistication in typographical design.
Although {\sl The\/ \MF book\/} does give a complete description of
the use of the language, if you include the small print and the appendices, it
is rather short on complex real life examples. The examples given in Chapter
5 (`IO') and Appendix E (` \MF') are really very simplistic when
compared with most of the character programs in {\sl CMT}. From reading {\sl
The\/ \MF book\/} one might think that all that is necessary for the
creation of a character is to set up a box, choose a pen, and join up the
coordinates. This may be true for calligraphic letters such as N. N.
Billawala's CM Calligraphic Capitals ({\sl CMT}, pp.122--139), and it may turn
out to be an appropriate method for several oriental alphabets, but it is very
far from adequate for a real Latin typeface, as Knuth's CM programs show.
Once again, the gap between theory and practice is far from trivial. For
example, every one of the CM programs in {\sl CMT\/} has an |adjust_fit|
expression, usually as the fourth program statement. This macro provides a
ready means of adjusting the amount of white space either side of a
character's bounding box. One can thus create a character, and later jiggle
it to the left or right with |adjust_fit| until it looks properly spaced.
Clearly, |adjust_fit| is ubiquitous and important. But it does not form
part of \MF's plain base: it is part of the additional CM base that
Knuth created for the design of the CM typefaces, and so, although it appears
in every CM program, it is not described in the main text of {\sl The\/
\MF book}. It is squirreled away on pages 307--309, in Appendix E.
There are many other examples of how the \MF one grows acquainted
with from {\sl The\/ \MF book\/} is not quite the same animal as the
\MF\ one sees in the CM programs. Perhaps this is inevitable in a
language which is so very rich in its provision for macro programming.
These criticisms aside, {\sl The\/ \MF book\/} is very well written,
with a clean, light style that makes the book a pleasure to read, and easy to
learn from. Given that it is, at present, the only book about \MF,
it is fortunate indeed that it is so complete and well written. The {\sc jokes} are
not intrusive, and the anatomical metaphor which was so prominent in {\it The
\TeX book\/} (\TeX's mouth, stomach, etc.), and which has such disturbing
implications for the way Knuth's programs output our words or symbols, is
thankfully less prominent in {\sl The\/ \MF book}. There is still a
need for other books about \MF, which should have more to say about
installation, about the design aspects of character creation using the
program, about the practical aspects of proof production and use (with a major
chapter called `How to learn from your proofs'), and which should have many
more worked examples. We need books to teach computer scientists to design
typefaces, as well as books to teach type designers how to use \MF.
But {\sl The\/ \MF book\/} is always going to be the definitive text
for \MF. Any user of the program will get to know it very well: it
becomes almost a personal friend, and it stands the close exposure that such a
relationship demands remarkably well.
\rightline{\sl\DW, Wellcome Institute}
|