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
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
|
\documentstyle{article}
\title{{\sc mff.sty}: Computer Modern Typefaces\\
as the Multiple Master Fonts\\[0.5\baselineskip]
\Large Version 1.21}
\author{
\begin{minipage}{0.4\textwidth}
\begin{center} A.S.Berdnikov\\{\tt berd{\sl @}ianin.spb.su} \end{center}
\end{minipage}
\hfill
\begin{minipage}{0.4\textwidth}
\begin{center} S.B.Turtia\\{\tt turtia{\sl @}ianin.spb.su} \end{center}
\end{minipage}
}
\date{}
\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC\spacefactor1000 }
\font\manual=logo10 at 12pt
\def\MF{{\manual META}\-{\manual FONT}\spacefactor1000 }
\def\AW{Addison\kern.1em-\penalty 0pt \hskip 0pt Wesley}
\def\CandT{{\sl Computers \& Typesetting}}
\def\TUB{{\sl TUGboat\/}}
\font\cmcmss=cmss12 scaled 1000
\font\cmcmbx=cmbx12 scaled 1000
\font\cmcmtt=cmtt12 scaled 1000
\font\cmcmsl=cmsl12 scaled 1000
\font\cmfunny=cmff10 scaled 1200
\font\cmquote=cmssq8 scaled 1200
\font\cmdunh=cmdunh10 scaled 1200
\font\cmcmr=cmr12 scaled 1000
\font\cmq=cmssq8 scaled 800
\font\cmd=cmdunh10 scaled 800
\font\csl=cmsl10 scaled 800
\newcommand{\bs}{\char92} % char \
\makeatletter
\def\hackersmile{\@ifnextchar[{\@hackersmile}{\@hackersmile[10]}}
\def\@hackersmile[#1]{\hbox{%
\unitlength=1pt\relax
\unitlength=#1\unitlength
\divide\unitlength by 10\relax
\thicklines
\raise -3\unitlength \hbox{%
\begin{picture}(12,12)(-6,-6)
\put(0,0){\circle{10}}
\put(-2,1.75){\circle*{1}}
\put(2,1.75){\circle*{1}}
\thicklines
\put(-2.75,3){\line(1,0){1.5}}
\put(2.75,3){\line(-1,0){1.5}}
\put(0,-1){\line(0,1){3}}
\put(-2.5,-2.5){\line(1,0){5}}
\put(-2.5,-2.5){\line(0,1){1}}
\put(2.5,-2.5){\line(0,1){1}}
\end{picture}%
}}}
\makeatother
\begin{document}
\maketitle
\begin{flushright}
\begin{minipage}{0.55\textwidth}
\small
We would like to express our warmest thanks
to Dr.\ A.Compagner from the Delft University of Technology
who spent a lot of his time and efforts
trying to transform two naive students from Russia
into serious scientists.
\end{minipage}
\end{flushright}
\bigskip
\begin{abstract}
The style file {\sc mff.sty} simulates the effect of
{\sl Multiple Master Fonts} created by Adobe using
the Computer Modern typefaces as a template.
It enables to vary continuously in a wide range
the shape of \TeX{} fonts and create the unique font
which suites the User's demands.
Although originally {\sc mff.sty} was created for internal
purposes to investigate the possibilities hidden inside
the \MF{} source code for Computer Modern typefaces,
it might be useful for professional applications too.
The style file works correctly with
\LaTeX{} 2$_{\hbox{\normalsize$\varepsilon$}}$
as well as with \LaTeX{} $2.09$.
\end{abstract}
\section{Introduction}
The {\sl Multiple Master Font} format for PostScript
fonts was suggested some time ago
by the well-known company {\sl Adobe Inc}.
It enables to vary continuously the
font characteristics (say, {\em weight} (``boldness'')
from light to black, {\em width} from condensed to expanded,
etc.) and create the unique font which suites
the particular User's demands.
Like many other ``new inventions''
in computer assisted typography, the roots of this
idea can be found inside \TeX{}\footnote{For example,
{\sl Microsoft Word} 6.0 was announced as the {\em first}
program which enables to mark some place in the text by
a special marker and then to refer to its position
in a form: ``see page \dots'' \hackersmile.} --- namely, in \MF{}
as the language for font description, and in Computer
Modern font family created by D.Knuth in 1977--1985.
The \MF{} source code was created, and the {\sl Computer Modern}
font parameters were selected using the advises of such
professional font designers as Hermann Zapf,
Matthew Carter, Charles Bigelow and others
(see \cite{CM} for the {\em full} list of contributors).
The \MF{} code for {\sl Computer Modern} typefaces
has the following essential features:
\begin{itemize}
\item
the parameter files are separated from the main source code
so that the font parameters can be variated easily;
\item
the role of the font parameters, the details of the \MF{} source code,
etc., are documented in \cite{CM} in deep details;
\item
the font variations (provided that the fonts and all
changed {\tt .mf} files have the names \underline{\bf different}
from that for the original CM fonts)
are encouraged by the author.
\end{itemize}
The {\sl Computer Modern} fonts are parametrized using
sixty two \hbox{(!!!)} parameters most of which are independent.
It can be seen easily that such big amount of free parameters
exceeds the flexibility of {\em any} multiple master font
which is created up to now or even {\em will be} created
by somebody in future.
The continuous parametrization of the canonical Computer Modern
typefaces created by John Sauter and Karl Berry
({\sc sauter} fonts \cite{SAUTER}), and, on a different basis,
by J\"org Knappen and Norbert Schwarz for
{\sl European Computer Modern} typefaces \cite{DC},
enables to vary continuously the font size in a wide range
without loosing the high quality of the output.
As a result it is easy to manipulate with
{\sl Computer Modern} typefaces like the Adobe multiple master fonts,
and to produce an enomorous amount of {\bf freeware}
fonts of professional quality.
The style file {\sc mff.sty} described here performs this work.
It follows the ideas implimented in the package MF\PiC{}\footnote{%
Like MF\PiC, the first pass of \LaTeX{}
creates the {\tt .mf} file,
then the {\tt .mf} file is processed by \MF,
and at the second pass of \LaTeX{} the new
font is used to make the output.}
and enables to specify the new fonts inside \LaTeX{} document
without dealing with the details of \MF{} programming and
manual specification of each of 62 parameters used in
{\sl Computer Modern} source files.
The User can variate the font shape continuously between
CMR, CMBX, CMSL, CMSS, CMTT and CMFF font families,
specify the {\em weight}, {\em width}, {\em height}
and {\em contrast} of the output font independently,
and in addition he/she can play the character
characteristics so that the output does not
look like the canonical {\sl Computer Modern}
typefaces at all.
\section{Main Command: define a font\label{GENER}}
The generation of the {\tt .mf} header file and the activation
of the new font is performed by the command
{\tt\bs{}MFFgener} which has the format:
\begin{itemize}
\item[] \tt \bs{}MFFgener[{\em fntscaled}]\{{\em{\tt\bs}fntcmd}\}\{{\em filename}\}\{{\em fntsize}\}
\end{itemize}
The command {\em{\tt\bs}fntcmd} will switch inside the document
to the desired font like it is done by the \LaTeX{} commands
\verb?\bf?, \verb?\sl?, \verb?\sf?, etc.\footnote{The difference is that
the size of this font is not influenced by the commands like
{\tt\bs{}large} or {\tt\bs{}small} --- it is fixed and is
determined totally by the parameters {\em fntscaled} and {\em fntsize}.}
The file {\em filename{\tt.mf}} will contain the \MF{} source
code of the new font\footnote{To minimize the attempts to create the
fonts with the names already used in Computer Modern family, etc.,
the prefix {\em xx} is added before the file name automatically.
See section~\ref{MORE} for more details.}.
The value {\em fntsize} specifies the design size
of the new font (it defines the size of a new font and
is used by {\sc mff.sty} to calculate the font parameters
as the functions of this reference value ---
see sections \ref{MIXTURE} and \ref{CORRECT} for more details).
The optional parameter {\em fntscaled} specifies
the additional scaling of this font in \LaTeX{} document.
Examples:
\begin{itemize}
\item[]\verb?\MFFgener{\zfnt}{zmz30}{30pt}?\\
\verb?\MFFgener[scaled 2000]{\zfnt}{zmz15}{15pt}?\\
\verb?\MFFgener[at 30pt]{\zfnt}{zmz20}{20pt}?
\end{itemize}
The {\tt .mf} file created by {\sc mff.sty}
contains only the list of 62 font
parameters which determine the character shapes.
It also contains the command that loads the
driver file ({\tt roman.mf}, {\tt csc.mf}, etc.),
and the driver file assemblers all the necessary \MF{} source code.
It is assumed that the driver files for the fonts described
in section~\ref{CLASS} together with all necessary
{\tt .mf} files are already installed on your computer.
When the file {\em filename{\tt.mf}} is created,
it is necessary to process it by \MF{} to get the metric
file {\em filename{\tt.tfm}} and the bitmap file
{\em filename{\tt.pk}}. The second pass of \LaTeX{} will use the metric
information to format the document properly, and the {\sl DVI}-drivers
will use the bitmap data to make the output.
The proper configuration of \TeX-compiler and {\sl DVI}-drivers
so that they can find these files is the User's task
(please consult your local \TeX-expert how to configure
it\footnote{Some advises how to configure the programs
if you use {\sl MS DOS}/{\sf em\TeX} are in section~\ref{CONFIG}.}).
If \LaTeX{} can find the file {\em filename}{\tt .tfm}, it assigns
the font {\em filename} to the command {\em{\tt\bs}fntcmd} which
can be used later in the document to switch to the desired font.
If \LaTeX{} cannot find the {\tt .tfm} file, the warning message
\begin{itemize}
\item[] {\tt No file {\em filename}.tfm -- dummy font will be used}
\end{itemize}
is displayed which means that the text typed by this new font
will disappear from the {\sl DVI}-file ({\tt dummy} font is the
artificial font which contains no characters).
The file {\em filename{\tt.mf}} which contains the \MF{} data
necessary to make the font is created after {\em each} pass
of \LaTeX{} and the warning message
\begin{itemize}
\item[] {\tt Do not forget to process {\em filename}.mf
and reprocess this file}
\end{itemize}
is displayed even if the new {\tt .mf} file is identical to the previous
one. It is the User's responcibility to guarantee that the {\sc mff.sty}
commands are the same as during the previous pass of \LaTeX{} and that
the {\tt .tfm} and {\tt .pk} files are produced from the correct version
of {\tt .mf} file.
\section{Mixture of independent fonts\label{MIXTURE}}
The {\sl Computer Modern} font sequences
\begin{itemize}
\item[]\begin{flushleft}
{\cmcmr roman},\quad {\cmcmbx bold},\quad
{\cmcmsl slanted},\quad {\cmcmss sans serif},\quad
{\cmcmtt typewriter},\quad {\cmfunny funny},\quad
{\cmdunh dunhill},\quad {\cmquote quotation}\end{flushleft}
\end{itemize}
share just the same \MF{} source code but with different values for
font parameters. Since each font exists at different sizes, it is
possible to construct for each sequence and for each parameter
a continuous approximation which is the function of the font size.
Such approximations, for example, enable to generate fonts with the
font sizes different from that created by D.E.Knuth.
At least two {\em ready-to-use} font approximations are available from
CTAN. One is the {\sc sauter} font package created by
John Sauter and Karl Berry \cite{SAUTER}, and the other is realized
in {\sc dc} and {\sc tc} fonts created by J\"org Knappen and Norbert
Schwarz \cite{DC}. Special {\sc mff.sty} comands control
the approximation scheme:
\begin{itemize}
\item[] {\tt \bs{}MFFsauter} --- {\sc sauter}-type approximation
is used;\\
{\tt \bs{}MFFdcfonts} --- {\sc DC font} approximation
is used;
\end{itemize}
where the default mode is {\tt\bs{}MFFsauter}.
The continuous approximation for CMR parameters enables to create
the \MF{} header file for CMR font with an arbitrary font size.
Similar approximations and, as a result, the font headers with
an arbitrary font size, can be constructed for CMBX, CMTT, CMSS, etc.
The main hypothesis used below is the following:
if some font headers result to correct fonts when processed by \MF{},
the font header contructed from the {\em weighted sum} of the font
parameters extracted from these font headers gives
the correct font also\footnote{The internal relations between
font parameters described in \cite{CM} are conserved for the weighted
sum of font parameters.}.
Although it is not necessarily true, the experiments
with {\sl Computer Modern} typefaces show that if the header files
corresponding to different {\sl Computer Modern} fonts
{\em with the same font size} are selected, this assumption is fulfilled
with great probability.
The fonts CMR, CMBX, CMTT, CMSS, etc., have quite different
character styles although they use just the same \MF{} driver file
{\tt roman.mf}.
The CMTT fonts have nearly rectangular serifs,
nearly no contrast between thin and thick lines,
and different ratio width/height as compared with CMR.
The CMSS fonts has no serifs at all, they also
have no contrast, the thickness of their lines is greater
than that for CMTT.
Other fonts have their own specific
features, but inspite of this fact they can be ``added''
together --- at least mathematically as the 62-dimensional
vectors of font parameters.
The resulting font is no longer CMR, CMBX, CMTT, etc.,
but something intermediate with a unique shape.
Taking into account the {\sf New Font Selection Scheme} used by
\LaTeX~2$_{\hbox{\normalsize$\varepsilon$}}$,
it is preferable to decompose
the CMBX font sequence into {\em two} sequences --- one
for ``boldness'' ({\em weight}) and one for ``extension''
({\em width}) characteristics.
The {\sc mff.sty} uses the special fonts
$\overline{\hbox{CMB}}$\footnote{It is not the same as
{\tt cmb10} created by D.E.Knuth --- the font parameters
are different.} (bold as CMBX and wide as
CMR) and $\overline{\hbox{CMX}}$ (wide as CMBX and bold as CMR)
which are derived from CMBX.
The mixture of fonts is performed by the command
\begin{itemize}
\item[] {\tt \bs{}MFFmixture\{$\alpha_1$\}\{$\alpha_2$\}%
\{$\alpha_3$\}\{$\alpha_4$\}\{$\alpha_5$\}\{$\alpha_6$\}}
\end{itemize}
where $\alpha_1$, $\alpha_2$, $\alpha_3$, $\alpha_4$,
$\alpha_5$, $\alpha_6$ specify
the weight factors:
$\alpha_1$ corresponds to $\overline{\hbox{CMB}}$,
$\alpha_2$ corresponds to $\overline{\hbox{CMX}}$,
$\alpha_3$ corresponds to CMSS (sans serif fonts),
$\alpha_4$ corresponds to CMTT (typewriter fonts),
$\alpha_5$ corresponds to CMFIB (``Fibonacci'' fonts),
$\alpha_6$ corresponds to CMFF (funny fonts)\footnote{%
The fonts {\csl slanted}, {\cmq quotation} and {\cmd dunhill}
are not included in this list because they can be produced
from CMR easily using the scaling commands described
in section~\ref{CORRECT}.}.
If some parameter has the value $p_{cmr}$ for CMR font,
the value $p_{cmb}$ for $\overline{\hbox{CMB}}$ font
(with the same font size!), the value $p_{sf}$ for CMSS font, etc.,
the {\em mixture} value $p_*$ for this parameter is calculated as
\begin{eqnarray}
p_* &=& \alpha_0 p_{cmr}
+ \alpha_1 \left(p_{cmb}-p_{cmr}\right)
+ \alpha_2 \left(p_{cmx}-p_{cmr}\right)
+ \alpha_3 \left(p_{sf}-p_{cmr}\right)
\cr &&\quad\quad
+ \alpha_4 \left(p_{tt}-p_{cmr}\right)
+ \alpha_5 \left(p_{fib}-p_{cmr}\right)
+ \alpha_6 \left(p_{funny}-p_{cmr}\right)
\label{Eq1}
\end{eqnarray}
The value $\alpha_0$ is set to 1.0 by the command {\tt \bs{}MFFmixture},
but the User can assign an arbitrary value to it using the
commands {\tt\bs{}setMFF[$\alpha_0$]\{cmr\}} and
{\tt\bs{}mixMFF[$\alpha_0$]\{cmr\}} which are decribed below.
This procedure enables, for example, to make the font ``less bold''
than CMR or ``more bold'' and ``more extended'' than CMBX
using the weight factors which are less than 0 or greater than 1,
and to create the ``mutant'' combinations of nearly incompatible
font families\footnote{Caution: playing this game
it is very easy to get the {\tt .mf} file which cannot
be passed through \MF{} without errors if you do not
understand clearly what are you doing.}.
The command
{\tt \bs{}MFFmixture\{$\alpha_{1}$\}\{$\alpha_{2}$\}%
\{$\alpha_{3}$\}\{$\alpha_{4}$\}\{$\alpha_{5}$\}%
\{$\alpha_{6}$\}}
is equivalent to the following sequence of commands:
\begin{itemize}
\item[]{\tt \bs{}clearMFF\ \ \ \ \ \
\% synonim for \bs{}MFFmixture\{0\}\{0\}\{0\}\{0\}\{0\}\{0\}}\\
{\tt \bs{}mixMFF[$\alpha_{1}$]\{bold\}} \\
{\tt \bs{}mixMFF[$\alpha_{2}$]\{x\}} \\
{\tt \bs{}mixMFF[$\alpha_{3}$]\{sf\}} \\
{\tt \bs{}mixMFF[$\alpha_{4}$]\{tt\}} \\
{\tt \bs{}mixMFF[$\alpha_{5}$]\{fib\}} \\
{\tt \bs{}mixMFF[$\alpha_{6}$]\{funny\}}
\end{itemize}
These commands are better recognized due to their mnemonic form,
they can be specified in an arbitrary order, the commands with
zero $\alpha$'s can be skipped since the zero weight factors are
already assigned by {\tt\bs{}clearMFF}.
If several commands with the same font name are encountered,
the last specification is active. The default value for the
optional parameter $\alpha$ is {\tt 1.0}.
The mixture between CMR and a {\em single} font can be
specified by a single mnemonic command selected from
\begin{center}\begin{tabular}{l@{\qquad}l@{\qquad}l}
{\tt \bs{}setMFF[$\alpha_{1}$]\{bold\}} &
{\tt \bs{}setMFF[$\alpha_{3}$]\{sf\}} &
{\tt \bs{}setMFF[$\alpha_{5}$]\{fib\}} \\
{\tt \bs{}setMFF[$\alpha_{2}$]\{x\}} &
{\tt \bs{}setMFF[$\alpha_{4}$]\{tt\}} &
{\tt \bs{}setMFF[$\alpha_{6}$]\{funny\}}
\end{tabular}\end{center}
which is equivalent to {\tt \bs{}MFFmixture} where only
one weight factor has non-zero value. If the optional parameter $\alpha$
is skipped, the default value {\tt 1.0} is used. It means that
the ``pure'' font family can be specified by the commands
\begin{center}\begin{tabular}{l@{\qquad}l@{\qquad}l}
{\tt \bs{}setMFF\{bold\}} &
{\tt \bs{}setMFF\{sf\}} &
{\tt \bs{}setMFF\{fib\}} \\
{\tt \bs{}setMFF\{x\}} &
{\tt \bs{}setMFF\{tt\}} &
{\tt \bs{}setMFF\{funny\}}
\end{tabular}\end{center}
Although \LaTeX{} 2$_{\hbox{\normalsize$\varepsilon$}}$/NFSS
considers the {\em weight} and the {\em width} as two
independent font characteristics, the movement in the direction
``bold + extended'' (i.e., to CMBX font family) usually gives
more pleasant results.
To perform this operation it is necessary to assign the equal weights
to $\alpha_{cmb}$ and $\alpha_{cmx}$ which can be done
by the mnemonic commands
\begin{itemize}
\item[]{\tt \bs{}mixMFF[$\alpha_{bx}$]\{bx\}}
\qquad and \qquad
{\tt \bs{}setMFF[$\alpha_{bx}$]\{bx\}}
\end{itemize}
The commands
\begin{itemize}
\item[]{\tt \bs{}mixMFF[$\alpha_{cmr}$]\{cmr\}}
\qquad and \qquad
{\tt \bs{}setMFF[$\alpha_{cmr}$]\{cmr\}}
\end{itemize}
play a special role: they enable to assign the value
$\alpha_0=\alpha_{cmr}$ in the equation~(\ref{Eq1})
(usually $\alpha_0$ is set to 1.0 by the command
{\tt\bs{}MFFmixture} --- for the evident reasons).
%\section*{Some notes about the font sequences
% with continuously variated font size}
%
%Suppose that there is a continuous approximation
%for {\sl Computer Modern Roman} (CMR) which enables
%to calculate the \MF{} font parameters for an {\em arbitrtary}
%design size even with weak \TeX{} arithmetical capabilities.
%The desired font size is specified as the input parameter,
%all the internal calculations of the font parameters are performed
%by \TeX{}, and at the output there is the \MF{} {\em ready-to-run}
%font header file for a new font. When this new font header file
%is processed by \MF{}, it can be used in \TeX{} documents like
%other generic \TeX{} fonts.
%
%It is interesting to compare the possibilities of this simplest
%form of pa\-ra\-me\-tri\-za\-ti\-on
%of CMR-fonts and the {\sc PostScript} vector fonts.
%The nearly-proportional changing of the font dimensions
%with respect to magnification parameter is the analog of the
%linear scaling of the {\sc PostScript} fonts.
%The non-linear relationship of the inter-character spacing from
%the font size imitates the {\em tracking} mechanism implemented
%in {\sc PostScript} fonts (which is not taken into account in most
%cases by text processors). The fact that the ratio height/width is a
%non-constant (and non-linear) function of the font size is a
%serious advantage of these pseudo-CMR fonts in comparison with
%the linearly scaled {\sc Postscript} fonts since it enables to make
%the font proportions more suitable for a human eye
%(it is well known that for good eye recognision small letters
%are to be more expanded and have greater inter-character spacing).
%
%There are at least {\em two} ready-to-use font approximations
%available from CTAN. The first one is the \MF{} {\sc sauter}
%font package created by John Sauter and Karl Berry. It uses
%the continuous functions composed from constant, linear and quadratic
%pieces which are constructed so that for {\em canonical} font sizes they
%produce nearly just the same {\tt *.mf} files as the ones used
%by the original {\sl Computer Modern} typefaces. Although the latest
%version of {\sc sauter} is dated 1992, and in 1995 the parameters
%of {\sl Computer Modern} fonts were again slightly changed,
%it seems still to be the reliable source of the fonts with
%intermediate design sizes.
%
%The other approximation is realized in {\sc dc} and {\sc tc}
%fonts by by J\"org Knappen and Norbert Schwarz \cite{DC}.
%It is based on cubic splines --- Lagrange cubic splines or
%canonical cubic splines --- using the parameters of
%{\sl Computer Modern} typefaces as the base points.
%Although generally piecewise-cubic functions produce
%good quality approximations, it is not so with the data extracted
%from {\sl Computer Modern} \MF{} files. The plots of its parameters
%with respect to the design size are ``noisy'' functions with some
%abrupt jumps since these parameters were selected
%manually to optimize the font shape, not the mathematical plots.
%As a result the cubic smooth approximations obey parasilic local
%minima and maxima and do not work far outside the range of
%design sizes used as the base data points. The {\sc dc} and {\sc tc}
%fonts with intermediate font sizes are visually good even with
%this ``mathematical'' defects but it was more advantageous
%to impliment piecewise-linear approximation instead of
%piesewise-cubic one.
%
%The first version of {\sc mff.sty} was based on piecewise-linear and
%piecewise-cubic (Lagrange splines) functions using {\sl Computer Modern}
%typefaces as the reference data. To eliminate the parasitic local
%minima and maxima some data points were slightly changed, and new
%data points were added to guarantee a good behavour of the approximating
%expressions outside the range {\tt 5pt} -- {\tt 17.28pt}. The current
%version of {\sc mff.sty} is based on {\sc sauter}-type approximation
%with some modifications (especially for {\tt cmff} and {\tt cmfib} fonts)
%and on the piecewise-linear approximations based on {\sc dc} data.
%The variated {\sl Computer Modern} data used in the previous versions
%became obsolete and is discarded now since it is not a good idea
%to modify voluntary the original {\sc Computer Modern} parameters.
\section{Modifications of font parameters\label{CORRECT}}
You can use the weighted mixture of font ingredients using the commands
{\tt\bs{}setMFF}, {\tt\bs{}mixMFF} and {\tt\bs{}MFFmixture} described
above, but you can also vary ``by hand'' the font parameters
which control the essential details of the character shape.
%The commands described in this section enable to do:
%\begin{itemize}
%\item scale the {\em width} of the character;
%\item scale the {\em height} of the character;
%\item scale the length of ascenders and descenders;
%\item scale the height of digits and the middle line for
% mathematical symbols;
%\item scale the thickness of {\em thin strokes}
% and {\em thick strokes};
%\item correct the {\em contrast} of the character;
%\item specify the tilt ratio $(\Delta x/\Delta y)$
% for {\sl slanted} fonts;
%\item scale (or set to some value) some specific parameters
% which are responcible for fine character tuning;
%\item specify the logical flags which control the ligatures,
% character serifs, etc.
%\end{itemize}
\subsection{Variations of the height\label{HEIGHT}}
The following commands enable to vary the height of the vertical
elements of the characters:
\begin{description}
\item[\quad{\tt \bs{}MFFscaleHeight\{{\em factor}\}}] --- scale proportionally
the height and the depth of the characters;
\item[\quad{\tt \bs{}MFFscaleAsc\{{\em factor}\}}] --- scale
the height of the capital characters, brackets, digits, etc.,
and the ascenders of the characters like `b', `h';
\item[\quad{\tt \bs{}MFFscaleDesc\{{\em factor}\}}] --- scale
the depth of comma and the descenders of the characters
like `Q', `y';
\item[\quad{\tt \bs{}MFFscaleMath\{{\em factor}\}}] --- scale
the height of digits and the height of
the horizontal bar (the middle line) for mathematical symbols
like $=$, $+$, $-$.
\end{description}
If several height factors are specified, their effect is combined.
The curious font {\tt cmdunh10} can be reproduced {\em exactly}
by proper specification of all these factors.
Example:
\begin{eqnarray*}
&&\hbox{\tt \bs{}MFFscaleAsc\{1.5\}}\\
&&\hbox{\tt \bs{}MFFscaleDesc\{1.2\}}
\end{eqnarray*}
\subsection{Variations of the width\label{WIDTH}}
The {\em width} of CMR font can be variated by mixturing
with the $\overline{\hbox{CMX}}$ font. It increases the character width
and also performs some fine tuning of other font parameters.
Due to this reason the mixturing with
$\overline{\hbox{CMX}}$ can be advantageous to variate
the width of characters if you deal with CMR family.
From the other side, for CMTT fonts or CMSS fonts the
mixturing with $\overline{\hbox{CMX}}$ results also
to some variation of the character shapes which can be
an undesirable effect.
The User can specify the explicit width multiplication
which means that the font parameters which define the width
of the characters are multiplied by some factor:
\begin{itemize}
\item[]{\tt \bs{}MFFscaleWidth\{{\em factor}\}}
\end{itemize}
After this command the font parameters
\begin{itemize}
\item[]\begin{flushleft}
{\tt u\#}, {\tt serif\_fit\#}, {\tt cap\_serif\_fit\#},
{\tt jut\#}, {\tt cap\_jut\#}
\end{flushleft}\end{itemize}
are scaled proportionally to {\em factor}.
The values $\hbox{\em factor}>1.0$ correspond to expansion,
the values $0<\hbox{\em factor}<1.0$ --- to compression of the
characters. The command {\tt \bs{}MFFscaleWidth\{1.0\}}
restores the default width.
\subsection{Variations of the weight\label{WEIGHT}}
The {\em weight}, i.e., the ``boldness'' of the characters can be
controlled by muxturing with $\overline{\hbox{CMB}}$.
Similarly to {\em width} correction described in the previous section,
for such fonts as CMTT or CMSS it is accompanied
by some undesirable changes in the character shapes.
The following commands control explicitly
the {\em weight} and the {\em contrast} of the characters:
\begin{description}
\item[\quad{\tt \bs{}MFFscaleBoldLines\{{\em coef}$_1$\}}]
--- scale the thickness of {\em thick} strokes by {\em coef}$_1$;
\item[\quad{\tt \bs{}MFFscaleThinLines\{{\em coef}$_2$\}}]
--- scale the thickness of {\em thin} strokes by {\em coef}$_2$.
\end{description}
The coefficient {\em coef}$_1$ scales the values of the font parameters
\begin{itemize}
\item[]\begin{flushleft}
{\tt stem\#}, {\tt curve\#}, {\tt ess\#}, {\tt flare\#}, {\tt dot\_size\#},
{\tt cap\_stem\#}, {\tt cap\_curve\#}, {\tt cap\_ess\#},
{\tt bar\#}, {\tt slab\#}, {\tt cap\_bar\#}, {\tt cap\_band\#},
{\tt thin\_join\#}.
\end{flushleft}\end{itemize}
The coefficient {\em coef}$_2$ scales the values of font parameters
\begin{itemize}
\item[]\begin{flushleft}
{\tt hair\#}, {\tt vair\#}, {\tt cap\_hair\#},
{\tt rule\_thickness\#}, {\tt notch\_cut\#}, {\tt cap\_notch\_cut\#}.
\end{flushleft}\end{itemize}
Multiplication by {\em coef}$_1$ and {\em coef}$_2$ increases
the font contrast in $\hbox{\em coef}_1/\hbox{\em coef}_2$ times.
The contrast can be specified explicitly using the commands
\begin{itemize}
\item[]{\tt \bs{}MFFcontrast[{\em type}]}\qquad or \qquad
{\tt \bs{}MFFcontrast\{{\em value}\}}
\end{itemize}
which defines the parameter {\em value} equal to the ratio
of the thickness of {\em thin strokes} to the thickness of
{\em thick strokes}. The commands work as:
\begin{eqnarray*}
&&\hbox{{\tt\bs{}MFFcontrast[s]} --- no correction of the contrast;}\\
&&\hbox{{\tt\bs{}MFFcontrast[n]} --- no contrast at all ({\em value}=1);}\\
&&\hbox{{\tt\bs{}MFFcontrast[d]} --- 50\% contrast ({\em value}=0.5);}\\
&&\hbox{{\tt\bs{}MFFcontrast\{{\em value}\}}
--- the {\em value} is specified explitly.}
\end{eqnarray*}
If the correction of the contrast is active
(no command {\tt\bs{}MFFcontrast[s]}),
all thick element of lowercase characters are equal to {\tt stem\#},
all thick element of uppercase characters are equal to {\tt cap\_stem\#},
all thin elements have the thickness of {\tt stem\#} or {\tt cap\_stem\#}
multiplied by {\em value}, the values {\tt stem\#} and {\tt cap\_stem\#}
are multiplied by $\hbox{\em coef}_1$,
the value $\hbox{\em coef}_2$ is ignored.
\subsection{Miscellaneous variations\label{MISC}}
The following scaling factors can help to perform fine tuning
of the characters (see \cite{CM} for more details):
\begin{description}
\item[\quad{\tt \bs{}MFFscaleJoinLines\{{\em factor}\}}]
--- variable {\tt thin\_join\#} is multiplied by {\em factor}
(this variable is responcible
for fine connection between thin and thick lines in `h', `m', `n');
\item[\quad{\tt \bs{}MFFscaleNotchCut\{{\em factor}\}}] ---
variables {\tt notch\_cut\#} and {\tt cap\_notch\_cut\#} are
multiplied by {\em factor} (these variables
are responcible for sharp corners in letters `A', `V', `w');
\item[\quad{\tt \bs{}MFFscaleDotSize\{{\em factor}\}}] ---
variables {\tt dot\_size\#} and {\tt flare\#} are multiplied
by {\em factor} (these variables
are responcible for dots in `i', `:' and bulbs in `a', `c');
\item[\quad{\tt \bs{}MFFscaleSerifDish\{{\em factor}\}}] ---
variable {\tt dish\#} is multiplied by {\em factor} (this
variable defines the curved shape of the serif platform).
\end{description}
Since these parameters perform fine tuning of the character shape,
it can be desirable to assign the specific value to some of them
instead of scaling the default value.
This operation requires the ``expert level macros''
described in section~\ref{EXPERT}.
For example, to assign a very big number to the variables
{\tt notch\_cut\#} and {\tt cap\_notch\_cut\#}
which control the sharpness of the corners in letters `A', `V', `w',
etc.\footnote{This operation is necessary to produce high-quality
outlined characters using {\em font tricks} commands described
in section~\ref{TRICKS} (see \cite{Outline} for more
details).}, the following commands can be used:
\begin{itemize}
\item[]
{\tt\bs{}MFFcatcode}\\
{\tt \bs{}def\bs{}MFF@assign@notch\_cut\{\bs{}@tempdimb=16383pt\}}\\
{\tt \bs{}def\bs{}MFF@assign@cap\_notch\_cut\{\bs{}@tempdimb=16383pt\}}\\
{\tt\bs{}noMFFcatcode}
\end{itemize}
To return the rule of calculation for these parameters
to the default state, the commands
\begin{itemize}
\item[]
{\tt\bs{}MFFcatcode}\\
{\tt \bs{}def\bs{}MFF@assign@notch\_cut\{\}}\\
{\tt \bs{}def\bs{}MFF@assign@cap\_notch\_cut\{\}}\\
{\tt\bs{}noMFFcatcode}
\end{itemize}
should be used.
\subsection{Slanted characters\label{SLANT}}
The inclination of the characters is defined by the
variable {\tt slant\#} which is specified explicitly
by the commands:
\begin{itemize}
\item[]{\tt \bs{}MFFslant\{{\em parm}\}} --- set {\em slant} as a fraction;
\item[]{\tt \bs{}MFFslantD\{{\em parm}\}} --- set {\em slant} as an angle
specified in degrees.
\end{itemize}
For example, {\em slant} typical for CMSL is specified
as {\tt \bs{}MFFslant\{1/6\}}, and {\em slant} typical for
CMSSI is specified as {\tt \bs{}MFFslantD\{12\}} which is
just the same as {\tt \bs{}MFFslant\{sind(12)/cosd(12)\}}.
The arguments of the commands {\tt\bs{}MFFslant} and {\tt\bs{}MFFslantD}
are interpreted as the text strings directly transferred to
{\tt .mf} files, not as the numerical values.
\subsection{Logical flags\label{FLAGS}}
The logical switches usually specified at the end of {\tt *.mf}
file can be controlled by the following commands
({\sl char}={\tt n} means {\em false}, {\sl char}={\tt y} means {\em true}):
\begin{description}
\item[\quad{\tt \bs{}MFFflagSquareDots\{{\sl char}\}}] --- set logical variable
{\tt square\_dots} (should dots be square?);
\item[\quad{\tt \bs{}MFFflagHefty\{{\sl char}\}}] --- set logical variable
{\tt hefty} (should we try hard not to be overweight?);
\item[\quad{\tt \bs{}MFFflagSerifs\{{\sl char}\}}] --- set logical variable
{\tt serifs} (should bulbs and se\-rifs be attached?);
\item[\quad{\tt \bs{}MFFflagMonospace\{{\sl char}\}}] --- set logical variable
{\tt monospace} (are all characters of the same width?);
\item[\quad{\tt \bs{}MFFflagVariantG\{{\sl char}\}}] --- set logical variable
{\tt variant\_g} (should an italic-style g be used?);
\item[\quad{\tt \bs{}MFFflagLowAsterisk\{{\sl char}\}}] --- set logical variable
{\tt low\_asterisk} (should the asterisk be centered at the axis?);
\item[\quad{\tt \bs{}MFFflagMathSpacing\{{\sl char}\}}] --- set logical variable
{\tt math\_fitting} (should math-mode spacing be used?).
\end{description}
The level of ligature and kerning data is specified by the command:
\begin{description}
\item[\quad{\tt \bs{}MFFflagLigs\{{\em type}\}}] where {\em type} is
{\tt 0}, {\tt 1}, {\tt 2}, {\tt s} or {\tt n} --- set ligature level:
{\tt 0}, {\tt 1}, {\tt 2} correspond to the value of the variable {\tt ligs},
{\tt n} is equivalent to {\tt 0}, {\tt s} set ligature level like
in CMR fonts (it is {\tt 1} if font design size is less than {\tt 6pt},
and {\tt 2} otherwise).
\end{description}
\subsection{Expert level macros\label{EXPERT}}
It is possible to change manually each font variable
if the default value calculated by {\sc mff.sty} is
not satisfactory. To perform such operation it is necessary
to specify the macro with the name
\begin{itemize}
\item[] {\tt \bs{}MFF@assign@{\em varname}}
\end{itemize}
which redefine the value of the register \verb?\@tempdimb?.
On input the register \verb?\@tempdimb?
is equal to automatically calculated value for that parameter,
and the register \verb?\@tempdima? is equal to the font design size.
On output the register \verb?\@tempdimb? should contain
the new value for the font parameter.
When the macro {\tt\bs{}MFF@assign@{\em varname}} is executed,
the correction procedure described in section~\ref{CORR}
is performed.
For example, the following macro
\begin{itemize}
\item[] {\tt \bs{}def\bs{}MFF@assign@x\_height\{\bs{}@tempdimb=3\bs{}@tempdimb\}}
\end{itemize}
scales by 3 the font variable {\tt x\_height\#}, and the macro
\begin{itemize}
\item[] {\tt \bs{}def\bs{}MFF@assign@crisp\{\bs{}@tempdimb=0pt\}}
\end{itemize}
assigns zero value to the font variable {\tt crisp\#}.
To delete this user-specified transformation it is
necessary to use the explicit dummy definition
\begin{itemize}
\item[] {\tt \bs{}def\bs{}MFF@assign@x\_height\{\}}\\
{\tt \bs{}def\bs{}MFF@assign@crisp\{\}}
\end{itemize}
The characters `{\tt \_}' and `{\tt @}' should have the status
{\em letters} to type such macro definition. The command
{\tt\bs{}MFFcatcode} assigns the status {\em letters} to
`{\tt \_}' and `{\tt @}', and the command {\tt\bs{}noMFFcatcode}
returns the previous status for these characters.
These commands work correctly even inside {\tt .sty} files where
the character `{\tt @}' have the status {\em letter} before \LaTeX{}
starts to process the style file, and should conserve this status
when \LaTeX{} finishes to process the style file.
Since the command {\tt\bs{}noMFFcatcode} returns {\em the previous}
status to `{\tt \_}' and `{\tt @}' (that is, the catcode which
they have during the last command {\tt\bs{}MFFcatcode}), two subsequent
commands {\tt\bs{}MFFcatcode} without intermediate{\tt\bs{}noMFFcatcode}
produce an error: the status of `{\tt \_}' and `{\tt @}' will be
{\em letters} even after the command {\tt\bs{}noMFFcatcode}.
To assign the status {\em other characters} to `{\tt \_}' and `{\tt @}'
unconditionally, the command {\tt\bs{}otherMFFcatcode} can be used.
\bigskip
The only operation that should be performed inside
{\tt\bs{}MFF@assign@{\em varname}} is the re-definition of
{\tt\bs{}@tempdimb}. No {\tt\bs{}@tempdima} nor other
internal variables can be changed although the contents of
{\tt\bs{}@tempdima} and the initial value of {\tt\bs{}@tempdimb}
can be used to calculate the output value. The exception are
the dimensional registers
{\tt\bs{}MFF@dimenA}, {\tt\bs{}MFF@dimenB},
{\tt\bs{}MFF@dimenC}, {\tt\bs{}MFF@dimenD}
which can be used for intermediate calculations.
Also, it is necessary to take into account that:
\begin{itemize}
\item the value of all dimensional {\tt .mf} variables except
\begin{itemize}\item[]
{\tt notch\_cut\#}, {\tt cap\_notch\_cut\#},
{\tt rule\_thickness\#}
\end{itemize}
is divided by 36 when printed to the header file;
\item the values of the variables
\begin{itemize}\item[]
{\tt notch\_cut\#}, {\tt cap\_notch\_cut\#},
{\tt rule\_thickness\#}
\end{itemize}
are divided by 100 when printed to the header file;
\item the values of non-dimensional variables
\begin{itemize}
\item[]\begin{flushleft}
{\tt fudge}, {\tt math\_spread},
{\tt superness}, {\tt superpull},
{\tt beak\_darkness}
\end{flushleft}\end{itemize}
are printed to the header file `as it is' but it is to be
specified in {\tt pt} --- say, to assign
the value 0.5 to the variable {\tt fudge},
the command
\begin{itemize}
\item[] {\tt \bs{}def\bs{}MFF@assign@fudge\{\bs{}@tempdimb=0.5pt\}}
\end{itemize}
should be used;
\item the value of the font parameter {\tt slant} is
set directly by the commands {\tt \bs{}MFFslant}
and {\tt \bs{}MFFslantD} and cannot be specified
using the command {\tt\bs{}MFF@assign@slant};
\item the value of {\tt font\_size} is defined by the parameter
{\em fntsize} of the command {\tt\bs{}MFFgener}
(see section~\ref{GENER}) and cannot be changed
after it.
\end{itemize}
\section{Automatic control of font parameters\label{CORR}}
The \MF{} programs which describe the {\sl Computer Modern} typefaces
assume that the following mutial relations between font parameters
are fulfilled (see \cite{CM} for more details):
\begin{itemize}
\item $0.5\cdot${\tt x\_height} $\le$ {\tt bar\_height}
$\le 0.55\cdot${\tt x\_height}
\item $\displaystyle\begin{array}[t]{rcl}
\hbox{\tt asc\_height} &\ge& 1.2\cdot\hbox{\tt x\_height}\\
\hbox{\tt curve} &\ge& \hbox{\tt stem}\\
\hbox{\tt cap\_stem} &\ge& \hbox{\tt stem}\\
\hbox{\tt cap\_curve} &\ge& \hbox{\tt curve}
\end{array}$
\item
each of the variables
\begin{itemize}
\item[] \begin{flushleft}
{\tt thin\_join}, {\tt hair}, {\tt vair}, {\tt stem}, {\tt curve},
{\tt ess}, {\tt flare}, {\tt dot\_size}, {\tt bar}, {\tt slab},
{\tt cap\_hair}, {\tt cap\_stem}, {\tt cap\_curve},
{\tt cap\_ess}, {\tt cap\_bar}, {\tt cap\_band}
\end{flushleft}
\end{itemize}
are no less than {\tt crisp}, {\tt tiny} and {\tt fine};
\item
the variables {\tt stem\_corr} and {\tt vair\_corr}
are no greater than
$\frac{1}{5}$ {\tt cap\_hair},
$\frac{1}{6}$ {\tt stem},
$\frac{1}{4}$ {\tt fudge}$\times${\tt stem}
and $\frac{1}{12}$ {\tt curve};
\item
the variable {\tt vair\_corr} is no greater than
$\frac{1}{4}\hbox{\tt slab}$;
\item
the variable {\tt stem\_corr} is no greater than
$\frac{1}{16}\hbox{\tt fudge}\times\hbox{\tt hair}$.
\end{itemize}
Although even the canonical header files sometimes
violate these conditions,
it is more safe if the font parameters calculated by {\sc mff.sty}
satisfy these relations (especially if the {\sl Computer Modern}
driver files {\tt roman.mf}, {\tt textit.mf}, {\tt csc.mf} are used).
From the other side, several interesting effects can be achieved only
when these relations are violated (provided that the {\tt .mf} file
is still processed by \MF{} without errors).
The automatical correction is switched {\em on} and {\em off}
by the commands:
\begin{description}
\item[\quad{\tt\bs{}MFFcheck}] --- the conditions described above
are checked and the variable values are corrected if necessary;
\item[\quad{\tt\bs{}MFFnocheck}] --- the automatical checking
and correction of the font parameters is switched off although
the condition that some critical parameters
are not negative, is still checked and corrected, if necessary.
\end{description}
\section{Font classes\label{CLASS}}
The NFSS/\LaTeX$2_{\varepsilon}$ classifies \TeX{} font
families in a way which is different from the logical structure
of {\tt .mf} files for {\sl Computer Modern} typefaces.
That is, the {\em italic} and {\sc small caps}
are at the same family {\cmcmr roman} together with
{\cmcmbx bold} and {\cmcmsl slanted} fonts, although they are produced
by different driver files. Similarly, {\cmcmr roman},
{\cmcmtt typewriter}, {\cmcmss sans serif}, {\cmdunh dunhill},
{\cmquote quotation} and {\cmfunny funny} fonts are considered
as different font families
although they are produced by the same driver file {\tt roman.mf}
(but with different font parameters).
As soon as we deal with {\sc mff.sty} there is no sharp boundary
between {\cmcmr roman}, {\cmcmbx bold}, {\cmcmsl slanted},
{\cmcmtt typewriter}, {\cmcmss sans serif}, {\cmfunny funny} and
{\cmdunh dunhill} fonts --- each font is smoothly
converted to another one, while {\em italic} and {\sc small caps}
fonts are quite different --- they use different driver files.
The macros {\sc mff.sty} assign different {\em classes} to these fonts
to distinguish such difference from {\em font families}
used in NFSS. The following font classes can be specified now:
\begin{description}
\item[\quad CMR] --- Computer Modern Roman;
\item[\quad CMTI] --- Computer Modern Text Italic;
\item[\quad CMCSC] --- Computer Modern Small Caps;
\item[\quad DCR] --- European Computer Modern Roman;
\item[\quad DCTI] --- European Computer Modern Text Italic;
\item[\quad DCCSC] --- European Computer Modern Small Caps;
\item[\quad CMRZ] --- {\sl CMZ} Computer Modern Roman/Cyrillic
created by Nana Glonti and Alexander Samarin;
\item[\quad CMRIZ] --- {\sl CMZ} Computer Modern Text Italic/Cyrillic;
\item[\quad CMCCSC] --- {\sl CMZ} Computer Modern Small Caps/Cyrillic;
\item[\quad LHR] --- {\sl LH} Computer Modern Roman/Cyrillic
created by Olga Lapko and Alexey Khodulev;
\item[\quad LHTI] --- {\sl LH} Computer Modern Text Italic/Cyrillic;
\item[\quad LHCSC] --- {\sl LH} Computer Modern Small Caps/Cyrillic.
\item[\quad LLR] --- {\sl LL} Computer Modern Roman/Cyrillic
created by Olga Lapko and Alexey Khodulev
(cyrillic part only);
\item[\quad LLTI] --- {\sl LL} Computer Modern Text Italic/Cyrillic;
\item[\quad LLCSC] --- {\sl LL} Computer Modern Small Caps/Cyrillic.
\end{description}
The font class is specified by the command
\begin{itemize}
\item[]{\tt \bs{}MFFclass\{{\em class}\}}
\end{itemize}
For example the command {\tt \bs{}MFFclass\{CMR\}}
activates {\sl Computer Modern Roman} fonts
(that is, the font header file will use the driver file
{\tt roman.mf}).
The set of font classes
can be extended easily as soon as there is a font based
on the same set of parameters as {\sl Computer Modern} fonts.
The only thing to do is to specify the macro which writes the
{\tt font\_identifier} value and the operator {\tt generate}
with corresponding name of the driver file (see {\sc mff.sty}
for the examples).
\section{Special Effects\label{TRICKS}}
To make more fun some special effects described in \cite{ABC,Outline}
can be included in your font. If you specify some {\em font trick}
declaration, the special portion of \MF{} code is inserted in the
header file which modifies the characters generated by
original \MF{} subroutines.
The {\em font trick} declarations can specify
\begin{itemize}
\item pattern for the main body of the character;
\item pattern for the rectangular box (background) of the character;
\item pattern for the character shadow (if present);
\item pattern for the underlining of the character (if present)
[this feature will be realized in future versions];
\item additional transformations (reflections, rotations, etc.)
of the characters.
\end{itemize}
The command {\tt \bs{}MFFtrick} which specifies these attributes
has the format:
\begin{itemize}
\item[] {\tt \bs{}MFFtrick\{{\em char-style}\}\{{\em box-style}\}%
\{{\em shadow-style}\}\{{\em underline}\}\{{\em transform}\}}
\end{itemize}
where the parameter {\em underline} is reserved for future
improvements and means nothing in the current version.
The following letters can be used to specify the
{\em char-style}, {\em box-style} and {\em shadow-style}:
\begin{eqnarray*}
&&\hbox{{\tt z} --- no such element or solid white pattern;}\\
&&\hbox{{\tt b} --- solid black pattern;}\\
&&\hbox{{\tt h} --- horizontal stripes;}\\
&&\hbox{{\tt v} --- vertical stripes;}\\
&&\hbox{{\tt r} --- slanted stripes {\tt /};}\\
&&\hbox{{\tt l} --- slanted stripes {\tt \bs};}\\
&&\hbox{{\tt g} --- rectangular grid (`{\tt h}'$+$`{\tt v}');}\\
&&\hbox{{\tt s} --- slanted grid (`{\tt r}'$+$`{\tt l}');}\\
&&\hbox{{\tt d} --- dotted grid.}
\end{eqnarray*}
The capital letters {\tt Z}, {\tt B}, {\tt H}, {\tt V}, {\tt R},
{\tt L}, {\tt G}, {\tt S}, {\tt D}
mean that the outline of the element contour
is added to the filling pattern.
The specifications {\tt b} and {\tt B}
are equivalent since the outlined contour is undistinguishable
over the solid black pattern.
For example, the outlined main character
with a white body, white box background and
outlined shadow filled with dotted grid is specified by the command
{\tt \bs{}MFFtrick\{Z\}\{z\}\{D\}\{\}}.
The parameter {\em transform} specifies the transformation
of the character\footnote{Several transformations can be used
--- in this case the individual letters are separated by commas
like in {\tt\{rr,sx,ro\}}.}:
\begin{eqnarray*}
&&\hbox{{\tt rr} --- rotation $-90^{\circ}$;}\\
&&\hbox{{\tt rl} --- rotation $+90^{\circ}$;}\\
&&\hbox{{\tt ro} --- rotation $180^{\circ}$;}\\
&&\hbox{{\tt sx} --- symmetry $x \longrightarrow -x$;}\\
&&\hbox{{\tt sy} --- symmetry $y \longrightarrow -y$;}\\
&&\hbox{{\tt sz} --- symmetry $(x,y) \longrightarrow (y,x)$,}\\
&&\hbox{{\tt st} --- symmetry $(x,y) \longrightarrow (-y,-x)$.}
\end{eqnarray*}
The font trick effects specified by the command {\tt\bs{}MFFtrick}
are used immediately by the subsequent commands {\tt\bs{}MFFgener}.
The following commands switch {\em on} and {\em of}
the font trick effects provided that the font trick
parameters are already established:
\begin{itemize}
\item[] {\tt \bs{}MFFfonttricks} --- activates
the font trick declarations;
\item[] {\tt \bs{}MFFnotricks} --- deactivates
the font trick declarations.
\end{itemize}
The following commands can be used to specify the individual
font trick elements (these declarations are used by the subsequent
commands {\tt\bs{}MFFgener} only after the explicit
command {\tt\bs{}MFFfonttricks} or if they are specified after the
command {\tt\bs{}MFFtrick}):
\begin{description}
\item[\quad{\tt\bs{}trickMFFchar\{{\em char-style}\}}] --- the pattern style
for filling of the body of the character (``{\tt z}'' means white body);
\item[\quad{\tt\bs{}trickMFFbox\{{\em box-style}\}}] --- the pattern style
for filling of the background box (``{\tt z}'' means empty background);
\item[\quad{\tt\bs{}trickMFFshadow\{{\em shadow-style}\}}] --- the pattern style
for filling of the character shadow (``{\tt z}'' means no shadow);
\item[\quad{\tt\bs{}trickMFFtransform\{{\em transform}\}}]
--- the additional transformation of the character.
\end{description}
Some typical font trick effects can be specified using the
command
\begin{itemize}
\item[] {\tt\bs{}MFFstdtrick\{{\em trick-name}\}}
\end{itemize}
where the following {\em trick-name} identifiers can be used:
\begin{description}
\item[\quad{\tt standard}] --- no font tricks
(={\tt\bs{}MFFtrick\{b\}\{z\}\{z\}\{\}});
\item[\quad{\tt reversed}] --- {\em reversed} characters:
white letters over black rectangle;
\item[\quad{\tt dotted}] --- characters with a body filled with dots;
\item[\quad{\tt striped}] --- characters with a body filled with
rectangular grid;
\item[\quad{\tt stripedH}] --- characters with a body filled with
horizontal stripes;
\item[\quad{\tt stripedV}] --- characters with a body filled with
vertical stripes;
\item[\quad{\tt slanted}] --- characters with a body filled with
slanted rectangular grid;
\item[\quad{\tt slantedL}] --- characters with a body filled with
slanted stripes ``{\tt\bs}'';
\item[\quad{\tt slantedR}] --- characters with a body filled with
slanted stripes ``{\tt/}'';
\item[\quad{\tt outlined}] --- outlined white characters;
\item[\quad{\tt shadowed}] --- outlined white characters
with solid shadows;
\item[\quad{\tt sHadowed}] --- outlined white characters
with outlined white shadows;
\item[\quad{\tt shadowonly}] ---
only the solid shadow of the character is still present.
\end{description}
The parameters of the {\em font trick} effects are controlled
by the commands:
\begin{itemize}
\item outline contour parameters:
\begin{description}
\item[\quad{\tt \bs{}stepMFFoutline\{{\em value}\}}] ---
the thickness of the outline contour.
\end{description}
\item shadow parameters:
\begin{description}
\item[\quad{\tt \bs{}stepMFFshadow\{{\em value}\}}] ---
the step of the shadow shift;
\item[\quad{\tt \bs{}cornerMFFshadow\{{\em char}\}}] ---
the corner of the shadow:
\begin{itemize}
\item[]{\tt A} --- right/down corner;\\
{\tt B} --- right/upper corner;\\
{\tt C} --- left/upper corner;\\
{\tt D} --- left/down corner.
\end{itemize}
\end{description}
\item the parameters for the patterns which are used
for the main body of the character:
\begin{description}
\item[\quad{\tt \bs{}stepMFFcharpattern\{{\em value}\}}] ---
the step between lines and dots;
\item[\quad{\tt \bs{}penMFFcharpattern\{{\em value}\}}] ---
the thickness of lines and dots.
\end{description}
\item the parameters for the patterns which are used
for the background of the character:
\begin{description}
\item[\quad{\tt \bs{}stepMFFboxpattern\{{\em value}\}}] ---
the step between lines and dots;
\item[\quad{\tt \bs{}penMFFboxpattern\{{\em value}\}}] ---
the thickness of lines and dots.
\end{description}
\item the parameters for the patterns which are used
for the character shadow:
\begin{description}
\item[\quad{\tt \bs{}stepMFFshadowpattern\{{\em value}\}}] ---
the step between lines and dots;
\item[\quad{\tt \bs{}penMFFshadowpattern\{{\em value}\}}] ---
the thickness of lines and dots.
\end{description}
\end{itemize}
The values of the thickness/step size for the
striped, slanted and dotted patterns
are specified using the non-dimensional {\em value}
which is the factor applied to the (dimensional)
font parameter {\tt hair\#}. For example,
the command {\tt\bs{}stepMFFboxpattern\{0.5\}}
specifies that the step size between horizontal,
vertical or slanted lines used to
construct the pattern for the background
is equal to $0.5\times${\tt hair\#}.
\section{Default state}
The default values for {\em all} parameters used by {\sc mff.sty}
are assigned by the command {\tt \bs{}MFFdefault} which
is defined as
\begin{itemize}
\item[]\small
\begin{verbatim}
\def\MFFdefault{
%
\MFFcontrast[s]
\MFFscaleBoldLines{1} \MFFscaleThinLines{1}
\MFFscaleWidth{1} \MFFscaleHeight{1}
\MFFscaleAscend{1} \MFFscaleDescend{1} \MFFscaleMath{1}
\MFFscaleJoinLines{1} \MFFscaleNotchCut{1}
\MFFscaleDotSize{1} \MFFscaleSerifDish{1}
%
\MFFslant{0}
\MFFflagLigs{s} \MFFflagMonospace{n}
\MFFflagSquareDots{n} \MFFflagHefty{n}
\MFFflagSerifs{y} \MFFflagVariantG{n}
\MFFflagLowAsterisk{n} \MFFflagMathSpacing{n}
%
\stepMFFoutline{0.075}
\stepMFFshadow{0.5}
\cornerMFFshadow{A}
\stepMFFbackpattern{0.375} \penMFFbackpattern{0.075}
\stepMFFcharpattern{0.375} \penMFFcharpattern{0.075}
\stepMFFshadowpattern{0.375} \penMFFshadowpattern{0.075}
%
\MFFstdtrick{standard}
\MFFnotricks
%
\MFFsauter
\MFFclass{CMR}
\MFFmixture{0}{0}{0}{0}{0}{0}{0}
\MFFnocheck
}
\end{verbatim}
\end{itemize}
It can be called at any moment to initialize
from the very beginning the {\sc mff.sty} parameters.
\section{Configuration of {\sf em\TeX} programs\label{CONFIG}}
The way you should setup \TeX\ and \MF\ to work with {\sc mff.sty}
correctly depends on your local system.
The most difficult (and system-dependent) aspect is how to teach
\MF{} to generate the {\tt *.pk}-files according to
your printer specification, and how to teach \TeX\ and
{\sl DVI}-drivers to find \MF's output files.
For {\sl MS DOS} and {\sl OS/2} and for {\sf em\TeX}
package this problem can be solved using the utility {\sl MFJob}
as it is described below.
The configuration used here assumes that the {\tt .mf} files
and {\tt .tfm} files are placed at the working directory, and
the {\tt .pk} files are placed in its subdirectories with the names
corresponding to font resolution. The {\tt .mf} files created
by {\sc mff.sty} are placed at the current directory automatically.
The {\tt .tfm} and {\tt .pk} files are placed at the proper directories
by the utility {\sl MFJob} if it uses the following script file:
\begin{verbatim}
%
% file mff.mfj / script for MFPiC and MFF.STY
%
input [modes];
def s=[s0];
{
base=plain;
fonts=f; mags=s; m;
output=pk[.\@Rrdpi\@f] tfm[@f] log[@f];
}
\end{verbatim}
The script file named {\tt mff.mfj} should be placed at the directory
{\tt\bs{}EMTEX\bs{}MFJOB\bs}.
To process the {\tt .mf} file by \MF{} and to generate the output font
for the desired printer with desired magnification it is necessary
to use the command
\begin{itemize}
\item[]\tt mfjob /a mff.mfj m=$<${\em printer-mode}$>$
s=$<${\em magn}$>$
f=$<${\em fontname}$>$
\end{itemize}
(option {\tt /a} forces the program to generate the output font even if
it was already generated). The program {\sl MFJob} put {\tt .tfm}
and {.log} files at the current directory, and {\tt .pk} file at
the subdirectory with the name which mirrors the font resolution.
Example:
\begin{itemize}
\item[]\tt mfjob /a mff.mfj m=lj s=1 f=zcmr10
\end{itemize}
To teach {\sf em\TeX} to look for {\tt .tfm} files at the current
directory as well as at the system directories, it is necessary
to specify the DOS environment variable {\tt TEXTFM} as
\begin{itemize}
\item[]\tt SET TEXTFM=\%EMTEXDIR\%\bs{}TFM!;.\bs
\end{itemize}
instead of its default value {\tt \%EMTEXDIR\%\bs{}TFM!}
(it is assumed that {\tt EMTEXDIR}
is specified already like {\tt SET EMTEXDIR=C:\bs{}EMTEX}).
To teach {\sl DVI}-drivers to look for {\tt .pk}
files at the subdirectories of the current directory,
it is necessary to edit the printer configuration files
placed by {\sf em\TeX} at {\tt\bs{}EMTEX\bs{}DATA\bs}.
Suppose you use the {\sl HP Laser Jet} printer (the modifications
of the configuration files for other printers are performed similarly).
The original {\sl Laser Jet} configuration file {\tt lj.cnf}
looks like
\begin{verbatim}
% lj.cnf (300x300 DPI using LJ fonts)
+dvi-file={,$DVIDRVINPUT:}@i
+font-libraries=$DVIDRVFONTS:lj_{base,more}
+font-files=$DVIDRVFONTS:pixel.lj\@Rrdpi\@f{.pk,.pxl}
+graph-files={,$DVIDRVGRAPH:}{@Rrdpi\,}@PBf{@Ef,.msp,.pcx,.bmp}
+resolution=300
+font-resolution=300
+font-scaling=1
+metafont-mode=laserjet
+max-drift=2
\end{verbatim}
The new configuration file (with the file name {\em different}
from {\tt lj.cnf}) should contain the parameter {\tt +font-files}
in a form
\begin{verbatim}
....
+font-files={$DVIDRVFONTS:pixel.lj\,}@Rrdpi\@f{.pk,.pxl}
....
\end{verbatim}
Now it is necessary to substitute the references on this
configuration file in the batch files {\tt v.bat}, {\tt vs.bat}
and {\tt prtlj.bat} from {\tt\bs{}EMTEX\bs{}BIN\bs{}},
and you are ready to work with {\sc mff.sty}.
Just the same re-configuration of {\sf em\TeX} will enable
to work correctly with the {\sl MF\PiC} macro package.
\section{History}
\begin{itemize}
\item Ver. 0.?? --- the first attempt which helped
to learn more about \TeX{} commands and
the internal structure of
{\sl Computer Modern} fonts.
\item Ver. 1.0 --- the arithmetical macros finally works.
The ``empirical'' approximation scheme based
on linear splines and ``corrected-by-hand''
CM parameters is implemented.
The fonts generated by command
{\tt\bs{}MFFmixture} (at that moment it was called
{\tt\bs{}MFFcompose}) are tested experimentally.
\item Ver. 1.1 --- {\sc sauter} approximation scheme is used instead
of the ``empirical'' approximation scheme.
Commands for the logical flags are added.
Font classes other than CMR are included.
Generation of {\sc small caps} and
{\it italic} fonts is added.
As a result new commands are added,
some commands are renamed.
\item Ver. 1.2 --- the font tricks described in \cite{ABC} and \cite{Outline}
are added.
Font classes corresponding to the {\sc DC fonts}
driver files are included.
\item Ver. 1.21a --- the approximation based on {\sc DC fonts} data is added.
Information printed at the header of {\tt .mf} file
becomes more detailed now.
The {\sc mff.sty} commands are revised
and the names of many commands are changed.
This version was distributed during the {\sl TUG-96}
Conference.
\item Ver. 1.21b --- the section ``{\em Last minute corrections}''
is added to this manual. The obligatory prefix
{\em xx} is added now in front of the file name
containing the font header. The list of parameters
for {\tt\bs{}MFFtrick} is changed so that in future
the {\em underlining} effect can be added.
This version is put on CTAN.
\end{itemize}
\section{Last minute corrections\label{MORE}}
The following data is the result of discussioins
held during the {\sl TUG-96} Conference.
Some corrections suggested by the participants
are implemented just now, most of them will be
implemented in future versions:
\begin{itemize}
\item {\em Add special (and obligatory) prefix in front of
the file name so, that the fonts created
by {\sc mff.sty} cannot be confused with the fonts
created by the professional font designers.}
Corrected. Now all the fonts created by {\sc mff.sty} are
started with {\em xx}. This feature is added to lock the
attempts to create user-defined fonts under the names of
the Computer Modern, etc., fonts. The prefix {\em xx}
used by default is defined as
\begin{itemize}
\item[] \tt\bs{}def\bs{}MFFprefix\{xx\}
\end{itemize}
and can be redefined by the User, if necessary.
\item {\em Include {\sl Concrete Fonts} into the set of fonts
used in the arithmetical mixture of Computer Modern
families.}
It is not done, and with great probability it will not be done
at all. The most essential effects associated with
{\em Concrete Font Family} can be produced in {\sc mff.sty}
using the scaling of the thickness for
the thin strokes (see section~\ref{WEIGHT}).
\item {\em Extend {\sc mff.sty} to generate the mathematical fonts as well.}
This is a very interesting and important suggestion,
but it requires a lot of time since it is also necessary
to describe all these fonts as the mathematical ones
inside \TeX. Will be done somedays in future.
\item {\em Extend {\sc mff.sty} to work with {\sl Pandora Font Family}
as well.}
Interesting and promising. It may be done if there
is enough time to look for for {\sl Pandora Font Family}
in more details.
\item {\em Generate the partial fonts, i.e., generate the font where
some (or nearly all) characters from the original MetaFont source
are excluded.}
Interesting and not too difficult using the re-definition
of the procedure {\tt beginchar} by the commands
inside the font header created by {\sc mff.sty}.
Some problems may arize due to {\sl Metafont}
memory problems. Will be done in future.
\item {\em Include some more {\sl font trick} effect, namely the
underlining of the characters so that the underlining stroke
has some gaps near the descender of the character.}
Interesting and not too difficult. Corresponding feature
is reserved now in the list of {\tt\bs{}MFFtrick} parameters
(see section~\ref{TRICKS}).
Will be realized in the nearest future.
\end{itemize}
\section*{Acknowledgements}
This research was partially supported by a grant
from the Dutch Organization for Scientific Research
(NWO grant No 07-30-007).
\begin{thebibliography}{00}
\bibitem{CM} Donald E.\ Knuth. Computer Modern Typefaces
(\CandT{} series). \AW, 1986.
\bibitem{SAUTER} John Sauter. {\em Building Computer Modern fonts}.
\TUB, {\bf 7} (1986), pp. 151--152.
\bibitem{DC} J\"org Knappen. {\em The release 1.2 of the Cork
encoded DC fonts and the text companion symbol fonts}.
Proceedings of the 9th Euro\TeX{} Conference, Arnhem, 1995.
\bibitem{LL} A.Khodulev, I.Mahovaya.
{\em On \TeX{} experience in MIR Publishers}.
Proceedings of the 7th Euro\TeX{} Conference, Prague, 1992.
\bibitem{LH} O.Lapko.
{\em MAKEFONT as a part of CurTUG--Em\TeX{} package}.
Proceedings of the 8th Euro\TeX{} Conference, Gda\'nsk, 1994.
\bibitem{ABC} Georgia K.M. Tobin.
{\em The ABS's of Special Effects}.
TUGBoat {\bf 9} (1988) No 1 pp. 15--18.
\bibitem{Outline} Doug Henderson.
{\em Outline Fonts with Metafont}.
TUGBoat {\bf 10} (1989) No 1 pp. 36--38.
\end{thebibliography}
\end{document}
|