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 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313
|
% begin file mfb3w4.tex %
\documentstyle[11pt]{article}
% gt: Narrower margins; no marginal notes.
\oddsidemargin=0in
\evensidemargin=0in
\marginparwidth=0in
\marginparsep=0in
% gt: text width that is okay for both Am. Quarto and for A4 paper.
\textwidth=6.25in
% gt: less gap at top of each page; more text height.
\addtolength{\textheight}{\topmargin}
\topmargin=0in
\addtolength{\textheight}{0.4in}
% gt: Variant of \METAFONT macro in "texnames.sty":
% gt: Uses empty discretionary. See _The TeXbook_, p 95.
\font\mf=logo10
\font\mfsl=logosl10
\hyphenchar\mf=-1
\hyphenchar\mfsl=-1
% A way to get a hyphen, courtesy of Karl Berry.
\newcommand{\MF}{{\mf META}\-{\mf FONT\/}}
\newcommand{\MFSL}{{\mfsl META}\-{\mfsl FONT\/}}
\newcommand{\MFbook}{{\sl The \MFSL{}book\/}}
\newcommand{\TeXbook}{{\sl The \TeX{}book\/}}
\newcommand{\BibTeX}{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em
T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
\newcommand{\ttbsl}{{\tt \char`\\\/}} % typewriter type backslash.
% gt: employing usual title font for "METAFONT" here.
\title{%
\vspace*{-1in}%
METAFONT for Beginners\\%
{\normalsize Third Draft, Revision `W4'}\\%
{\normalsize (14:12 GMT +10 Thursday 14 July 1994)}%
}
\date{}
\author{Geoffrey {\sc Tobin} ({\tt G.Tobin@ee.latrobe.edu.au})}
\begin{document}
\maketitle
\tableofcontents
\newpage
\section*{Scope}%
\addcontentsline{toc}{section}{Scope}
This is not a tutorial on \MF{}. It is an attempted description of
how some of the pitfalls in running the program may, hopefully, be
avoided.
\section*{Where you can obtain this file}\label{sec:CTAN}%
\addcontentsline{toc}{section}{Where you can obtain this file}
For those without ftp, an older version of \MF{} for Beginners can be
received by email from:
\begin{verbatim}
fileserv@shsu.edu
\end{verbatim}
by sending the one-line message:
\begin{verbatim}
sendme faq.mf
\end{verbatim}
\MF{} for Beginners can be obtained by ftp from the CTAN
(Comprehensive \TeX{} Archive Network) sites, in the
\begin{verbatim}
documentation
\end{verbatim}
subdirectory, as the file
\begin{verbatim}
metafont-for-beginners.tex
\end{verbatim}
The following record of a unix `script' command lists several
CTAN sites.
\begin{verbatim}
bash$ script
Script started on Mon Jun 27 19:17:54 1994
bash$ finger ctan_us@ftp.shsu.edu
[ftp.shsu.edu]
Login name: ctan_us In real life: US CTAN
Bldg:
Directory: /pub/mirror/ctan_us Shell: /usr/local/bin/tcsh
Last login Sun Jun 26 14:59 on ttyp6
Plan:
In order to reduce network load, it is recommended that you use the CTAN
host which is located in the closest network proximity to your site.
The participating hosts in the Comprehensive TeX Archive Network (CTAN) are:
ftp.dante.de (Germany) /tex-archive (/pub/tex /pub/archive)
ftp.shsu.edu (Texas, USA) /tex-archive (/pub/tex /pub/archive)
ftp.tex.ac.uk (England) /tex-archive (/pub/tex /pub/archive)
Known mirrors of the CTAN reside on (alphabetically):
ftp.center.osaka-u.ac.jp (Japan) /CTAN
ftp.cs.rmit.edu.au (Australia) /tex-archive
ftp.loria.fr (France) /pub/unix/tex/ctan
ftp.uni-bielefeld.de (Germany) /pub/tex
ftp.uni-stuttgart.de (Germany) /tex-archive (/pub/tex)
ftpserver.nus.sg (Singapore) /pub/zi/TeX
src.doc.ic.ac.uk (England) /packages/tex/uk-tex
sunsite.unc.edu (North Carolina, USA) /pub/packages/TeX
wuarchive.wustl.edu (Missouri, USA) /packages/TeX
Known partial mirrors of the CTAN reside on (alphabetically):
dongpo.math.ncu.edu.tw (Taiwan) /tex-archive
ftp.adfa.oz.au (Australia) /pub/tex/ctan
ftp.muni.cz (The Czech Republic) /pub/tex/CTAN
nic.switch.ch (Switzerland) /mirror/tex
ftp.cs.ruu.nl (The Netherlands) /pub/tex-archive
Please send updates to this list to <CTAN-Mgr@SHSU.edu>.
bash$ exit
exit
script done on Mon Jun 27 19:18:09 1994
\end{verbatim}
\section*{Reference}%
\addcontentsline{toc}{section}{Reference}
\MFbook{}, by Donald Ervin {\sc Knuth}, published by the
American Mathematical Society and Addison Wesley Publishing Company.
First edition, 1986, covers \MF{} 1.0.
Later editions cover \MF{} 2.0 and above.
This file is based, except where indicated otherwise,
on the 1986 edition.\footnote
{Opinion: I actually enjoy reading \MFbook{},
whereas \TeXbook{} confuses me no end.}
\section*{Acknowledgements}%
\addcontentsline{toc}{section}{Acknowledgements}
Additions and corrections were kindly contributed by:
\begin{quote}
Bill {\sc Alford} ({\tt bill@phys.anu.edu.au}),\\
Tim A.~H.~{\sc Bell} ({\tt bhat@mundil.cs.mu.oz.au}),\\
Karl {\sc Berry} ({\tt karl@cs.umb.edu}),\\
Gert W.~{\sc Bultman} ({\tt bultman@dgw.rws.nl}),\\
Anita {\sc Zanolini Hoover} ({\tt anita@ravel.udel.edu}),\\
Berthold K.~P.~{\sc Horn} ({\tt bkph@kauai.ai.mit.edu}),\\
Micha{\l} {\sc Jaegermann} ({\tt ntomczak@vm.ucs.ualberta.ca}),\\
\hspace*{4em}and\\
David {\sc Kastrup} ({\tt dak@pool.informatik.rwth-aachen.de}).
\end{quote}
Typesetting was initiated by
\begin{quote}
Yannis {\sc Haralambous} ({\tt yannis@gat.citilille.fr}).
\end{quote}
Mistakes remain copyright \copyright{} 1994 Geoffrey {\sc Tobin}.
\section*{Motivation}%
\addcontentsline{toc}{section}{Motivation}
It's a common experience to have initial (and medial and final
{\tt :-)} ) difficulty with running \MF{}, and not all `\TeX{}nicians'
are as familiar with \MF{} as they are with \TeX{}. Still, nothing
ventured, nothing gained. So let's be of good cheer, and get down to
work.
\section{What is \MF{}?}
\MF{} is a program for making bitmap fonts for use by \TeX{},
its viewers, printer drivers, and related programs.
It interprets a drawing language
with a syntax apparently derived in part from the Algol\footnote
{Around 1960, Donald {\sc Knuth} worked as an Algol compiler
designer.}
family of programming languages, of which C, C++, Pascal and Modula-2
are members.
The input can be interactive, or from a source file.
\MF{} source files are usually suffixed `{\tt .mf}'.
\MF{} sources can utilize scaling, rotation, reflection, skewing and shifting,
and other complex transformations in obvious and intuitive ways.
But that is another story, told (in part) by \MFbook{}.
\MF{}'s bitmap output is a {\sc gf} ({\em generic font\/}) file.
This may be compressed to an equivalent {\sc pk} ({\em packed\/}) font
by the auxiliary program {\sf GFtoPK}.
Why doesn't \MF{} output {\sc pk} fonts directly? Firstly, Tomas
{\sc Rokicki} had not invented {\sc pk} at the time Donald
E.~{\sc Knuth} was writing \MF{}. Secondly, to change \MF{} now
would be too big a change in {\sc Knuth}'s opinion. ({\sc Knuth}
is a very conservative programmer; this fact is a two-sided coin.)
{\sc gf} and {\sc pk} files are suffixed `{\tt .*gf}' and `{\tt .*pk}'
respectively, where, in a typical {\sc unix} installation, the
`{\tt *}' stands for the font resolution.
(Resolution will be explained below.)
{\sc ms-dos} truncates file name suffixes to three characters, so a
font suffix `{\tt .1200gf}' becomes `{\tt .120}' --- beware of this!
A bitmap is all that's needed for large-scale {\em proofs},
as produced by the {\sf GFtoDVI} utility,
but for \TeX{} to typeset a font it needs a {\sc tfm}
({\em \TeX{} Font Metric\/}) file to describe the dimensions, ligatures
and kerns of the font. \MF{} can be told to make a {\sc tfm} file,
by making the internal variable `{\tt fontmaking}' positive. Most
output device modes (see subsection \ref{sub:modes} below) do this.
Remember that \TeX{} reads only the {\sc tfm} files.
The {\em glyphs}, or forms of the characters, as stored in {\sc gf}
or {\sc pk} font files, do not enter the picture
(I mean, are not read)
until the {\sc dvi} drivers are run.
\TeX{} can scale {\sc tfm} files. Unfortunately, bitmaps such as
{\sc gf} and {\sc pk} are not scalable.
% deleted "except in integer multiples of their original size".
% Pixel replication is as inexact an interpolation as other schemes,
% and does not produce adequate images.
However, \MF{} files can be compiled into fonts of arbitrary scale
by \MF{}, even
by non-programmers --- see subsection \ref{sub:mag}.
Incidentally, properly constructed {\sc tfm} files are
device-independent, so running \MF{} with different modes normally
produces the identical {\sc tfm}.
% This explanation might want a different place...
Dimensions in {\sc tfm}~files are specified to~\MF{} in device
independent `sharped' dimensions (commonly suffixed by \#), where
a~value of~1 corresponds to the dimension of {\tt 1pt} (typographical
point). Most of \MF{}'s calculations are done with (resolution and
device dependent) pixels as units. Care must be taken by font
designers to {\em always\/} calculate unsharped dimensions from sharped
ones, and never the other way round, so as to keep roundoff errors or
similar effects from influencing the {\sc tfm} files to depend on
resolution or device. Although type quality will be influenced only in
minuscule ways, this is one of the more common reasons for checksum
errors reported by printer drivers.
Note that the only way to be sure that a TFM file is device-independent
is to create the font in different modes and compare the resulting
TFM's, perhaps using {\sf tftopl}.
More detailed descriptions of {\sc tfm} and {\sc gf} files, and of
{\em proof\/} mode, are found in Appendices F, G, and H, respectively
of \MFbook{}.
{\sl The TUG {\sc dvi} Drivers Standard, Level 0}, draft 0.05, includes
precise definitions of the file structure of {\sc tfm} metrics and of
{\sc gf} and {\sc pk} bitmap fonts.
That document is obtainable from CTAN (see section \ref{sec:CTAN}
above) as the several files in the subdirectory:
\begin{verbatim}
dviware/driv-standard/level-0
\end{verbatim}
Related information is contained in the documents in the `sister'
directory
\begin{verbatim}
dviware/driv-standard/papers
\end{verbatim}
\section{Getting \MF{}'s Attention}\label{sec:typing}
\subsection{Typing at \MF{}'s `{\tt **}' prompt}\label{sub:starstar}
If you type the name of the \MF{} program alone on the command line:
\begin{verbatim}
mf
\end{verbatim}
then {\tt mf} displays a `{\tt **}' prompt,
which
`is \MF{}'s way of asking you for an input file name'.
(See \MFbook{}, Chapter 5: `Running \MF{}'.)
Thus, to process a \MF{} file named {\tt fred.mf}, you may type:
\begin{verbatim}
fred
\end{verbatim}
A backslash (`\ttbsl') can also be typed here.
This causes all subsequent commands at the prompt line to be
interpreted as in a \MF{} file.
(Concerning the backslash, see \MFbook{}, Chapter 20:
`More About Macros', pages 179 and 180 in the 1986 edition.)
Thus we can respond to the {\tt **} prompt with:
\begin{verbatim}
\ input fred
\end{verbatim}
or even:
\begin{verbatim}
\ ; input fred
\end{verbatim}
The backslash is useful because
certain commands are often executed before a \MF{} file is input.
In particular, quality printing
(see subsection \ref{sub:modes} below)
requires the \MF{} command {\tt mode},
and output magnification
(subsection \ref{sub:mag})
employs the {\tt mag} command.
For example:
\begin{verbatim}
\mode=localfont; mag=magstep(1); input fred
\end{verbatim}
To read {\sc ms-dos} pathnames at the {\tt **} prompt,
this satisfies \MF{}:
\begin{verbatim}
\input \seldom\fred.mf
\end{verbatim}
as does:
\begin{verbatim}
d:\seldom\fred.mf
\end{verbatim}
\subsection{Typing on the Command Line}\label{sub:cmdline}
Most \MF{} implementations permit you to type \MF{} commands on the
command line, instead of at the {\tt **} prompt. (Rather, it is
automatically passed to that prompt.)
On {\sc ms-dos}, type commands as at the {\tt **} prompt:
\begin{verbatim}
mf \mode=localfont; input myfont10
\end{verbatim}
On {\sc unix}, command shells typically interpret semicolons,
backslashes and parentheses specially, unless they are 'quoted'.
So, when typing those characters as part of instructions to \MF{}
on the {\sc unix} command line, it's wise to accustom
yourself to protecting them with {\em apostrophes\/}:
\begin{verbatim}
mf '\mode=localfont; input myfont10'
\end{verbatim}
If {\tt localfont} makes fonts for a 300 dots per inch (dpi) device,
this should produce a {\sc tfm} file, `{\tt myfont10.tfm}',
and a 300 dpi {\sc gf} font file, `{\tt myfont10.300gf}'.
Almost all of the following will presume a 300 dpi device, and other
resolution devices will have appropriately different font file names.
These command lines are a bit long, very often used, and rather
intolerant of mistakes (see subsection \ref{sub:typo} below),
so you might type the repetitive parts into a {\sc unix} shell script
or an {\sc ms-dos} batch file, as appropriate.
In {\sc unix}, the {\tt **} prompt has the advantage that those pesky
apostrophes are not needed. (Indeed, those apostrophes are always
wrong at the {\tt **} prompt --- \MF{} doesn't understand them.
It would not understand them on the command line either---it's just
that the shell does not hand them over to \MF{}.)
However, for shell scripts (and for batch files in {\sc ms-dos}),
the command line is a boon.
For the Macintosh, which is not command line based,
Tim {\sc Bell} reports that one port of \MF{}
(by Timothy {\sc Murphy\/} {\tt <tim@maths.tcd.ie>} 22 January 1993)
simulates the command line within the program
(using a special THINK C library written just for that).
But what you type goes through some string processing,
so you need double `\verb+\+'s.
Thus your example line reads:
\begin{verbatim}
mf \\mode=localfont; input myfont10
\end{verbatim}
\subsection{`{\tt Please type another input file name: }'}%
\label{sub:another}
When \MF{} cannot find the main source file, it doesn't quit.
For example, when I typed {\tt mf fred}, \MF{} said:
\begin{verbatim}
This is METAFONT ...
**fred
! I can't find file `fred.mf'.
<*> fred
Please type another input file name:
\end{verbatim}
The usual program interrupts (eg, Control-C) don't work here,
and the `{\tt Please type ...}' prompt does not understand
\MF{} commands: it will read only the first word, and insist on
interpreting this as a file name.
Beginners faced with this often wonder how to avoid an endless loop
or a reboot, or try to think of a \MF{} file that they do have
in \MF{}'s path. In the latter case, the canonical name to use
is `{\tt null}', standing for the file `{\tt null.mf}'.
In fact, the solution is much easier: on the
systems that I have tried, a simple end of file marker
(`control-Z' in {\sc ms-dos}, `control-D' in {\sc unix})
stops \MF{} in its tracks:
\begin{verbatim}
! Emergency stop.
<*> fred
End of file on the terminal!
\end{verbatim}
\section{Base files}\label{sec:base}
In versions 2.7 and 2.71, the \MF{} language contains 224
(previous versions had fewer) primitives,
which are the commands preceded by an asterisk in the Index (Appendix I)
to \MFbook{}. From these we can build more complex operations,
using macros. In \MF{} macros have some of the desirable
characteristics of functions in other languages. Collections of
macros can be stored in \MF{} source files.
{\em Base\/} files are {\em precompiled internal tables\/} that \MF{}
loads faster than it loads the original \MF{} source files.
Thus, they are closely analogous to \TeX{}'s {\em format\/} files.
\subsection{The {\tt plain} base}\label{sub:plain}
The {\tt plain} base provides the commands that \MFbook{}
describes. (See Appendix B of \MFbook{}, if you have it around
--- maybe a library has it --- I'm learning from a copy borrowed from the
local university's library.)
When it starts, \MF{} automatically loads\footnote
{There are releases of \MF{} that contain the {\tt plain} base,
and so don't have to load it. However, on most computers, including
personal computers, reading bases is so fast that such a {\em preloaded\/}
base is unnecessary.}
the {\tt plain} base.
This is usually called {\tt plain.base}, or sometimes only (see
subsection~\ref{sub:link} for why this works) {\tt mf.base},
although for those systems concerned (such as {\sc unix}),
both file names should really be present.
Em\TeX{} for {\sc ms-dos} calls the plain base {\tt plain.bas},
due to filename truncation.
\subsection{Loading a Different Base}\label{sub:loading}
Suppose that you have a base named {\tt joe.base}.
Typing
\begin{verbatim}
mf &joe
\end{verbatim}
or (on unix, where we must either quote or escape the ampersand)
\begin{verbatim}
mf \&joe
\end{verbatim}
or responding
\begin{verbatim}
&joe
\end{verbatim}
to the {\tt **} prompt,
omits loading {\tt plain} base, and loads the {\tt joe} base instead.
Typically, however, the {\tt joe.mf} file which originally produced
the {\tt joe} base will have included {\tt plain.mf}, because working
without the {\tt plain} base macros would be too cumbersome.
(Refer to \MFbook{} (1986), Chapter 5: `Running \MF{}', page 35,
`dangerous bend' number two.)
The `{\tt cm}' base, for making the {\sc Computer Modern} fonts,
can be loaded in that way:
\begin{verbatim}
mf &cm
\end{verbatim}
Remember to quote the ampersand under {\sc unix}!
\subsection{The Linkage Trick}\label{sub:link}
On systems such as {\sc unix} where programs can read their own
command line name, and where files may be linked to two or more
names, then programs can modify their behavior according to the
name by which they are called. Many {\sc unix} \TeX{} and \MF{}
installations exploit this in order to load different {\em format\/}
and {\em base\/} files, one for each of the various names to which
\TeX{} and \MF{} are linked. Such installations can often
be recognised by the presence of the executable `{\tt virmf}'
in one of the directories in the {\tt PATH}.
For example, if a base file called `{\tt third.base}' resides where
\MF{} can find it (see section \ref{sub:env} below), then
{\tt virmf} can be linked to {\tt third}.
In {\sc unix}, a {\em hard link\/} is formed by
\begin{verbatim}
ln virmf third
\end{verbatim}
On systems supporting {\em symbolic links\/}, you should make all of
these links symbolic, rather than hard, or else you will have to redo
them every time you install a new copy of~{\tt virmf}; see below.
In {\sc unix}, this is done by
\begin{verbatim}
ln -s virmf third
\end{verbatim}
Normally one wants {\tt mf} to load the {\tt plain} base,
so in such installations one links {\tt plain.base} to {\tt mf.base}:
\begin{verbatim}
ln plain.base mf.base
\end{verbatim}
Again, you'd best make that link symbolic. This comment applies for
the rest of this section as well.
As another example, take the `{\tt cm}' base. In {\sf web2c}:
\begin{verbatim}
ln virmf cmmf
ln cm.base cmmf.base
\end{verbatim}
so that `{\tt cmmf}' automatically loads `{\tt cm.base}'.
This applies equally to \TeX{}, which is why {\tt tex} and {\tt latex}
are then links to {\tt virtex}, {\tt tex.fmt} is a link to
{\tt plain.fmt}, and {\tt latex.fmt} is a link to {lplain.fmt}:
\begin{verbatim}
ln virtex tex
ln plain.fmt tex.fmt
ln virtex latex
ln lplain.fmt latex.fmt
\end{verbatim}
Karl {\sc Berry\/}'s {\sf web2c} distribution for {\sc unix} uses
this `{\em linkage trick\/}'.
If you used symbolic links, you can laugh off the following
{\sc Warning:}
This linkage is convenient, but watch out during updates!
If {\tt mf.base} is a {\em hard link\/}
to {\tt plain.base}, then replacing {\tt plain.base} with its
new version severs the link: {\tt mf} will still load {\tt mf.base},
but it will be the old version! The proper procedure is to remove
the old {\tt mf.base}, and relink. On {\sc unix}:
\begin{verbatim}
rm mf.base
ln plain.base mf.base
\end{verbatim}
On most {\sc unix\/} systems, {\tt ln -f} will automatically remove
the second file (if present) --- in this case, mf.base --- before linking.
Alternatively, {\sf web2c} will update `{\tt plain.base}'
(and `{\tt plain.fmt}', and so on) for you,
if you tell {\sf web2c\/}'s {\tt Makefile} to
\begin{verbatim}
make install
\end{verbatim}
Symbolic links, on systems that have them, are probably the best
method of handling updates, at least when doing them manually.
(Consult your system administrator for details.)
\subsection{Making a Base; the Local Modes file}\label{sub:modes}
The {\tt plain} base is made from a \MF{} file named
{\tt plain.mf} and, commonly, from some other file, often called
{\tt local.mf} or {\tt modes.mf}.
The {\tt local}/{\tt modes} file lists printers (and monitors), giving
each output device a font-making {\em mode\/}, containing a
description of some refinements that must be made in order to produce
good-looking output. For instance, how to make the characters just
dark enough, and how to make diagonal lines come out sharply.
If you want to make a base, you need a variant of the \MF{} program
called `{\tt inimf}'. (See \MFbook{}, p 279.) For example,
{\tt plain.base} can be made in {\sc unix} by typing:
\begin{verbatim}
inimf 'plain; input local; dump'
\end{verbatim}
If using the em\TeX{} version of \MF{} for a {\sc pc}, type:
\begin{verbatim}
mf/i plain; input local; dump
\end{verbatim}
\section{Fonts}\label{sec:fonts}
\subsection{Proof Mode}\label{sub:proof}
The purpose of \MF{} is to make fonts. For \ae{}sthetically pleasing
{\sc pk} bitmaps, the correct device mode must be selected.
An obstacle to beware of is that {\tt plain} \MF{} uses
{\em proof\/} mode by default.
(\MFbook{}, page 270, defines this mode.)
That means writing unmagnified font files with a resolution of
2601.72 dots per inch (dpi); that's 36 pixels per point. (One
point is 1/72.27 of an inch.) Proof mode does {\bf not} produce a
{\sc tfm} file.
What good is proof mode, and why is it the default?
{\em Proofs\/} are blown up copies of characters used by font
designers to judge whether they like the results of their work.
Naturally, proofs come first, and normal sized character production
later --- if you're a font designer.
So there are two clues that proof mode is on: font files with
extensions like `{\tt .2602gf}' (or on {\sc ms-dos}, `{\tt .260}'),
and the `failure' to produce any {\sc tfm} file.
On some systems, such as {\sc X11}, a third clue is that the proof
font may be drawn on the screen --- it's so large, you can't miss it!
\subsection{Localfont Mode}\label{sub:localfont}
When using a stable font, or when testing the output of a new font,
we {\em don't\/} want proof mode,
we want our local output device's mode.
Usually, \MF{} is installed with a `{\tt localfont}'
assigned in the {\tt local}/{\tt modes} file.
On our department's Sun Network, we have assigned
\begin{verbatim}
localfont:=CanonCX
\end{verbatim}
We use Karl {\sc Berry\/}'s `{\tt modes.mf}'\footnote
{Available at {\tt ftp.cs.umb.edu} in the {\tt pub/tex} directory.},
which contains modes for many, many devices. We chose the
{\tt CanonCX} mode because `{\tt modes.mf}' recommends it for Apple
Laserwriters and HP Laserjet~II printers, which we use.
To process a \MF{} source file named `{\tt myfont10.mf}' for the most
usual local device, specify the local mode to {\tt mf} before
inputting the font name:
\begin{verbatim}
\mode=localfont; input myfont10
\end{verbatim}
This should produce a {\sc gf} font file, `{\tt myfont10.300gf}'
(`{\tt myfont10.300}' in {\sc ms-dos}),
and a {\sc tfm} file, `{\tt myfont10.tfm}'.
\subsection{Font Naming}\label{sub:naming}
By the way, if you modify an existing, say a {\sc Computer
Modern (cm)}, font, you must give it a new name. This is an honest
practice, and will avoid confusion.
\subsection{Using a New Font in \TeX{}}\label{sub:tex}
To use a new font in a \TeX{} document, select it specifically.
Example: in a \TeX{} macro file, or in a \LaTeX{} style file,
to define \verb+\mine+ as a font-selection command for
`{\tt myfont10.tfm}', say:
\begin{verbatim}
\font\mine=myfont10
\end{verbatim}
Then to typeset `Mary had a little lamb,' in the {\tt myfont10} font,
and then to revert to the previous font, type
\begin{verbatim}
{\mine Mary had a little lamb,}
\end{verbatim}
Note, however, that this will not change the line spacing parameters
of \TeX{} as
well. If your lines appear a little too cramped and unevenly spaced vertically,
it is very probable that you need to increase \verb+\baselineskip+.
For \LaTeX{} users, a simple remedy is to just select a larger font
before your own. Also, end your paragraph by an empty line or a
\verb+\par+ command before the closing brace, or your line spacing changes
will be cancelled before the paragraph has a chance of being typeset.
\subsection{Magnification (and Resolution)}\label{sub:mag}
Now suppose that you want {\tt myfont10} to be magnified,
say to magstep 1 (magnified by 1.2), for a `jumbo' printer.
Assuming that the {\tt local}/{\tt modes} file has a mode
for the jumbo printer,
you may then run \MF{} with the following three commands:
\begin{verbatim}
\mode=jumbo; mag=magstep(1); input myfont10
\end{verbatim}
to produce `{\tt myfile10.tfm}' (again!)
and a {\sc gf} font, `{\tt myfile10.360gf}'.
On {\sc ms-dos}, the file names will be truncated;
for example, `{\tt myfile10.360}'.
The `{\tt 360}' is `300 {\tt *} 1.2', indicating the magnification.
A 360 dpi font can be used either as a magnification 1.2 font on
a 300 dpi printer or as a normal sized font on a 360 dpi printer.
Note, however, that the \MF{} language includes special hints for
each output device which clue \MF{} as to the reactions of the
output device to pixel-sized minuscule changes.
So for highest quality, you would not even want to mix the fonts for
two 300~dpi printers, unless they share the same mode and most probably
the same print engine.
\subsection{{\sf GFtoPK}}\label{sub:gftopk}
\TeX{} uses only the {\sc tfm} file, which \MF{}
will produce if it's in a font-making mode.
(\MFbook{}, Appendix F.)
Most {\sc dvi} drivers read the {\sc pk} font format,
but \MF{} makes a {\sc gf} (Generic Font) file.
So we need also to apply the {\sf GFtoPK} utility:
\begin{verbatim}
gftopk myfile10.300gf
\end{verbatim}
to produce the wanted `{\tt myfile.300pk}'
(or, on {\sc ms-dos}, `{\tt myfile.pk}')
{\sc pk} font.
\subsection{Storing the Fonts}\label{sub:store}
Now we have the fonts, where do we store them? \TeX{}, \MF{} and
the various driver programs are compiled with default locations
written in.
These can be overridden by certain environment variables.
The names of these variables differ between systems,
but on {\sc unix} they might, for example, be `TEXFONTS' for the
{\sc tfm} files, and either `PKFONTS' or `TEXPKS' (or both of those)
--- before searching `TEXFONTS' --- for {\sc pk} fonts.
You can find out what environment variables you now have
by typing `{\tt set}' in {\sc ms-dos} and `{\tt env}' in the Bourne shell, sh,
% `set' in the Bourne shell is dangerous, because it gives the values
% of non-environment variables of the shell as well. If you forgot
% to say export, you might have some time detecting your omission
% if you use just `set'.
in {\sc unix}. In the {\sc unix} C shell, {\tt csh}, type
`{\tt setenv}'.
Micha{\l} {\sc Jaegermann} notes that on a `virgin' installation
--- in which everything is in default directories and no environment
variables have yet been set --- that won't succeed. Presumably we're
talking to system installers now. So, as a first resort:
\begin{quote}
\em Read The Manual.
\end{quote}
As a last resort, one can discover default values and environment
variable names by using a command like {\sc unix}'s {\tt strings}
on the executable files.
For instance:
\begin{verbatim}
strings -6 /bin/virmf | less
\end{verbatim}
(Use `more' or `pg' for paging, if `less' is not available.)
Seeking 6-letter names is about right, as ``{\tt TEXPKS}'' has six
letters, while {\tt strings\/}' default of four collects too much
random noise.
Environment variables are usually in upper case, and their names
strongly hint at their purposes.
Default locations may be discovered by looking for path name strings.
Using this advice may show some undocumented names.
If you have the program sources, you may check their purpose.
Otherwise, not to worry, the important ones should be self-evident.
As an illustration, here are some environment variable names found by
applying ``strings -6'' to {\sc Rokicki's} {\tt dvips}:
\begin{verbatim}
* DVIPSHEADERS
HOME
* PKFONTS
PRINTER
TEXCONFIG
TEXFONTS
TEXINPUTS
* TEXPACKED
* TEXPICTS
TEXPKS
VFFONTS
\end{verbatim}
The four starred names are not documented by the {\tt dvips} manual
(for version 5.484).
In Karl {\sc Berry's} {\tt dvipsk}, a variant of {\tt dvips},
{\tt DVIPSHEADERS}\footnote{In version 5.518b, which is forthcoming.},
{\tt PKFONTS} and {\tt TEXPICTS} {\em are\/}
documented, while {\tt TEXPACKED} is {\em not used}.
If you want \TeX{} and \MF{} to find files in the current directory
(as you almost certainly do!), then one way is to put `{\tt .}' into
their search paths.
(Both {\sc unix} and {\sc ms-dos} accept the {\tt .} notation
for the current directory.)
Default search paths are compiled into \TeX{} and \MF{}, but users
can customise the environment variables (see subsection \ref{sub:env})
that the programs read, to override the defaults.
\MF{} (as illustrated in section \ref{sec:typing} above),
as well as the {\sc dvi} drivers,
can also be given full path specifications for input files.
(On most systems, so can \TeX{}, but, as Berthold K.~P.~{\sc Horn}
({\tt bkph@kauai.ai.mit.edu}) has observed,
{\sc ms-dos} poses the problem that the backslash `\ttbsl{}'
used in {\sc ms-dos} path names is very special in \TeX{} input.
However, I'll leave solving that one to the \TeX{}ackers.)
On the other hand, you may be content with your new font, and you may
have write access to the place where most of the fonts are stored. In
that case, copy your font to there. There will be a place for the
{\sc tfm} files, and another for the {\sc pk} files. It's up to you
or your local system administrator(s) to know where these directories
are, because their names are very locale dependent.
\subsection{Environment Variables for em\TeX{} and {\sf web2c}}%
\label{sub:env}
Environment variables often cause confusion, as they vary unpredictably
--- sometimes subtly, sometimes widely --- between systems.
Em\TeX{} for {\sc ms-dos} and {\sf web2c} for {\sc unix} are two
popular distributions of \TeX{}, \MF{}, and associated programs.
It's worthwhile therefore to compare their environment variables.
Firstly, the variables used leading up to the production of the
{\sc dvi} file:
\begin{center}
\begin{tabular}{|l|l|l|}
\hline
\multicolumn{3}{|c|}{\TeX{}, \BibTeX{}, \MF{} and {\sf MFjob}} \\
\hline
Seeking & em\TeX{} & {\sf web2c} \\
\hline
\TeX{} Pool file & {\tt TEXFMT}, {\tt BTEXFMT} & {\tt TEXPOOL} \\
\TeX{} Formats & {\tt TEXFMT}, {\tt BTEXFMT} & {\tt TEXFORMATS} \\
\TeX{} Inputs & {\tt TEXINPUT} & {\tt TEXINPUTS} \\
\TeX{} Font Metrics & {\tt TEXTFM} & {\tt TFMFONTS, TEXFONTS} \\
\hline
\BibTeX{} {\tt bst} & {\tt TEXINPUT} & {\tt BSTINPUTS, TEXINPUTS} \\
\BibTeX{} {\tt bib} & {\tt BIBINPUT} & {\tt BIBINPUTS} \\
\hline
\MF{} Pool & {\tt MFBAS, BMFBAS} & {\tt MFPOOL} \\
\MF{} Bases & {\tt MFBAS, BMFBAS} & {\tt MFBASES} \\
\MF{} Inputs & {\tt MFINPUT} & {\tt MFINPUTS} \\
{\sf MFjob} Inputs & {\tt MFJOB} & \multicolumn{1}{c|}{---} \\
\hline
\end{tabular}
\end{center}
The second table compares the environment variables used by em\TeX{}'s
{\sc dvi} drivers with those for Tomas {\sc Rokicki\/}'s portable
{\sf PostScript} driver, {\tt dvips}.
\begin{center}
\begin{tabular}{|l|l|l|}
\hline
\multicolumn{3}{|c|}{{\sc dvi} Drivers} \\
\hline
Seeking & em\TeX{} Drivers & {\tt dvips} \\
\hline
{\sc dvi} files & {\tt DVIDRVINPUT} & {\em current directory} \\
{\sc pk} Fonts & {\tt DVIDRVFONTS} & {\tt TEXPKS, PKFONTS} \\
Bitmap Graphics & {\tt DVIDRVGRAPH} & \multicolumn{1}{c|}{---} \\
Virtual Fonts & set by {\tt /pv} option & {\tt VFFONTS, TEXFONTS} \\
{\tt MakeTeXPK} & \multicolumn{1}{c|}{---} & {\tt MAKETEXPK} \\
{\tt config.ps} & \multicolumn{1}{c|}{---} & {\tt TEXCONFIG} \\
{\sc ps} files & \multicolumn{1}{c|}{---} & {\tt TEXINPUTS} \\
\hline
\end{tabular}
\end{center}
Where two or more variables are listed together, they are
searched from left to right. For example, {\tt dvips} seeks {\sc pk}
fonts first in {\tt TEXPKS}, then in {\tt PKFONTS}.
By the way, if no {\sc pk} fonts can be found, then {\tt dvips}
uses the {\sc tfm} files to determine spacing, and leaves the
characters blank.
{\sc Berry}'s {\tt dvipsk} seeks {\sc pk} fonts in whichever
{\em one\/} of {\tt PKFONTS, TEXPKS, GLYPHFONTS} and {\tt TEXFONTS}
--- in that order --- is set and of the highest priority.
If a font cannot be found via environment variables, then the
compile-time system default paths are searched; any lower priority
font path environment variables are ignored --- which may also be the
behavior of Rokicki's {\tt dvips}, but readers are encouraged to
discover the truth for themselves.
In addition, {\tt dvipsk} seeks {\sc gf} fonts using the successive
environment variables {\tt GFFONTS, GLYPHFONTS} and {\tt TEXFONTS}.
{\sf MFjob} and {\tt MakeTeXPK} have a similar function:
to create {\sc pk} fonts from \MF{} files.
When {\sc pk} fonts are missing, but the \MF{} font sources
are available,
{\sf MFjob} can be called by recent versions (1.4r and above)
of the em\TeX{} drivers to create the missing fonts.
{\tt MakeTeXPK} is called by {\tt dvips} for the same purpose.
In {\sc Berry\/}'s {\tt web2c 5.851d}\footnote
{Available at {\tt ftp.cs.umb.edu} in the {\tt pub/tex} directory.},
\TeX{} can be configured to call {\tt MakeTeXTFM} and
{\tt MakeTeXTeX}, and \MF{} to call {\tt MakeTeXMF},
to make missing {\sc tfm}, \TeX{}, and \MF{} files, respectively.
{\tt MakeTeXTFM}, like {\tt MakeTeXPK}, can call \MF{}.
Design of {\tt MakeTeXTeX} and {\tt MakeTeXMF} are up to the user's
imagination --- Karl says that one possibility is to employ {\tt ftp}.
\section{Some Limitations of \MF{}}\label{sec:limit}
\MF{} contains some builtin limitations, some obvious, others
less so.
Parts of the following list are most useful to budding programmers,
though casual users may wish to read it to learn whether
an error message produced by somebody else's \MF{} file is very
serious or not.
\begin{enumerate}
\item
All valid numbers are strictly less than 4096.
\item
\MFbook{}, in `Appendix F: Font Metric Information',
warns of one limitation that I've met when processing some fonts.
`At most 15 different nonzero heights, 15 different nonzero depths,
and 63 different nonzero italic corrections\footnote{Respectively,
{\tt charht}, {\tt chardp} and {\tt charic} values.}
may appear in a single font. if these limits are exceeded,
\MF{} will change one or more values, by as little as possible,
until the restriction holds. A warning message is issued if such
changes are necessary; for example
{\small\tt (some charht values had to be adjusted by as much as 0.12pt)}
means that you had too many different nonzero heights, but \MF{}
found a way to reduce the number to at most 15 by changing some of them;
none of them had to be changed by more than 0.12 points.
No warning is actually given unless the maximum amount of perturbation
exceeds $\frac{1}{16}$ pt.'
Every correct implementation of \MF{} will adjust character box
dimensions by the same amount, giving the same {\sc tfm} files, so we
ignore small perturbations in other people's fonts. When designing
your own fonts, however, I think it's courteous to keep within the
limits, so as not to worry inexperienced users.
\item
In the {\tt addto} picture command, {\tt withweight} only accepts
values that round to {\tt -3}, {\tt -2}, {\tt -1}, {\tt +1}, {\tt +2},
or {\tt +3}. To obtain other pixel weights, you can apply further
{\tt addto} commands.
\item
The memory size of the version of \MF{} you use is an evident,
implementation dependent restriction, but it may be, as in \TeX{},
that memory is not enough simply because, if you'll pardon my saying
so, some of your coding may be seriously inefficient or logically
invalid.
\end{enumerate}
\section{What Went Wrong?}
The complexity of wrong things far exceeds that of things intended.
References for some of the subsequent points:
\MFbook{}, chapter 5, `Running \MF{}', contains
instructive examples, and supposedly `dangerous', but actually basic
and useful, notes.
In that chapter, and in chapter 27, `Recovery from Errors', {\sc Knuth}
discusses the diagnosis of \MF{}'s error messages. I find this
perhaps the hardest part of the book --- if not of using \MF{}.
Incidentally, \MF{}'s error messages are contained in an ASCII
file called `{\tt mf.pool}'. Reading the {\tt pool} file can be
entertaining.
\subsection{Big fonts, but Unwanted}\label{sec:proof}
Recently, I found myself accidentally producing fonts with extensions
like `{\tt 3122gf}'. How?
{\em \MF{} will take\/ {\bf anything} as an excuse to revert
to\/ {\bf proof mode}.}
The `{\tt 3122}' is a magstep 1 proof mode. It's
\begin{verbatim}
(1.2)^1 * 2601.72 = 3122.164 dots per inch.
\end{verbatim}
My intention was for \MF{} on a PC to use an HP Laserjet mode in
place of proof mode. However, \MF{}'s command line resembles
the law: {\em every stroke of the pen is significant}. What I had
forgotten was that on my setup, `{\tt localfont}' must be explicitly
requested.
Em\TeX{}'s \MF{}, with {\tt plain.mf}, defaults to proof mode.
However, I usually want a local printer's font-making mode.
So to process {\tt pics.mf} correctly, I need to say:
\begin{verbatim}
mf '\mode=localfont; input pics'
\end{verbatim}
\subsection{Consequences of Some Typing Errors on \MF{}'s
command line}\label{sub:typo}
Small typing errors are so common, and yet undocumented (why are
common mistakes not documented?), that I thought I'd list several that
have tripped me up on innumerable occasions. After all, why reinvent
the car crash?
Consider a source file `{\tt pics.mf}' that contains `{\tt mag=1200/1000;}',
so it is automatically scaled by 1.2 (ie, by magstep 1). If the target
printer has 300 dpi, then a 360 dpi {\sc gf} font is wanted.
Here is the gist of what happens for various typing errors, when using
em\TeX{}'s `{\tt mf186}' on a 286 {\sc pc} to process `{\tt pics.mf}'.
\begin{enumerate}
\item
\verb+mf186+ $\Longrightarrow$ \MF{} will keep prompting for arguments:
\begin{verbatim}
**
\end{verbatim}
We can type the contents of the command line here; for example, I can
now type `{\tt pics}'. In fact, even if you use the command line,
the {\tt .log} (`transcript') file shows \MF{} echoing its
interpretation of the command line to a ** prompt.
\item \verb+mf186 pics+ $\Longrightarrow$ proof mode:
\begin{verbatim}
! Value is too large (5184)
\end{verbatim}
No {\sc tfm} is produced, and the {\sc gf} file has resolution 3122 dpi.
(3121.72 dpi, to be precise.)
\item \verb+mf186 mode=localfont; input pics+ $\Longrightarrow$ misinterpretation:
\begin{verbatim}
! I can't find file `modes=localfont.mf'.
\end{verbatim}
So, `{\tt modes}' needs that backslash, otherwise mf thinks it's the start
of a source font's filename. Backslash (`$\backslash$') and ampersand
(`\&') are escapes from this standard interpretation by \MF{}
of the first argument. (Ampersand is in fact only a temporary escape,
as \MF{} resumes the {\tt mf} filename prompting attitude as soon
as a base is read.)
\item \verb+mf186 \mode=localfont input pics+ $\Longrightarrow$
weird effect:
\begin{verbatim}
>> unknown string mode_name1.2
! Not a string
<to be read again>
;
mode_setup-> ...ode)else:mode_name[mode]fi;
l.6 mode_setup
;
\end{verbatim}
Wow! What a difference a semicolon can make!
\item \verb+mf186 \mode=localfont pics+ $\Longrightarrow$
almost nothing happens:
\begin{verbatim}
** \mode=localfont pics
*
\end{verbatim}
There's the echo I mentioned. From the lack of activity, {\tt pics}
evidently needs to be `{\tt input}'.
\item \verb+mf186 \mode=localfont; pics+ $\Longrightarrow$
Same as 5.
So, yes, when the mode is specified, we need `{\tt input}'
before `{\tt pics}'.
\item \verb+mf186 &plain \mode=localfont; input pics+ $\Longrightarrow$
Works.
Just as without the `{\tt \&plain}', it writes a {\sc gf} file,
`{\tt pics.360gf}', which is correct.
({\sc ms-dos} truncates the name to `{\tt pics.360}'.)
So, redundancy seems okay. Does it waste time, though?
\end{enumerate}
\subsection{Finding the Fonts}\label{sub:finding}
Finding the fonts ({\tt *.mf}, {\tt *.tfm}, {\tt *.gf}, and {\tt *.pk})
trips up \TeX{}, \MF{}, {\sf GFtoPK} and the output drivers continually.
`{\tt pics.tfm}' needs to be put where \TeX{} will look for {\sc tfm\/}s,
so I needed to ensure that `{\tt .}' was in the appropriate path environment
variable. Similarly for the \MF{}, {\sc gf} and {\sc pk} font files.
Environment variables can be tricky. For instance, em\TeX{}'s font-making
automation program `{\sf MFjob}' cannot make fonts in the current directory
unless both `{\tt .}' and `{\tt ..}' are added to {\tt MFINPUT}.
This was not documented.
Also, some popular \TeX{} output drivers, such as the em\TeX{} drivers
on {\sc ms-dos} and {\sc os/2}, and Tomas {\sc Rokicki\/}'s `{\tt dvips}'
which has been ported to many systems, make missing fonts automatically
--- provided that they can find the necessary \MF{} source files.
Again, making fonts in the current directory can require some
tweaking.
\subsection{{\tt MakeTeXPK}}\label{sub:maketexpk}
On {\sc unix}, when fonts are missing,
{\tt dvips} calls a Bourne shell script, `{\tt MakeTeXPK}',
which creates a temporary directory, which it then changes to,
before calling \MF{} to make the missing fonts.
The change of directory can cause \MF{} not to find font sources
lying in what {\bf used} to be the current directory.
Gert W.~{\sc Bultman} ({\tt bultman@dgw.rws.nl}) has suggested the
following modification to {\tt MakeTeXPK\/}:
\begin{verbatim}
MFINPUTS=${MFINPUTS}:`pwd`; export MFINPUTS
\end{verbatim}
to add the current directory to the search path, {\em before\/} the
change to the temporary directory:
\begin{verbatim}
cd $TEMPDIR
\end{verbatim}
Micha{\l} {\sc Jaegermann} ({\tt ntomczak@vm.ucs.ualberta.ca})
has pointed out that:
`This will not work very well in a situation when the {\tt MFINPUTS} variable
is not set, and you rely instead on \MF{} files being in a default
location. The problem is that in such a situation, after an execution
of the line above, you will end up with ONLY your 'current working
directory' in the {\tt MFINPUTS} path, [which still leaves you
without access to the standard \MF{} files].
`For the Bourne shell, {\tt sh}, this line should rather read
somewhat\footnote
{gt: I've separated this into two (valid, unix Bourne shell) lines,
to fit into the text width of this document.}
like:
\begin{verbatim}
MFINPUTS=`pwd`:${MFINPUTS-/usr/lib/mf/inputs}
export MFINPUTS
\end{verbatim}
which gives you a fallback position. Of course,
\begin{verbatim}
/usr/lib/mf/inputs
\end{verbatim}
should be replaced by a default value for the {\tt MFINPUTS} path.
`This problem is highly likely to affect budding \MF{} hackers
on {\sf NeXT}, for example.'
Micha{\l}'s suggestion gives priority to \MF{} files in the directory that
is current when MakeTeXPK is called, which is the usual preference.
In {\tt sh}, the `{\tt \${A-B}}' construction has the value of {\tt A},
if {\tt A} is defined, and the value of {\tt B}, otherwise.
Karl {\sc Berry} advises that for {\tt web2c 5.851c} and above,
a leading or trailing colon in a path is replaced by the compile-time
default path. For {\tt web2c} he suggests:
\begin{verbatim}
if test -z "$MFINPUTS"; then
MFINPUTS=`pwd`:
else
MFINPUTS=`pwd`:$MFINPUTS:
fi
\end{verbatim}
Test these ideas on your system, to see what is most applicable.
Incidentally, on {\sc ms-dos}, {\tt dvips} calls a batch file,
`{\tt MAKETEXP.BAT}', but, in the {\sc ms-dos} versions I've seen,
this lacks the change to a temporary directory that causes
the problem that occurs both in the {\sc unix} versions of {\tt dvips}
and in em\TeX{}'s MFjob.
\subsection{Strange Paths; Not a cycle; Bad pos}
\MF{} satisfactorily fills simple closed curves, like `{\tt O}'
and `{\tt D}', but filling a figure eight, `{\tt 8}', causes a
complaint:
\begin{verbatim}
Strange path (turning number is zero)
\end{verbatim}
because \MF{}'s rules for distinguishing inside from outside
might or might not give what you want for an `{\tt 8}', as there is
more than one conceivable answer. You can use the `positive turning
rule' for all cases, and also turn off complaints, by setting
\begin{verbatim}
turningcheck := 0;
\end{verbatim}
Chapter 13: `Drawing, Filling, and Erasing', and Chapter 27:
`Recovery from Errors', discuss {\tt strange paths} in greater
depth.
Sometimes, when making a perfectly valid font, but in {\em low\/}
resolutions, as for previewers (eg, VGA has 96 dpi), one may get
flak about a `{\tt Strange path}', `{\tt Not a cycle}',
`{\tt bad pos}', or something similar. Don't be alarmed. Fonts for
previewing will still be OK even if not perfect. (Actually, I don't
spot any difference!)
Consequently, it is an idea to make low resolution fonts in
\MF{}'s \hbox{\tt nonstopmode}.
Em\TeX{}'s drivers version 1.4s make missing fonts automatically
through the {\tt MFjob} program (version 1.1l). To keep {\tt MFjob}
running, add the option {\tt /i} (`ignore errors produced by \MF{}')
to the {\tt MFJOBOPT} environment variable.
Examples of fonts that give messages of this nature are the pleasant
Pandora, and --- from memory --- the commendable Ralf Smith's
Formal Script ({\tt rsfs}). Everything is fine at higher resolutions.
Mind you, some fonts provoke sporadic
(that is, design size dependent)
strange path messages at 300 dpi
(phototypesetter users would consider that low resolution),
yet the printed appearance shows no visible defect.
Why do strange paths occur?
One cause is rounding error on relatively coarse grids.
To summarize, if your viewed or printed bitmaps are fine,
then you are OK.
\section{\MF{} Mail List}
Since 10 December 1992, there has been an e-mail discussion list
for \MF{}, created:
\begin{enumerate}
\item as a means of communication between hooked \MF{}ers;
\item as a way to bring the ``rest of us'' closer to them;
\item as a means to get quick and efficient answers to questions
such as:
\begin{itemize}
\item[$\circ$] why do I always get a ``.2602gf'' file?
\item[$\circ$] what is a ``strange path'',
and what can I do to avoid it?
\item[$\circ$] is there a way to go from \MF{} to PostScript
and vice-versa?
\item[$\circ$] where can I find a Stempel Garamond font
written in \MF{}?
\item[$\circ$] what is metaness?
\end{itemize}
\item and finally, as a first step to encourage people to undertake
\MF{}ing, and start a new post-Computer Modern era of \MF{}!
\end{enumerate}
To subscribe to this list, send the following two lines to
``{\tt listserv@ens.fr}'' on the Internet:
\begin{quote}
\tt
SUBSCRIBE METAFONT $<$Your name and affiliation$>$\\
SET METAFONT MAIL ACK
\end{quote}
The address of the list is ``{\tt metafont@ens.fr}''
(at the notorious Ecole Normale Superieure de~Paris).
Owner of the list is Jacques {\sc Beigbeder}
(``{\tt beig@ens.fr}''),
coordinator is Yannis {\sc Haralambous}
(``{\tt yannis@gat.citilille.fr}'').
Language of the list is English;
intelligent mottos are encouraged.
\section{Conclusion}
\MF{}, like \TeX{} and many another `portable' program of any
complexity, merits the warning: `{\em Watch out for the first step\/}'.
I hope that a document like this may help to prevent domestic
accidents involving \MF{}, and so contribute to making the task
of using and designing meta-fonts an enjoyable one. My brief
experience with \MF{} suggests that it can be so.
All the Best!
%% Geoffrey Tobin
\end{document}
% end file mfb3w4.tex %
|