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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
|
\documentclass[draft]{article}
\usepackage{mflogo}
\addtolength\textwidth{.5in}
\addtolength\oddsidemargin{-.25in}
\usepackage{verbatim}
\newcommand\prog[1]{\texttt{#1}}
\newcommand\file[1]{\texttt{#1}}
\newcommand\env[1]{\texttt{#1}}
\renewcommand\"{\verb"}
\newcommand\meta[1]{$\langle$\textit{#1}$\rangle$}
\title{How to use \file{fntproof.tex}\\ and \file{testfont.tex}}
\author{Dan Luecking\thanks{\copyright 2010
by Daniel H. Luecking. This software is public domain. If you make any
changes to this document, please remove or modify this copyright notice
before distributing your version, preferably with a different name.
This documents version 1.0 of \file{fntproof}}}
\begin{document}
\maketitle
\begin{abstract}
The macro file \file{fntproof.tex} is a noninteractive version of
D.~E.~Knuth's \file{testfont.tex}. Instead of prompting for font names
and commands, the user supplies them on the command line, or in a file.
\end{abstract}
\section{Introduction}
I used to often run \prog{tex} on \file{testfont.tex}, which prompts for
a font name and prompts for a command. Often, after ending the session,
I would want to run almost the same command on almost the same font and
would have to type almost everything over again, or else deal with my
\prog{tex} program's rather primitive line recall/editing mechanism.
Since I run \prog{tex} in a command shell which has better command line
recall and rather better line editing capabilities than my \prog{tex}
has, I wrote \file{fntproof.tex} to give me the same capabilities as
\file{testfont.tex}, but allow me to specify the font and the commands
on the command line.
This is the documentation of \file{fntproof}. Since \file{testfont.tex}
has no documentation outside of ``The \MF book'', I am also also
documenting it. The reader is assumed to have some minimal knowledge of
plain \TeX{}, especially the ``\"\font"'' command.
Apart from the fact that \file{fntproof} can read the fontname from the
command line, there are few differences between \file{testfont.tex} and
\file{fntproof.tex}:
\begin{itemize}
\item In \file{testfont}, the \"\init" command prompts for a fontname,
while \file{fntproof} arranges to read one typed on the command
line or in a file.
\item In \file{testfont}, \"\mixture", \"\alternation" and \"\series"
issue three prompts, while in \file{fntproof} they read three
arguments.
\item In \file{testfont}, \"\alphabet" and \"\ALPHABET" issue a
prompt, while in \file{fntproof} they read an argument.
\item In a \LaTeX{} document, \file{testfont} redefines the \"\table"
command, destroying the \env{table} environment, while
\file{fntproof} tries to detect \LaTeX{} and leave \"\table"
alone. The command \"\fonttable" then takes the place of
\file{testfont}'s \"\table" command.
\item In \file{testfont}, the primitive \TeX{} command \"\fontname" is
also overwritten, while \file{fntproof} uses a different
internal name for the same purpose. This require a couple of
other minor differences to be discussed later.
\item There are a few useful commands added.
\end{itemize}
Like \file{testfont}, \file{fntproof} can print a table of the font's
characters and a bit of sample text and run other tests. It has
noninteractive versions of all the interactive commands allowed by
\file{testfont}.
\section{Example command lines}\label{examples}
\begin{itemize}
\item Produce sample text of cmr10:
\begin{verbatim}
tex fntproof cmr10 \text\bye
\end{verbatim}
\item Produce a table of cmr10 and sample text of cmti10 (pdf output).
Note the use of ``\"\init"'' to change to the new font:
\begin{verbatim}
pdftex fntproof cmr10 \table \init cmti10 \text\bye
\end{verbatim}
\item Produce a table and a test of digits for cmr10, only a table for
cmti10 at 12pt:
\begin{verbatim}
tex fntproof cmr10 \table\digits\init{cmti10 at 12pt}\table\bye
\end{verbatim}
\item Obtain a list of available commands and their meanings
\begin{verbatim}
pdftex fntproof \help \end
\end{verbatim}
\end{itemize}
Your command line interpreter may require you to quote or escape
backslashes or other of its special characters in these examples. I am
able to run all of these as-is in a command window under Windows XP
using TeX Live 2008--2010. Of course the output appears in
\file{fntproof.dvi} or \file{fntproof.pdf}.
\section{The commands}
A font can be specified by its TFM filename followed by a space (or a
line end). Font filenames are allowed to contain most of \TeX{}'s
special characters when \file{fntproof} is used. However, they cannot
contain spaces or other whitespace characters, and they cannot begin
with a left brace~(\"{"). There are even more limitations on the TFM
filename typed at \file{textfont}'s prompt, as most special
\TeX{} characters cause some problem or other.
A command applies to the font most recently specified. The following
commands are available. They are the same as those provided by the
interactive version, \file{testfont.tex}, except they do not prompt for
input, but require any arguments to follow the command.
\begin{itemize}
\item \"\sample" \"\table" \"\text"\\
\"\sample" produces a table and some sample text; \"\table" produces
only the table, \"\text" only the text.
\item \"\mixture"\\
This takes three characters as arguments. The first character
(the ``background'') is mixed among all the characters from the
second argument to the third. For example, ``\"\mixture Xaz"'' produces
\begin{verbatim}
XaXXaaXXXaaaXa
XbXXbbXXXbbbXb
...
\end{verbatim}
and so on, until z.
\item \"\alternation"\\
This is like \"\mixture", except ``\"\alternation Xaz"''
produces lines like
\begin{verbatim}
XaXaXaXaXaXaXaXaX
XbXbXbXbXbXbXbXbX
...
\end{verbatim}
and so on.
\item \"\series"\\
Like the previous two it takes 3 arguments, but produces a
single line containing all the characters in the sequence. Thus,
``\"\series Xaz"'' produces
\begin{verbatim}
XaXbXcXdXeXfXgXhXiXjXkXlXmXnXoXpXqXrXsXtXuXvXwXxXyXzX
\end{verbatim}
\item \"\alphabet" \"\ALPHABET"\\
These take one character as argument. It is the ``background''
and is mixed among all the lowercase, respectively uppercase
letters. So ``\"\ALPHABET x"'' is almost like
``\"\series xAZ"'', but also includes the characters \AE, \OE,
and \O, while ``\"\alphabet X"'' is like ``\"\series Xaz"'', but
also includes \ae, \oe, \o, and \ss.
\item \"\lowers" \"\uppers" \"\digits" \"\names"
\"\punct"\\
These perform comprehensive tests of lowercase, uppercase,
digits, names and punctuation. For example, \"\lowers" is
like
\begin{verbatim}
\alphabet a \alphabet b ...
\end{verbatim}
and \"\digits" is like
\begin{verbatim}
\series 009 \series 109 \series 209 ...
\end{verbatim}
\item \"\bigtest" \"\math"\\
\"\bigtest" includes (more or less) all the previous
commands. \"\math" produces a large set of tests of math
(the font should be a math alphabetic font like cmmi10).
\item \"\help" \"\init" \"\noinit"\\
\"\help" produces a summary of available commands on the screen.
\"\init" prepares for the next font. In \file{testfont}, it
issues a prompt for a fontname and need not be invoke for the
first font, which is prompted for immediately after input.
In \file{fntproof}, it reads the following fontname, and it need
not be used before the first font (see the examples in
section~\ref{examples}), unless the filename begins with a
\TeX{} special character.
\"\noinit" turns off this automatic initialization. Use it when
you want some text before the first font test, or if you want
the current font to be used. Its syntax differs between
\file{fntproof} and \file{testfont}, see below.
\end{itemize}
Note: In \file{fntproof}, \"\init" examines the first following
nonspace character. If that is a left brace (i.e., ``\"{"'')
\"\init" assumes the font name is contained between that left brace
and the first matching right brace~(``\"}"'').
Multi-part font specifications (such as ``\"cmr10 at 12pt"'') must be
enclosed in braces, and this \emph{must} be preceded by \"\init".
For the commands that take character arguments, the actual characters
might not be printed, especially in symbol fonts. Instead, the glyphs in
the corresponding positions will appear. Most printable ASCII characters
can be used in the argument, but not ``\"{"'', ``\"}"'', ``\"\"'' or space. In
place of a literal character one can supply a numerical position in the
font. This command:
\begin{verbatim}
\mixture X{#97}{#122}
\end{verbatim}
has the same effect as this one:
\begin{verbatim}
\mixture Xaz
\end{verbatim}
The numeric part of the argument (everything after after the \"#") can
be (probably) any valid \TeX{} number. Your command line interpreter may
require you to escape or ``quote'' the double quote marks which are used
in \TeX{} for hexadecimal, the single quote marks used for octal or the
back quote used in character code notation.
A numerical argument must be enclosed in braces: a ``\"#"'' not in braces
(or alone in braces) will be taken literally. For example,
\begin{verbatim}
\mixture #120az
\end{verbatim}
would read ``\"#"'', ``\"1"'' and ``\"2"'' as the arguments and the rest,
``\"0az"'', as plain \TeX{} code (i.e., characters to be printed).
It should be noted that the implementation of \"\series" does not
allow any ligatures or kerns between adjacent characters. This is also
true of the commands based on \"\series": \"\alphabet", \"\ALPHABET",
\"\lowers", \"\uppers", and \"\digits". It is true for both
\file{testfont} and \file{fntproof}, which use the same internal
implementation. If one wants to test these properties of a font, one
must type in ones own text (see the following section).
Another limitation: in the ``\"\alphabet"'' and ``\"ALPHABET"''
commands, if the font has an encoding other than OT1, then the
characters \ae, \oe, \o, \ss, \AE, \OE, and \O{} may not appear as
advertised, since the implementation accesses them by position
number. For PostScript fonts, a black box may appear where these
characters should be.
In addition to the commands listed, which are common to \file{fntproof}
and \file{testfont}, \file{fntproof} supplies the following extra
commands, not available in \file{testfont}.
\begin{itemize}
\item \"\initcurrentfont"\\
Use this to perform the functions of \"\init" on the current font.
This would normally be preceded by commands selecting the desired
font. See section~\ref{latex} for a \LaTeX{} example.
\item \"\noinit"\\
In \file{testfont}, the only way to use this is to say
\"\let\noinit=!" \emph{before} inputting \file{testfont.tex}. This
cancels the immediate prompt for a font filename. But in
\file{fntproof}, ``\"\noinit"'' can also be used immediately
\emph{after} inputting \file{fntproof}. Either use cancels
\file{fntproof}'s assumption that the first following word is the
name of the font to be selected. This allows ordinary text to be
inserted before selecting a font. After this, the command \"\init"
allows a font to be specified.
\item \"\headersfalse" \"\headerstrue" \"\theheader"\\
A side effect of the \"\init" command (including one implicitly
invoked by a font name following the input of \file{fntproof}) is
the printing of a single header line similar to the following:
\begin{verbatim}
Test of cmti10 on July 31 at 1244
\end{verbatim}
Use ``\"\headersfalse"'' to force the omission of all such headers
for any subsequent font. Use ``\"\headerstrue"'' to resume the
default behavior. In any circumstance, the header text can be
printed using ``\"\theheader"''.
\item \"\thisfont" \"\getthisfont"\\
The macro ``\"\thisfont"'' produces the name of the font most
recently specified by an explicit or implicit \"\init" or by
\"\initcurrentfont". If no such initialization was done,
``\"\getthisfont"'' will cause \"\thisfont" to be defined to the
text produced by the command sequence \"\fontname\font" (i.e., the
tfm filename of the current font---plus any ``\texttt{scaled}'' or
``\texttt{at}'' clause).
\item \"\fonttable"\\
As already mentioned, this is the alternative to \"\table" that must
be used in \LaTeX{}. It can also be used in plain \TeX{}.
\end{itemize}
\section{Other \TeX{} commands}
\TeX{} commands besides the above can be inserted at any point except
between \"\init" and the next fontname. No guarantee is given that they
they will have the expected effect. Text will be printed in the whatever
font is current. No text should be typed between ``\file{fntproof}'' and
the first fontname or else it will be mistaken for a font (but see
\"\noinit" above and examples of its use below).
If the command line does not end in \"\end" or \"\bye", \TeX{} will wait
for more input in its usual way, with a ``\texttt{*}'' prompt. If additional
commands from the above list are entered (except \"\init"), they will be
applied to the previously named font. Moreover, a new font name can be
entered (after \"\init"). Of course, any plain \TeX{} commands can be
entered. The session can be ended by entering \"\end" or \"\bye".
\section{Use as a macro file}
Like \file{testfont.tex}, \file{fntproof.tex} allows the commands to be
used in a file rather than interactively, or on the command line. One
can do this by writing ``\"\let\noinit=!"'' before inputting
\file{testfont} or \file{fntproof}. This is somewhat more useful for
\file{fntproof} than for \file{testfont} as \emph{all} the \file{fntproof}
commands are noninteractive.
Unlike \file{testfont}, \file{fntproof} also allows you to simply type
``\"\noinit"'' \emph{immediately after} inputting it, for the same
effect. For example, with \file{testfont} one would initialize the font
oneself and then issue commands:
\begin{verbatim}
\let\noinit=! \input testfont
Ordinary text in default font.
\def\fontname{cmti10}\startfont \table \text \bye
\end{verbatim}
Note that ``initializing a font'' after \file{testfont} is loaded
amounts to defining \"\fontname" and then using the \"\startfont"
command. The above example will produce a table and sample text of
cmti10. Note that \"\startfont" alone will not work. If both steps are
omitted, the \"\table" command will build a table of the current font,
but certain preparatory steps will not be taken and some commands (but
not \"\table") will produce errors.
The corresponding \file{fntproof} method would be the following. Note
that this could also be typed on the command line (all on one line)
after the tex command (in that case the ``\"\input"'' would be omitted):
\begin{verbatim}
\input fntproof \noinit
Ordinary text in default font.
\init cmti10 \table \text \bye
\end{verbatim}
Note that \file{testfont.tex} causes the \TeX{} primitive command
\"\fontname" to be redefined. The macros in \file{fntproof} do not do
this, but instead use \"\thisfont" for the same internal purposes as
\file{testfont} uses \"\fontname".
If one wanted to initialize a font immediately (with no intervening
text in some other font), even this \"\noinit" hack is unnecessary:
\begin{verbatim}
\input fntproof cmr10 \table \text \bye
\end{verbatim}
This would perform the auto-\"\init" on cmr10. In this case, any
\"\headersfalse" command would have to be put just before the font name.
Otherwise, it need only come before the next \"\init" command.
In \file{testfont}, a command like \"\mixture" would produce three
prompts to get the character or numeric arguments. For the corresponding
\file{fntproof} commands, these arguments must be supplied and no
interactive prompt occurs. One can get around these interactive prompts
in \file{testfont}, but it is rather inconvenient:
\begin{itemize}
\item with \file{testfont}:
\begin{verbatim}
\let\noinit! \input testfont
Some text in default font. Here is a mixture in cmti:
\chardef\background`X
\chardef\starting`a
\chardef\ending`z
\def\fontname{cmti10}\startfont
\domix\mixpattern% \altpattern for the effect of \alternation
\bye
\end{verbatim}
\item with \file{fntproof}:
\begin{verbatim}
\input fntproof \noinit
Some text in default font. Here is a mixture in cmti:
\init cmti10 \mixture Xaz \bye
\end{verbatim}
\end{itemize}
For completeness, here are the other ways to avoid the interactive
prompt when using \file{testfont} (right), compared to each of the
\file{fntproof} commands (left).
\begin{itemize}
\item \"\series Xaz" $\Rightarrow$ \"\chardef\background`X\!\doseries{`a}{`z}\par"
\item \"\alphabet X" $\Rightarrow$ \"\chardef\background`X\complower"
\item \"\ALPHABET X" $\Rightarrow$ \"\chardef\background`X\compupper"
\end{itemize}
In the \"\doseries" command, the arguments can be numbers:
\"\doseries{97}{122}" is the same as \"\doseries{`a}{`z}". You can use
numbers in the \"\chardef" commands. For example
``\"\chardef\background88 "'' is the same as ``\"\chardef\background `X"''.
Note: a space (or end-of-line) after explicit digits is almost
mandatory to terminate the number before any following macros are
expanded.
Instead of ``\"\init" \meta{tfmname}'', one can use normal font
selection commands, followed by ``\"\initcurrentfont"'', and then the
testing commands (e.g., \"\fonttable", \"\text"). For example,
\begin{verbatim}
\input fntproof
\font\x=cmdunh10 at 12pt \x
\initcurrentfont \table \text \bye
\end{verbatim}
See the next section for an example in \LaTeX{}. To do this with
\file{testfont} would require the following incantations:
\begin{verbatim}
\let\originalfontname\fontname
\let \noinit=!
\input testfont
\font\x=cmdunh10 at 12pt \x
\edef\fontname{\originalfontname\font}%
\startfont \table \text \bye
\end{verbatim}
Note that \"\init", \"\initcurrentfont" and some of the testing commands
change some \TeX{} parameters. This could affect the typesetting of the
rest of the document, so it might be wise to enclose a session of font
testing in a group, if your document contains other material.
Note also that the mere loading of \file{fntproof} or \file{testfont}
invokes the following settings:
\begin{verbatim}
\tracinglostchars=0
\tolerance=1000
\raggedbottom
\parindent=0pt
\hyphenpenalty=200
\doublehyphendemerits=30000
\end{verbatim}
These are suitable for the running of tests on fonts. If the rest of
your document needs different parameters, it is your responsibility to
reset these afterward. There are also numerous internal macros used by
both \file{testfont} and \file{fntproof} that are not protected by
having \texttt{@} in there name. This is another reason to input the
macro file and use the testing macros inside a group.
Finally, \file{testfont} turns off page numbering (in plain \TeX) when loaded.
\section{Use with \LaTeX{}}\label{latex}
In \LaTeX{}, printable text has to come after \"\begin{document}" so a
minimal command line could be (typed without pressing [Enter] or [Return]):
\begin{verbatim}
latex fntproof \noinit \documentclass{article}\begin{document}
\init cmr10 \fonttable \end{document}
\end{verbatim}
Thus with \LaTeX{}, \file{fntproof} might better be used in a file. Note
also that \"\fonttable" is used instead of \"\table" to avoid destroying
\LaTeX{}'s table environment. For example,
\begin{verbatim}
\documentclass[12pt]{article}
\begin{document}
\input fntproof
\fontencoding{T1}\fontfamily{bch}\selectfont
\initcurrentfont
\fonttable
\end{document}
\end{verbatim}
This would produce a table of the Bitstream Charter font..
The above font selection commands ultimately load the TFM file
\texttt{bchr8t} magnified to \texttt{12pt}. Thus, the header
text actually looks something like this:
\begin{verbatim}
Test of bchr8t at 12.0pt on October 7, 2010 at 1649
\end{verbatim}
Moreover, ``\"\thisfont"'' will acquire the definition ``\texttt{bchr8t
at 12.0pt}''.
I have not tested \file{testfont.tex} much in \LaTeX{}. After the
\"\let\noinit=!" hack, inputting \file{testfont} causes an
error because \"\nopagenumbers" is undefined. Then the command
\"\table", \"\text", or \"\sample" cause an error because \"\sevenrm" is
undefined, but otherwise proceed correctly.
\section{History}
2009/05/05 -- first version\\
2009/07/31 -- add \"\noinit", \"\ifheaders", \"\theheader"\\
2009/11/12 -- revised documentation (comments)\\
2010/01/03 -- further documentation revisions\\
2010/10/11 -- documentation moved to separate file, added
\"\initcurrentfont" and \"\getthisfont".
\bigskip
\section{Appendix}
The output of \file{fntproof}'s \"\help" command:
\begin{verbatim}
=== Main commands ==============
\init switches to another font;
\end or \bye finishes the run;
\table prints the font layout in tabular format;
\fonttable must be used instead of \table in LaTeX;
\text prints a sample text, assuming TeX text font conventions;
\sample combines \table and \text;
\mixture mixes a background character with a series of others;
\alternation interleaves a background character with a series;
\alphabet prints all lowercase letters within a given background
\ALPHABET prints all uppercase letters within a given background
\series prints a series of letters within a given background;
\lowers prints a comprehensive test of lowercase;
\uppers prints a comprehensive test of uppercase;
\digits prints a comprehensive test of numerals;
\math prints a comprehensive test of TeX math italic;
\names prints a text that mixes upper and lower case;
\punct prints a punctuation test;
\bigtest combines many of the above routines;
\help repeats this message;
and you can use ordinary TeX commands (e.g., to \input a file).
=== More commands ==============
\noinit turns off automatic initialization of the first word as a font;
\headersfalse \headerstrue turn off/resume printing of header text;
\theheader print the header text;
\thisfont print the name of font specified by \init;
\getthisfont define \thisfont to be the current font;
==================================
\end{verbatim}
\bigskip
\filbreak
\noindent The output of \file{testfont}'s \"\help" command:
\begin{verbatim}
\init switches to another font;
\end or \bye finishes the run;
\table prints the font layout in tabular format;
\text prints a sample text, assuming TeX text font conventions;
\sample combines \table and \text;
\mixture mixes a background character with a series of others;
\alternation interleaves a background character with a series;
\alphabet prints all lowercase letters within a given backgroun
\ALPHABET prints all uppercase letters within a given backgroun
\series prints a series of letters within a given background;
\lowers prints a comprehensive test of lowercase;
\uppers prints a comprehensive test of uppercase;
\digits prints a comprehensive test of numerals;
\math prints a comprehensive test of TeX math italic;
\names prints a text that mixes upper and lower case;
\punct prints a punctuation test;
\bigtest combines many of the above routines;
\help repeats this message;
and you can use ordinary TeX commands (e.g., to \input a file).
\end{verbatim}
\bigskip
\filbreak
\noindent Knuth's original \file{testfont.tex} comment:\\
\texttt{\% A testbed for font evaluation (see The METAFONTbook, Appendix H)}
\end{document}
|