summaryrefslogtreecommitdiff
path: root/info/digests/texline/no6/mfbook.tex
blob: 4f9bfcc98c5192c34cb228e1e8337db8f40f2dcc (plain)
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}