summaryrefslogtreecommitdiff
path: root/fonts/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/latex
Initial commit
Diffstat (limited to 'fonts/latex')
-rw-r--r--fonts/latex/README11
-rw-r--r--fonts/latex/legal.txt25
-rw-r--r--fonts/latex/mf/circle.mf551
-rw-r--r--fonts/latex/mf/icmcsc10.mf115
-rw-r--r--fonts/latex/mf/icmex10.mf89
-rw-r--r--fonts/latex/mf/icmmi8.mf79
-rw-r--r--fonts/latex/mf/icmsy8.mf100
-rw-r--r--fonts/latex/mf/icmtt8.mf80
-rw-r--r--fonts/latex/mf/ilasy8.mf11
-rw-r--r--fonts/latex/mf/ilcmss8.mf82
-rw-r--r--fonts/latex/mf/ilcmssb8.mf82
-rw-r--r--fonts/latex/mf/ilcmssi8.mf82
-rw-r--r--fonts/latex/mf/lasy.mf375
-rw-r--r--fonts/latex/mf/lasy10.mf5
-rw-r--r--fonts/latex/mf/lasy5.mf5
-rw-r--r--fonts/latex/mf/lasy6.mf5
-rw-r--r--fonts/latex/mf/lasy7.mf5
-rw-r--r--fonts/latex/mf/lasy8.mf5
-rw-r--r--fonts/latex/mf/lasy9.mf5
-rw-r--r--fonts/latex/mf/lasyb10.mf5
-rw-r--r--fonts/latex/mf/lcircle10.mf14
-rw-r--r--fonts/latex/mf/lcirclew10.mf13
-rw-r--r--fonts/latex/mf/lcmss8.mf78
-rw-r--r--fonts/latex/mf/lcmssb8.mf78
-rw-r--r--fonts/latex/mf/lcmssi8.mf78
-rw-r--r--fonts/latex/mf/line.mf552
-rw-r--r--fonts/latex/mf/line10.mf18
-rw-r--r--fonts/latex/mf/linew10.mf18
-rw-r--r--fonts/latex/mf/sroman.mf70
-rw-r--r--fonts/latex/mf/sromanu.mf54
-rw-r--r--fonts/latex/tfm/icmcsc10.tfmbin0 -> 1300 bytes
-rw-r--r--fonts/latex/tfm/icmex10.tfmbin0 -> 992 bytes
-rw-r--r--fonts/latex/tfm/icmmi8.tfmbin0 -> 1520 bytes
-rw-r--r--fonts/latex/tfm/icmsy8.tfmbin0 -> 1120 bytes
-rw-r--r--fonts/latex/tfm/icmtt8.tfmbin0 -> 768 bytes
-rw-r--r--fonts/latex/tfm/ilasy8.tfmbin0 -> 520 bytes
-rw-r--r--fonts/latex/tfm/ilcmss8.tfmbin0 -> 1304 bytes
-rw-r--r--fonts/latex/tfm/ilcmssb8.tfmbin0 -> 1316 bytes
-rw-r--r--fonts/latex/tfm/ilcmssi8.tfmbin0 -> 1496 bytes
-rw-r--r--fonts/latex/tfm/lasy10.tfmbin0 -> 520 bytes
-rw-r--r--fonts/latex/tfm/lasy5.tfmbin0 -> 520 bytes
-rw-r--r--fonts/latex/tfm/lasy6.tfmbin0 -> 520 bytes
-rw-r--r--fonts/latex/tfm/lasy7.tfmbin0 -> 520 bytes
-rw-r--r--fonts/latex/tfm/lasy8.tfmbin0 -> 520 bytes
-rw-r--r--fonts/latex/tfm/lasy9.tfmbin0 -> 520 bytes
-rw-r--r--fonts/latex/tfm/lasyb10.tfmbin0 -> 520 bytes
-rw-r--r--fonts/latex/tfm/lcircle10.tfmbin0 -> 820 bytes
-rw-r--r--fonts/latex/tfm/lcirclew10.tfmbin0 -> 820 bytes
-rw-r--r--fonts/latex/tfm/lcmss8.tfmbin0 -> 1304 bytes
-rw-r--r--fonts/latex/tfm/lcmssb8.tfmbin0 -> 1316 bytes
-rw-r--r--fonts/latex/tfm/lcmssi8.tfmbin0 -> 1496 bytes
-rw-r--r--fonts/latex/tfm/line10.tfmbin0 -> 748 bytes
-rw-r--r--fonts/latex/tfm/linew10.tfmbin0 -> 748 bytes
53 files changed, 2690 insertions, 0 deletions
diff --git a/fonts/latex/README b/fonts/latex/README
new file mode 100644
index 0000000000..e6809b41e9
--- /dev/null
+++ b/fonts/latex/README
@@ -0,0 +1,11 @@
+This is a bundle of miscellaneous fonts, provided (as MetaFont source
+and as TeX font metrics) for users of LaTeX.
+
+Additional fonts, which used to be distributed here, are now part of
+the amsfonts distribution -- see directory CTAN:/fonts/amsfonts
+
+The amsfonts distribution also contains Adobe Type 1 versions of the
+fonts in this distribution.
+
+Robin Fairbairns
+For the LaTeX and CTAN teams
diff --git a/fonts/latex/legal.txt b/fonts/latex/legal.txt
new file mode 100644
index 0000000000..64ada224e3
--- /dev/null
+++ b/fonts/latex/legal.txt
@@ -0,0 +1,25 @@
+The files specifying the LaTeX fonts may be distributed and/or modified
+under the conditions of the LaTeX Project Public License, either version
+1.2 of this license or (at your option) any later version. The latest
+version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.2 or later is part of all distributions of LaTeX version
+1999/12/01 or later.
+
+The complete listing of files covered by this license is
+ circle.mf icmtt8.mf lasy.mf lasy8.mf lcmss8.mf linew10.mf
+ icmcsc10.mf ilasy8.mf lasy10.mf lasy9.mf lcmssb8.mf sroman.mf
+ icmex10.mf ilcmss8.mf lasy5.mf lasyb10.mf lcmssi8.mf sromanu.mf
+ icmmi8.mf ilcmssb8.mf lasy6.mf lcircle10.mf line.mf
+ icmsy8.mf ilcmssi8.mf lasy7.mf lcirclew10.mf line10.mf
+
+In addition, permission to distribute faithful renderings of the
+details of these fonts, in common font formats, such as (but not
+limited to) TFM, AFM, GF, PK, PFA, PFB and TTF, is also granted. The
+copyright holder applies no restrictions to the use of these fonts in
+documents, however published.
+
+May 2002, Robin Fairbairns, for the LaTeX Team.
+(Edited Jun 2009, Robin Fairbairns)
+
+latex-team@latex-project.org
diff --git a/fonts/latex/mf/circle.mf b/fonts/latex/mf/circle.mf
new file mode 100644
index 0000000000..fecca410fa
--- /dev/null
+++ b/fonts/latex/mf/circle.mf
@@ -0,0 +1,551 @@
+fontdimen 1: 0,0,0,0,0,0,0,thickness#;
+font_coding_scheme:="LaTeX circle";
+
+let cmchar=\; % cmchar should precede each character, for testing purposes
+
+thickness:=ceiling(thickness#*hppp); % the way rules thicknesses are done
+% thickness#:=thickness/hppp; % and let thickness# round to right value
+% NO, I deleted this BAD line! --- DEK, 9 Jul 87
+pickup pencircle scaled thickness; nib:=savepen;
+
+% arcs sets up the points 1, 2, ..., 8 as follows:
+%
+% |1
+% |*
+% * *
+% 8| 2
+% * | *
+% 7* | *3
+% --*-----*--
+% 6| 4
+% * *
+% |5
+%
+% <----w---->
+
+pair upleft,upright,downleft,downright;
+upright=-downleft=(1,1); downright=-upleft=(1,-1);
+
+% a quarter-circle has width, height and depth set as explained on
+% page 389 of the TeXbook, not the real width, height, and depth
+
+def qbeginchar (expr c, diam_sharp) =
+numeric hh, dd; hh:=.5*(diam_sharp+thickness#);
+dd:=.5*(diam_sharp-thickness#);
+beginchar(c,diam_sharp,hh,dd);
+enddef;
+
+def arcs =
+numeric delta;
+delta:=.5 round((1-sqrt.5)*w); % distance from axis to arc's 45 degree points
+bot y3=0; y7=y3=.5[y5,y1]; y1-y5=w;
+lft x1=0; x5=x1=.5[x7,x3]; x3-x7=w;
+x2-x1=delta; x1-x8=delta; x8=x6; x2=x4;
+y8-y7=delta; y7-y6=delta; y8=y2; y6=y4;
+enddef;
+
+cmchar "2pt, top right";
+qbeginchar(0,4pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z7{right}..z6{downright}..z5{down};
+endchar;
+
+cmchar "2pt, bottom right";
+qbeginchar(1,4pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z1{down}..z8{downleft}..z7{left};
+endchar;
+
+cmchar "2pt, bottom left";
+qbeginchar(2,4pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z3{left}..z2{upleft}..z1{up};
+endchar;
+
+cmchar "2pt, top left";
+qbeginchar(3,4pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z5{up}..z4{upright}..z3{right};
+endchar;
+
+cmchar "4pt, top right";
+qbeginchar(4,8pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z7{right}..z6{downright}..z5{down};
+endchar;
+
+cmchar "4pt, bottom right";
+qbeginchar(5,8pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z1{down}..z8{downleft}..z7{left};
+endchar;
+
+cmchar "4pt, bottom left";
+qbeginchar(6,8pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z3{left}..z2{upleft}..z1{up};
+endchar;
+
+cmchar "4pt, top left";
+qbeginchar(7,8pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z5{up}..z4{upright}..z3{right};
+endchar;
+
+cmchar "6pt, top right";
+qbeginchar(8,12pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z7{right}..z6{downright}..z5{down};
+endchar;
+
+cmchar "6pt, bottom right";
+qbeginchar(9,12pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z1{down}..z8{downleft}..z7{left};
+endchar;
+
+cmchar "6pt, bottom left";
+qbeginchar(10,12pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z3{left}..z2{upleft}..z1{up};
+endchar;
+
+cmchar "6pt, top left";
+qbeginchar(11,12pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z5{up}..z4{upright}..z3{right};
+endchar;
+
+cmchar "8pt, top right";
+qbeginchar(12,16pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z7{right}..z6{downright}..z5{down};
+endchar;
+
+cmchar "8pt, bottom right";
+qbeginchar(13,16pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z1{down}..z8{downleft}..z7{left};
+endchar;
+
+cmchar "8pt, bottom left";
+qbeginchar(14,16pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z3{left}..z2{upleft}..z1{up};
+endchar;
+
+cmchar "8pt, top left";
+qbeginchar(15,16pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z5{up}..z4{upright}..z3{right};
+endchar;
+
+cmchar "10pt, top right";
+qbeginchar(16,20pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z7{right}..z6{downright}..z5{down};
+endchar;
+
+cmchar "10pt, bottom right";
+qbeginchar(17,20pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z1{down}..z8{downleft}..z7{left};
+endchar;
+
+cmchar "10pt, bottom left";
+qbeginchar(18,20pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z3{left}..z2{upleft}..z1{up};
+endchar;
+
+cmchar "10pt, top left";
+qbeginchar(19,20pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z5{up}..z4{upright}..z3{right};
+endchar;
+
+cmchar "12pt, top right";
+qbeginchar(20,24pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z7{right}..z6{downright}..z5{down};
+endchar;
+
+cmchar "12pt, bottom right";
+qbeginchar(21,24pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z1{down}..z8{downleft}..z7{left};
+endchar;
+
+cmchar "12pt, bottom left";
+qbeginchar(22,24pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z3{left}..z2{upleft}..z1{up};
+endchar;
+
+cmchar "12pt, top left";
+qbeginchar(23,24pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z5{up}..z4{upright}..z3{right};
+endchar;
+
+cmchar "14pt, top right";
+qbeginchar(24,28pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z7{right}..z6{downright}..z5{down};
+endchar;
+
+cmchar "14pt, bottom right";
+qbeginchar(25,28pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z1{down}..z8{downleft}..z7{left};
+endchar;
+
+cmchar "14pt, bottom left";
+qbeginchar(26,28pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z3{left}..z2{upleft}..z1{up};
+endchar;
+
+cmchar "14pt, top left";
+qbeginchar(27,28pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z5{up}..z4{upright}..z3{right};
+endchar;
+
+cmchar "16pt, top right";
+qbeginchar(28,32pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z7{right}..z6{downright}..z5{down};
+endchar;
+
+cmchar "16pt, bottom right";
+qbeginchar(29,32pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z1{down}..z8{downleft}..z7{left};
+endchar;
+
+cmchar "16pt, bottom left";
+qbeginchar(30,32pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z3{left}..z2{upleft}..z1{up};
+endchar;
+
+cmchar "16pt, top left";
+qbeginchar(31,32pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z5{up}..z4{upright}..z3{right};
+endchar;
+
+cmchar "18pt, top right";
+qbeginchar(32,36pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z7{right}..z6{downright}..z5{down};
+endchar;
+
+cmchar "18pt, bottom right";
+qbeginchar(33,36pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z1{down}..z8{downleft}..z7{left};
+endchar;
+
+cmchar "18pt, bottom left";
+qbeginchar(34,36pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z3{left}..z2{upleft}..z1{up};
+endchar;
+
+cmchar "18pt, top left";
+qbeginchar(35,36pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z5{up}..z4{upright}..z3{right};
+endchar;
+
+cmchar "20pt, top right";
+qbeginchar(36,40pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z7{right}..z6{downright}..z5{down};
+endchar;
+
+cmchar "20pt, bottom right";
+qbeginchar(37,40pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z1{down}..z8{downleft}..z7{left};
+endchar;
+
+cmchar "20pt, bottom left";
+qbeginchar(38,40pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z3{left}..z2{upleft}..z1{up};
+endchar;
+
+cmchar "20pt, top left";
+qbeginchar(39,40pt#);
+numeric delta;
+pickup nib;
+arcs;
+draw z5{up}..z4{upright}..z3{right};
+endchar;
+
+% The full circles have height and depth 0pt because otherwise there
+% are too many heights and depths for the TFM files
+
+cmchar "1pt, circle";
+beginchar(96,1pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "2pt, circle";
+beginchar(97,2pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "3pt, circle";
+beginchar(98,3pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "4pt, circle";
+beginchar(99,4pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "5pt, circle";
+beginchar(100,5pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "6pt, circle";
+beginchar(101,6pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "7pt, circle";
+beginchar(102,7pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "8pt, circle";
+beginchar(103,8pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "9pt, circle";
+beginchar(104,9pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "10pt, circle";
+beginchar(105,10pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "11pt, circle";
+beginchar(106,11pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "12pt, circle";
+beginchar(107,12pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "13pt, circle";
+beginchar(108,13pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "14pt, circle";
+beginchar(109,14pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "15pt, circle";
+beginchar(110,15pt#,0pt#,0pt#);
+pickup nib;
+draw fullcircle scaled w;
+endchar;
+
+cmchar "1pt, blob";
+beginchar(112,1pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+cmchar "2pt, blob";
+beginchar(113,2pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+cmchar "3pt, blob";
+beginchar(114,3pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+cmchar "4pt, blob";
+beginchar(115,4pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+cmchar "5pt, blob";
+beginchar(116,5pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+cmchar "6pt, blob";
+beginchar(117,6pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+cmchar "7pt, blob";
+beginchar(118,7pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+cmchar "8pt, blob";
+beginchar(119,8pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+cmchar "9pt, blob";
+beginchar(120,9pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+cmchar "10pt, blob";
+beginchar(121,10pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+cmchar "11pt, blob";
+beginchar(122,11pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+cmchar "12pt, blob";
+beginchar(123,12pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+cmchar "13pt, blob";
+beginchar(124,13pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+cmchar "14pt, blob";
+beginchar(125,14pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+cmchar "15pt, blob";
+beginchar(126,15pt#,0pt#,0pt#);
+pickup pencircle scaled w;
+drawdot origin;
+endchar;
+
+bye
+
diff --git a/fonts/latex/mf/icmcsc10.mf b/fonts/latex/mf/icmcsc10.mf
new file mode 100644
index 0000000000..b99e3615fb
--- /dev/null
+++ b/fonts/latex/mf/icmcsc10.mf
@@ -0,0 +1,115 @@
+% Computer Modern Roman Caps and Small Caps 10 point invisible
+% RmS 91/10/27
+% RmS corrected 92/08/14: moved redefinition of extra_endchar
+% before generate csc and added semicolon
+if unknown cmbase: input cmbase fi
+
+font_identifier:="ICMCSC"; font_size 10pt#;
+
+% first come parameters used to set the uppercase letters
+% (including some for lowercase that aren't actually used)
+u#:=21/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=5/36pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=250/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=232/36pt#; % height of numerals
+x_height#:=155/36pt#; % height of lowercase without ascenders
+math_axis#:=90/36pt#; % axis of symmetry for math symbols
+bar_height#:=87/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=70/36pt#; % depth of lowercase descenders
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=9/36pt#; % lowercase hairline breadth
+stem#:=25/36pt#; % lowercase stem breadth
+curve#:=30/36pt#; % lowercase curve breadth
+ess#:=27/36pt#; % breadth in middle of lowercase s
+flare#:=33/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=38/36pt#; % diameter of dots
+cap_hair#:=11/36pt#; % uppercase hairline breadth
+cap_stem#:=32/36pt#; % uppercase stem breadth
+cap_curve#:=37/36pt#; % uppercase curve breadth
+cap_ess#:=35/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=20/36pt#; % vertical distance from serif base to tangent
+jut#:=28/36pt#; % protrusion of lowercase serifs
+cap_jut#:=37/36pt#; % protrusion of uppercase serifs
+beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs
+beak#:=70/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=10pt#; % maximum breadth above or below notches
+bar#:=11/36pt#; % lowercase bar thickness
+slab#:=11/36pt#; % serif and arm thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+cap_band#:=11/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches
+serif_drop#:=4/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=8/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=1; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+% now come replacements used to set the lowercase caps
+
+lower.u#:=16/36pt#; % unit width
+lower.width_adj#:=0pt#; % width adjustment for certain characters
+lower.cap_serif_fit#:=4/36pt#; % extra sidebar near uppercase serifs
+lower.letter_fit#:=2.4/36pt#; % extra space added to all sidebars
+
+lower.body_height#:=200/36pt#; % height of tallest characters
+lower.cap_height#:=185/36pt#; % height of caps
+lower.x_height#:=116/36pt#; % height of lowercase without ascenders
+lower.bar_height#:=65/36pt#; % height of crossbar in lowercase e
+lower.comma_depth#:=52/36pt#; % depth of comma below baseline
+
+lower.flare#:=25/36pt#; % diameter of bulbs or breadth of terminals
+lower.cap_hair#:=9.1/36pt#; % uppercase hairline breadth
+lower.stem#:=21/36pt#; % lowercase stem breadth
+lower.cap_stem#:=26/36pt#; % uppercase stem breadth
+lower.cap_curve#:=31/36pt#; % uppercase curve breadth
+lower.cap_ess#:=28/36pt#; % breadth in middle of uppercase s
+
+lower.cap_jut#:=26/36pt#; % protrusion of uppercase serifs
+lower.beak_jut#:=7/36pt#; % horizontal protrusion of beak serifs
+lower.beak#:=52/36pt#; % vertical protrusion of beak serifs
+lower.slab#:=9.1/36pt#; % serif and arm thickness
+lower.cap_bar#:=9.1/36pt#; % uppercase bar thickness
+lower.cap_band#:=9.1/36pt#; % uppercase thickness above/below lobes
+lower.cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches
+
+lower.o#:=5/36pt#; % amount of overshoot for curves
+lower.apex_o#:=4/36pt#; % amount of overshoot for diagonal junctions
+
+lower.fudge:=1; % factor applied to weights of heavy characters
+
+extra_endchar := extra_endchar & "clearit;";
+
+generate csc % switch to the driver file
diff --git a/fonts/latex/mf/icmex10.mf b/fonts/latex/mf/icmex10.mf
new file mode 100644
index 0000000000..283d45a24d
--- /dev/null
+++ b/fonts/latex/mf/icmex10.mf
@@ -0,0 +1,89 @@
+% Computer Modern Math Extension 10 point invisible
+if unknown cmbase: input cmbase fi
+
+% RmS 91/10/27: corrected font identifier
+
+font_identifier:="ICMEX"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=250/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=232/36pt#; % height of numerals
+x_height#:=155/36pt#; % height of lowercase without ascenders
+math_axis#:=90/36pt#; % axis of symmetry for math symbols
+bar_height#:=87/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=70/36pt#; % depth of lowercase descenders
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=9/36pt#; % lowercase hairline breadth
+stem#:=25/36pt#; % lowercase stem breadth
+curve#:=30/36pt#; % lowercase curve breadth
+ess#:=27/36pt#; % breadth in middle of lowercase s
+flare#:=33/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=38/36pt#; % diameter of dots
+cap_hair#:=11/36pt#; % uppercase hairline breadth
+cap_stem#:=32/36pt#; % uppercase stem breadth
+cap_curve#:=37/36pt#; % uppercase curve breadth
+cap_ess#:=35/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=20/36pt#; % vertical distance from serif base to tangent
+jut#:=28/36pt#; % protrusion of lowercase serifs
+cap_jut#:=37/36pt#; % protrusion of uppercase serifs
+beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs
+beak#:=70/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=10pt#; % maximum breadth above or below notches
+bar#:=11/36pt#; % lowercase bar thickness
+slab#:=11/36pt#; % serif and arm thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+cap_band#:=11/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches
+serif_drop#:=4/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=8/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+% the following font parameters are explained in {\sl The \TeX book}, Appendix G
+fontdimen 8: % parameters $\xi_8$ through $\xi_{13}$ will now be listed
+ rule_thickness#, % default\_rule\_thickness
+ 40/36pt#, % big\_op\_spacing1
+ 60/36pt#, % big\_op\_spacing2
+ 72/36pt#, % big\_op\_spacing3
+ 216/36pt#, % big\_op\_spacing4
+ 36/36pt#; % big\_op\_spacing5
+
+extra_endchar := extra_endchar & "clearit;";
+
+generate mathex % switch to the driver file
+
diff --git a/fonts/latex/mf/icmmi8.mf b/fonts/latex/mf/icmmi8.mf
new file mode 100644
index 0000000000..40f3c93e9c
--- /dev/null
+++ b/fonts/latex/mf/icmmi8.mf
@@ -0,0 +1,79 @@
+% Computer Modern Math Italic 8 point invisible
+if unknown cmbase: input cmbase fi
+
+% RmS 91/10/27: corrected font identifier
+
+font_identifier:="ICMMI"; font_size 8pt#;
+
+u#:=17/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=4.1/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=216/36pt#; % height of tallest characters
+asc_height#:=200/36pt#; % height of lowercase ascenders
+cap_height#:=196.8/36pt#; % height of caps
+fig_height#:=185.6/36pt#; % height of numerals
+x_height#:=124/36pt#; % height of lowercase without ascenders
+math_axis#:=72/36pt#; % axis of symmetry for math symbols
+bar_height#:=69.6/36pt#; % height of crossbar in lowercase e
+comma_depth#:=56/36pt#; % depth of comma below baseline
+desc_depth#:=56/36pt#; % depth of lowercase descenders
+
+crisp#:=8/36pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=9/36pt#; % lowercase hairline breadth
+stem#:=21.5/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+ess#:=23/36pt#; % breadth in middle of lowercase s
+flare#:=26.5/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=32/36pt#; % diameter of dots
+cap_hair#:=9.5/36pt#; % uppercase hairline breadth
+cap_stem#:=25.5/36pt#; % uppercase stem breadth
+cap_curve#:=29/36pt#; % uppercase curve breadth
+cap_ess#:=26/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.36pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=16/36pt#; % vertical distance from serif base to tangent
+jut#:=24/36pt#; % protrusion of lowercase serifs
+cap_jut#:=29/36pt#; % protrusion of uppercase serifs
+beak_jut#:=8.4/36pt#; % horizontal protrusion of beak serifs
+beak#:=56/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=8pt#; % maximum breadth above or below notches
+bar#:=9.5/36pt#; % lowercase bar thickness
+slab#:=9.5/36pt#; % serif and arm thickness
+cap_bar#:=9.5/36pt#; % uppercase bar thickness
+cap_band#:=9.5/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=8pt#; % max breadth above/below uppercase notches
+serif_drop#:=3.2/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=6/36pt#; % amount of overshoot for curves
+apex_o#:=6/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=.4; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+extra_endchar := extra_endchar & "clearit;";
+
+generate mathit % switch to the driver file
diff --git a/fonts/latex/mf/icmsy8.mf b/fonts/latex/mf/icmsy8.mf
new file mode 100644
index 0000000000..51583b5139
--- /dev/null
+++ b/fonts/latex/mf/icmsy8.mf
@@ -0,0 +1,100 @@
+% Computer Modern Math Symbols 8 point invisible
+if unknown cmbase: input cmbase fi
+
+% RmS 91/10/27: corrected font identifier
+
+font_identifier:="ICMSY"; font_size 8pt#;
+
+u#:=17/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=4.1/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=216/36pt#; % height of tallest characters
+asc_height#:=200/36pt#; % height of lowercase ascenders
+cap_height#:=196.8/36pt#; % height of caps
+fig_height#:=185.6/36pt#; % height of numerals
+x_height#:=124/36pt#; % height of lowercase without ascenders
+math_axis#:=72/36pt#; % axis of symmetry for math symbols
+bar_height#:=69.6/36pt#; % height of crossbar in lowercase e
+comma_depth#:=56/36pt#; % depth of comma below baseline
+desc_depth#:=56/36pt#; % depth of lowercase descenders
+
+crisp#:=8/36pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=9/36pt#; % lowercase hairline breadth
+stem#:=21.5/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+ess#:=23/36pt#; % breadth in middle of lowercase s
+flare#:=26.5/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=32/36pt#; % diameter of dots
+cap_hair#:=9.5/36pt#; % uppercase hairline breadth
+cap_stem#:=25.5/36pt#; % uppercase stem breadth
+cap_curve#:=29/36pt#; % uppercase curve breadth
+cap_ess#:=26/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.36pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=16/36pt#; % vertical distance from serif base to tangent
+jut#:=24/36pt#; % protrusion of lowercase serifs
+cap_jut#:=29/36pt#; % protrusion of uppercase serifs
+beak_jut#:=8.4/36pt#; % horizontal protrusion of beak serifs
+beak#:=56/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=8pt#; % maximum breadth above or below notches
+bar#:=9.5/36pt#; % lowercase bar thickness
+slab#:=9.5/36pt#; % serif and arm thickness
+cap_bar#:=9.5/36pt#; % uppercase bar thickness
+cap_band#:=9.5/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=8pt#; % max breadth above/below uppercase notches
+serif_drop#:=3.2/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=6/36pt#; % amount of overshoot for curves
+apex_o#:=6/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=.4; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+% the following font parameters are explained in {\sl The \TeX book}, Appendix G
+subs:=6/8; % subscripts to 8pt will normally be in 6pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+36/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+24/36pt#, % num2
+ math_axis#+1.51rth#+38/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-98/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-24/36pt#), % denom2
+ 7.49pt#-subs*asc_height#, % sup1
+ 6.99pt#-subs*asc_height#, % sup2
+ 82/36pt#, % sup3
+ 36/36pt#, % sub1
+ 72/36pt#, % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 11.9pt#, % delim1
+ 9.1pt#, % delim2
+ math_axis#; % axis\_height
+
+extra_endchar := extra_endchar & "clearit;";
+
+generate mathsy % switch to the driver file
+
diff --git a/fonts/latex/mf/icmtt8.mf b/fonts/latex/mf/icmtt8.mf
new file mode 100644
index 0000000000..ab3dc68c0f
--- /dev/null
+++ b/fonts/latex/mf/icmtt8.mf
@@ -0,0 +1,80 @@
+% Computer Modern Typewriter Text for use with 8 point (invisible)
+if unknown cmbase: input cmbase fi
+
+% RmS 91/10/27: corrected font identifier
+
+font_identifier:="ICMTT"; font_size 8pt#;
+
+u#:=17/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=0pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=200/36pt#; % height of tallest characters
+asc_height#:=176/36pt#; % height of lowercase ascenders
+cap_height#:=176/36pt#; % height of caps
+fig_height#:=176/36pt#; % height of numerals
+x_height#:=124/36pt#; % height of lowercase without ascenders
+math_axis#:=88/36pt#; % axis of symmetry for math symbols
+bar_height#:=63/36pt#; % height of crossbar in lowercase e
+comma_depth#:=40/36pt#; % depth of comma below baseline
+desc_depth#:=64/36pt#; % depth of lowercase descenders
+
+crisp#:=19/36pt#; % diameter of serif corners
+tiny#:=19/36pt#; % diameter of rounded corners
+fine#:=18/36pt#; % diameter of sharply rounded corners
+thin_join#:=18/36pt#; % width of extrafine details
+hair#:=22/36pt#; % lowercase hairline breadth
+stem#:=22/36pt#; % lowercase stem breadth
+curve#:=22/36pt#; % lowercase curve breadth
+ess#:=19/36pt#; % breadth in middle of lowercase s
+flare#:=28/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=31/36pt#; % diameter of dots
+cap_hair#:=22/36pt#; % uppercase hairline breadth
+cap_stem#:=22/36pt#; % uppercase stem breadth
+cap_curve#:=22/36pt#; % uppercase curve breadth
+cap_ess#:=22/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=22/36pt#; % thickness of lines in math symbols
+
+dish#:=0pt#; % amount erased at top or bottom of serifs
+bracket#:=0pt#; % vertical distance from serif base to tangent
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=27/36pt#; % protrusion of uppercase serifs
+beak_jut#:=0pt#; % horizontal protrusion of beak serifs
+beak#:=27/36pt#; % vertical protrusion of beak serifs
+vair#:=19/36pt#; % vertical diameter of hairlines
+notch_cut#:=22/36pt#; % maximum breadth above or below notches
+bar#:=19/36pt#; % lowercase bar thickness
+slab#:=19/36pt#; % serif and arm thickness
+cap_bar#:=19/36pt#; % uppercase bar thickness
+cap_band#:=19/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=22/36pt#; % max breadth above/below uppercase notches
+serif_drop#:=0pt#; % vertical drop of sloped serifs
+stem_corr#:=0pt#; % for small refinements of stem breadth
+vair_corr#:=0pt#; % for small refinements of hairline height
+apex_corr#:=8/36pt#; % extra width at diagonal junctions
+
+o#:=3/36pt#; % amount of overshoot for curves
+apex_o#:=3/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=0.81; % factor applied to weights of heavy characters
+math_spread:=-1; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=0; % extra openness inside bowls
+beak_darkness:=0; % fraction of triangle inside beak serifs
+ligs:=0; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=true; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=true; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=true; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+extra_endchar := extra_endchar & "clearit;";
+
+generate roman % switch to the driver file
+
diff --git a/fonts/latex/mf/ilasy8.mf b/fonts/latex/mf/ilasy8.mf
new file mode 100644
index 0000000000..bb08023786
--- /dev/null
+++ b/fonts/latex/mf/ilasy8.mf
@@ -0,0 +1,11 @@
+% lasy8 invisible for SLITeX
+% Use parameter settings from cmsy8
+if unknown cmbase: input cmbase fi
+def generate suffix t= enddef;
+input icmsy8;
+%% RmS 91/11/14: a bit of hacking...
+%% to get the correct font identifier
+let _bye=bye;
+def bye = font_identifier:="ILASY"; _bye enddef;
+input lasy;
+
diff --git a/fonts/latex/mf/ilcmss8.mf b/fonts/latex/mf/ilcmss8.mf
new file mode 100644
index 0000000000..0683529ef5
--- /dev/null
+++ b/fonts/latex/mf/ilcmss8.mf
@@ -0,0 +1,82 @@
+% SliTeX Sans Serif 8 point invisible, derived from
+% Computer Modern Sans Serif Quotation Style
+% by Pierre A. MacKay, 19 August, 1986
+if unknown cmbase: input cmbase fi
+
+% RmS 91/10/27: corrected font identifier
+
+font_identifier:="ILCMSS"; font_size 8pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=2/36pt#; % width adjustment for certain characters
+serif_fit#:=-10/36pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-14/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=220/36pt#; % height of tallest characters
+asc_height#:=200/36pt#; % height of lowercase ascenders
+cap_height#:=197/36pt#; % height of caps
+fig_height#:=190/36pt#; % height of numerals
+x_height#:=150/36pt#; % height of lowercase without ascenders
+math_axis#:=80/36pt#; % axis of symmetry for math symbols
+bar_height#:=80/36pt#; % height of crossbar in lowercase e
+comma_depth#:=40/36pt#; % depth of comma below baseline
+desc_depth#:=40/36pt#; % depth of lowercase descenders
+
+crisp#:=18/36pt#; % diameter of serif corners
+tiny#:=18/36pt#; % diameter of rounded corners
+fine#:=8/36pt#; % diameter of sharply rounded corners
+thin_join#:=8/36pt#; % width of extrafine details
+hair#:=23/36pt#; % lowercase hairline breadth
+stem#:=23/36pt#; % lowercase stem breadth
+curve#:=23/36pt#; % lowercase curve breadth
+ess#:=23/36pt#; % breadth in middle of lowercase s
+flare#:=21/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=28/36pt#; % diameter of dots
+cap_hair#:=23/36pt#; % uppercase hairline breadth
+cap_stem#:=27/36pt#; % uppercase stem breadth
+cap_curve#:=27/36pt#; % uppercase curve breadth
+cap_ess#:=27/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=20/36pt#; % thickness of lines in math symbols
+
+dish#:=0pt#; % amount erased at top or bottom of serifs
+bracket#:=0pt#; % vertical distance from serif base to tangent
+jut#:=0pt#; % protrusion of lowercase serifs
+cap_jut#:=0pt#; % protrusion of uppercase serifs
+beak_jut#:=0pt#; % horizontal protrusion of beak serifs
+beak#:=0pt#; % vertical protrusion of beak serifs
+vair#:=18/36pt#; % vertical diameter of hairlines
+notch_cut#:=23/36pt#; % maximum breadth above or below notches
+bar#:=18/36pt#; % lowercase bar thickness
+slab#:=19/36pt#; % serif and arm thickness
+cap_bar#:=19/36pt#; % uppercase bar thickness
+cap_band#:=19/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=23/36pt#; % max breadth above/below uppercase notches
+serif_drop#:=0pt#; % vertical drop of sloped serifs
+stem_corr#:=.5/36pt#; % for small refinements of stem breadth
+vair_corr#:=.5/36pt#; % for small refinements of hairline height
+apex_corr#:=4/36pt#; % extra width at diagonal junctions
+
+o#:=6/36pt#; % amount of overshoot for curves
+apex_o#:=2/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=.95; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/10; % extra openness inside bowls
+beak_darkness:=0; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=true; % should dots be square?
+hefty:=true; % should we try hard not to be overweight?
+serifs:=false; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+extra_endchar := extra_endchar & "clearit;";
+
+generate sroman % switch to the driver file for SliTeX
+
diff --git a/fonts/latex/mf/ilcmssb8.mf b/fonts/latex/mf/ilcmssb8.mf
new file mode 100644
index 0000000000..468e26e70d
--- /dev/null
+++ b/fonts/latex/mf/ilcmssb8.mf
@@ -0,0 +1,82 @@
+% SliTeX Sans-Serif bold 8 point invisible, derived from
+% Computer Modern Sans Serif Quotation Style
+% by Pierre A. MacKay, 19 August, 1986
+if unknown cmbase: input cmbase fi
+
+% RmS 91/10/27: corrected font identifier
+
+font_identifier:="ILCMSSB"; font_size 8pt#;
+
+u#:=22/36pt#; % unit width
+width_adj#:=3/36pt#; % width adjustment for certain characters
+serif_fit#:=-12/36pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-15/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=220/36pt#; % height of tallest characters
+asc_height#:=200/36pt#; % height of lowercase ascenders
+cap_height#:=197/36pt#; % height of caps
+fig_height#:=200/36pt#; % height of numerals
+x_height#:=155/36pt#; % height of lowercase without ascenders
+math_axis#:=80/36pt#; % axis of symmetry for math symbols
+bar_height#:=90/36pt#; % height of crossbar in lowercase e
+comma_depth#:=35/36pt#; % depth of comma below baseline
+desc_depth#:=40/36pt#; % depth of lowercase descenders
+
+crisp#:=18/36pt#; % diameter of serif corners
+tiny#:=18/36pt#; % diameter of rounded corners
+fine#:=8/36pt#; % diameter of sharply rounded corners
+thin_join#:=8/36pt#; % width of extrafine details
+hair#:=42/36pt#; % lowercase hairline breadth
+stem#:=42/36pt#; % lowercase stem breadth
+curve#:=42/36pt#; % lowercase curve breadth
+ess#:=40/36pt#; % breadth in middle of lowercase s
+flare#:=36/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=41/36pt#; % diameter of dots
+cap_hair#:=42/36pt#; % uppercase hairline breadth
+cap_stem#:=46/36pt#; % uppercase stem breadth
+cap_curve#:=46/36pt#; % uppercase curve breadth
+cap_ess#:=46/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=26/36pt#; % thickness of lines in math symbols
+
+dish#:=0pt#; % amount erased at top or bottom of serifs
+bracket#:=0pt#; % vertical distance from serif base to tangent
+jut#:=0pt#; % protrusion of lowercase serifs
+cap_jut#:=0pt#; % protrusion of uppercase serifs
+beak_jut#:=0pt#; % horizontal protrusion of beak serifs
+beak#:=0pt#; % vertical protrusion of beak serifs
+vair#:=22/36pt#; % vertical diameter of hairlines
+notch_cut#:=48/36pt#; % maximum breadth above or below notches
+bar#:=22/36pt#; % lowercase bar thickness
+slab#:=24/36pt#; % serif and arm thickness
+cap_bar#:=23/36pt#; % uppercase bar thickness
+cap_band#:=30/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=42/36pt#; % max breadth above/below uppercase notches
+serif_drop#:=0pt#; % vertical drop of sloped serifs
+stem_corr#:=.5/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=15/36pt#; % extra width at diagonal junctions
+
+o#:=6/36pt#; % amount of overshoot for curves
+apex_o#:=2/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=.85; % factor applied to weights of heavy characters
+math_spread:=0.5; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/9; % extra openness inside bowls
+beak_darkness:=0; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=true; % should dots be square?
+hefty:=true; % should we try hard not to be overweight?
+serifs:=false; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+extra_endchar := extra_endchar & "clearit;";
+
+generate sroman % switch to the driver file for SliTeX
+
diff --git a/fonts/latex/mf/ilcmssi8.mf b/fonts/latex/mf/ilcmssi8.mf
new file mode 100644
index 0000000000..075853802e
--- /dev/null
+++ b/fonts/latex/mf/ilcmssi8.mf
@@ -0,0 +1,82 @@
+% SliTeX Sans-Serif Slanted 8 point invisible, derived from
+% Computer Modern Sans Serif Quotation Style Slanted
+% by Pierre A. MacKay, 19 August, 1986
+if unknown cmbase: input cmbase fi
+
+% RmS 91/10/27: corrected font identifier
+
+font_identifier:="ILCMSSI"; font_size 8pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=2/36pt#; % width adjustment for certain characters
+serif_fit#:=-10/36pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-14/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=220/36pt#; % height of tallest characters
+asc_height#:=200/36pt#; % height of lowercase ascenders
+cap_height#:=197/36pt#; % height of caps
+fig_height#:=190/36pt#; % height of numerals
+x_height#:=150/36pt#; % height of lowercase without ascenders
+math_axis#:=80/36pt#; % axis of symmetry for math symbols
+bar_height#:=80/36pt#; % height of crossbar in lowercase e
+comma_depth#:=40/36pt#; % depth of comma below baseline
+desc_depth#:=40/36pt#; % depth of lowercase descenders
+
+crisp#:=18/36pt#; % diameter of serif corners
+tiny#:=18/36pt#; % diameter of rounded corners
+fine#:=8/36pt#; % diameter of sharply rounded corners
+thin_join#:=8/36pt#; % width of extrafine details
+hair#:=23/36pt#; % lowercase hairline breadth
+stem#:=23/36pt#; % lowercase stem breadth
+curve#:=23/36pt#; % lowercase curve breadth
+ess#:=23/36pt#; % breadth in middle of lowercase s
+flare#:=21/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=28/36pt#; % diameter of dots
+cap_hair#:=23/36pt#; % uppercase hairline breadth
+cap_stem#:=27/36pt#; % uppercase stem breadth
+cap_curve#:=27/36pt#; % uppercase curve breadth
+cap_ess#:=27/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=20/36pt#; % thickness of lines in math symbols
+
+dish#:=0pt#; % amount erased at top or bottom of serifs
+bracket#:=0pt#; % vertical distance from serif base to tangent
+jut#:=0pt#; % protrusion of lowercase serifs
+cap_jut#:=0pt#; % protrusion of uppercase serifs
+beak_jut#:=0pt#; % horizontal protrusion of beak serifs
+beak#:=0pt#; % vertical protrusion of beak serifs
+vair#:=18/36pt#; % vertical diameter of hairlines
+notch_cut#:=23/36pt#; % maximum breadth above or below notches
+bar#:=18/36pt#; % lowercase bar thickness
+slab#:=19/36pt#; % serif and arm thickness
+cap_bar#:=19/36pt#; % uppercase bar thickness
+cap_band#:=19/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=23/36pt#; % max breadth above/below uppercase notches
+serif_drop#:=0pt#; % vertical drop of sloped serifs
+stem_corr#:=.5/36pt#; % for small refinements of stem breadth
+vair_corr#:=.5/36pt#; % for small refinements of hairline height
+apex_corr#:=4/36pt#; % extra width at diagonal junctions
+
+o#:=6/36pt#; % amount of overshoot for curves
+apex_o#:=2/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=sind 12/cosd 12; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=.95; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/10; % extra openness inside bowls
+beak_darkness:=0; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=true; % should dots be square?
+hefty:=true; % should we try hard not to be overweight?
+serifs:=false; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+extra_endchar := extra_endchar & "clearit;";
+
+generate sroman % switch to the SliTeX driver file.
+
diff --git a/fonts/latex/mf/lasy.mf b/fonts/latex/mf/lasy.mf
new file mode 100644
index 0000000000..6d4949300b
--- /dev/null
+++ b/fonts/latex/mf/lasy.mf
@@ -0,0 +1,375 @@
+font_identifier:="LASY";
+font_coding_scheme:="LaTeX symbols";
+
+% Here we steal a bit from mathsy
+
+mode_setup; font_setup;
+autorounding:=0;
+
+font_slant slant; font_x_height x_height#;
+font_quad 18u# if not monospace:+4letter_fit# fi;
+slant:=mono_charic#:=0; % the remaining characters will not be slanted
+currenttransform:=identity yscaled aspect_ratio scaled granularity;
+
+cmchar "Leftward arrowhead";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(oct"050",6u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup crisp.nib;
+pos3(bar,0); pos4(bar,0);
+y0=math_axis; lft x0=hround u;
+y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps;
+pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
+z9=.381966[.5[z3,z4],z0];
+numeric t[]; path p[];
+(t1,t2)=(z4r{z9-z4}..z6r) intersectiontimes (z3r{z9-z3}..z5r);
+z10=(z4r{z9-z4}..z6r) intersectionpoint (z3r{z9-z3}..z5r);
+filldraw z0..{z4-z9}z4l--subpath (0,t1) of (z4r{z9-z4}..z6r)
+ --z10--subpath (t2,0) of (z3r{z9-z3}..z5r)--z3l{z9-z3}..z0 & cycle;
+ % arrowhead
+penlabels(0,3,4,5,6,9,10); endchar;
+
+% This character is an alteration of the leftward arrow
+% The tip of the arrowhead rests one unit from left edge, same as left arrow
+% Changes:
+% 1) deletion of the stem ... points z1,z2 etc
+% The rest of the numbers stay the same, for any referencing
+% 2) new intersectinpoint z10 is introduced and path slightly altered
+% 3) name, code number and width changed, otherwise essentially the same
+
+
+
+cmchar "Rightward arrowhead";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(oct"051",6u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup crisp.nib;
+pos3(bar,0); pos4(bar,0);
+y0=math_axis; rt x0=hround(w-u);
+y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps;
+pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
+z9=.381966[.5[z3,z4],z0];
+numeric t[]; path p[];
+(t1,t2)=(z4l{z9-z4}..z6r) intersectiontimes (z3l{z9-z3}..z5r);
+z10=(z4l{z9-z4}..z6r) intersectionpoint (z3l{z9-z3}..z5r);
+filldraw z0..{z4-z9}z4r--subpath (0,t1) of (z4l{z9-z4}..z6r)
+ --z10--subpath (t2,0) of (z3l{z9-z3}..z5r)--z3r{z9-z3}..z0 & cycle;
+ % arrowhead
+penlabels(0,3,4,5,6,9,10); endchar;
+
+% This character is an alteration of the rightward arrow
+% The tip of the arrowhead rests one unit from right edge, same as right arrow
+% Changes:
+% 1) deletion of the stem ... points z1,z2 etc
+% The rest of the numbers stay the same, for any referencing
+% 2) new intersectinpoint z10 is introduced and path slightly altered
+% 3) name, code number and width changed, otherwise essentially the same
+
+
+
+cmchar "Upward arrowhead";
+beginchar(oct"052",9u#,asc_height#,asc_depth#);
+italcorr .76asc_height#*slant+.5crisp#-u#;
+adjust_fit(0,0); pickup crisp.nib;
+pos3(bar,90); pos4(bar,90);
+top z0=(.5w,0); x0-x3=x4-x0=3u+eps;
+y3=y4=y0-.24asc_height-eps;
+pos5(bar,angle(z4-z0)); z5l=z0;
+pos6(bar,angle(z3-z0)); z6l=z0;
+z9=.381966[.5[z3,z4],z0];
+numeric t[]; path p[];
+(t1,t2)=(z4l{z9-z4}..z6r) intersectiontimes (z3l{z9-z3}..z5r);
+z10=(z4l{z9-z4}..z6r) intersectionpoint (z3l{z9-z3}..z5r);
+filldraw z0..{z4-z9}z4r--subpath (0,t1) of (z4l{z9-z4}..z6r)
+ --z10--subpath (t2,0) of (z3l{z9-z3}..z5r)--z3r{z9-z3}..z0 & cycle;
+ % arrowhead
+penlabels(0,3,4,5,6,9,10); endchar;
+
+% This character is an alteration of the upward arrow
+% The tip of the arrowhead rests on the baseline for reference
+% Changes:
+% 1) deletion of the stem ... points z1,z2 etc
+% The rest of the numbers stay the same, for any referencing
+% 2) point z0 is moved down from the ascender line; the tip touches
+% the baseline
+% 3) new intersectinpoint z10 is introduced and path slightly altered
+% 4) name and code number changed, otherwise essentially the same
+
+
+
+cmchar "Downward arrowhead";
+beginchar(oct"053",9u#,asc_height#,asc_depth#);
+adjust_fit(0,0); pickup crisp.nib;
+pos3(bar,90); pos4(bar,90);
+bot z0=(.5w,0); x0-x3=x4-x0=3u+eps;
+y3=y4=y0+.24asc_height+eps;
+pos5(bar,angle(z4-z0)); z5l=z0;
+pos6(bar,angle(z3-z0)); z6l=z0;
+z9=.381966[.5[z3,z4],z0]; % z9 iintroduces curve to arrowhead
+numeric t[]; path p[]; % rather direction{z9-z4} does this
+(t1,t2)=(z4r{z9-z4}..z6r) intersectiontimes (z3r{z9-z3}..z5r);
+z10=(z4r{z9-z4}..z6r) intersectionpoint (z3r{z9-z3}..z5r);
+filldraw z0..{z4-z9}z4l--subpath (0,t1) of (z4r{z9-z4}..z6r)
+ --z10--subpath (t2,0) of (z3r{z9-z3}..z5r)--z3l{z9-z3}..z0 & cycle;
+ % arrowhead
+penlabels(0,3,4,5,6,9,10); endchar;
+
+% This character is an alteration of the downward arrow
+% The tip of the arrowhead rests on the baseline for reference
+% Changes:
+% 1) deletion of the stem ... points z1,z2 etc
+% The rest of the numbers stay the same, for any referencing
+% 2) point z0 is moved up from the descender line to rest on the baseline
+% 3) new intersectinpoint z10 is introduced and path slightly altered
+% 4) name and code number changed, otherwise essentially the same
+
+
+
+cmchar "Square subset sign";
+compute_spread(5/4x_height#,3/2x_height#); % the spread of `$=$'
+beginchar(oct"074",14u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+lft x2=hround(1.5u+oo); x1=x4=hround(w-1.5u)+eps; x3=x2;
+y1-y4=spread; y2=y1; y3=y4; y1=math_axis+.5spread;
+draw z1--z2--z3--z4; % bars and stem
+labels(1,2,3,4); endchar;
+
+% This character is an alteration of the square subset or equal to sign
+% Changes:
+% 1) changed position of y1 to be .5 of the spread above the math_axis
+% 2) got rid of lower bar (points z8/z9,etc) and the extra spread#' amount
+% which was used in calculations for the lower bar
+% 3) name and code number and height changed, otherwise essentially the same
+
+
+
+cmchar "Square superset sign";
+compute_spread(5/4x_height#,3/2x_height#); % the spread of `$=$'
+beginchar(oct"075",14u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=x4=hround 1.5u-eps; rt x2=hround(w-1.5u-oo); x3=x2;
+y1-y4=spread; y2=y1; y3=y4; y1=math_axis+.5spread;
+draw z1--z2--z3--z4; % bars and stem
+labels(1,2,3,4); endchar;
+
+% This character is an alteration of the square superset or equal to sign
+% Changes:
+% 1) changed position of y1 to be .5 of the spread above the math_axis
+% 2) got rid of lower bar (points z8/z9,etc) and the extra spread#' amount
+% which was used in calculations for the lower bar
+% 3) name and code number and height changed, otherwise essentially the same
+
+
+
+cmchar "Diamond";
+beginchar(oct"063",2(.85asc_height#-math_axis#)+2u#,v_center(7u#));
+italcorr math_axis#*slant;
+adjust_fit(0,0); pickup rule.nib;
+numeric a; a=.85asc_height-math_axis;
+x4=x8=good.x .5w; w:=r:=2x4; rt x2=w-lft x6=good.x(x4+a);
+y2=y6=.5[y4,y8]=.5cap_height; top y8=good.y(y2+a);
+draw z2--z4--z6--z8--cycle;
+labels(2,4,6,8); endchar;
+
+% This character is an alteration of the diamond operator
+% The four tips are equidistant from the center point (.5w,math_axis),
+% this distance being half of the cap height
+% and related to that in the square character
+% slightly less though, since it looks too big if the actually have same
+% length
+% Changes:
+% 1) To the amount a, which gives the distance of the tips from the center
+% 2) The width is related to the asc_height, so it changes with it
+% 3) name and code number and width changed, otherwise essentially the same
+% The numbers stay the same, for any referencing
+
+
+
+cmchar "Square";
+beginchar(oct"062",2.1math_axis#+4u#,v_center(7u#));
+italcorr math_axis#*slant;
+adjust_fit(0,0); pickup rule.nib;
+numeric a; a=round(2.1math_axis);
+x1=x4=good.x 2u; x2=x3=x1+a;
+y3=y4=.5(cap_height-a); y1=y2=y3+a;
+draw z1--z2--z3--z4--cycle;
+labels(1,2,3,4); endchar;
+
+% The size of this character is related to the diamond character, it's
+% sightly larger.
+% It is NOT the diamond character which has been rotated
+% Vertical alignment raised to .5 cap height from math-axis height
+% 2 units of sidebearing space on each side, since vertical lines usually
+% need a little more space, actually it's 2 units-.5rule.nib
+
+
+
+cmchar "Bowtie operator";
+beginchar(oct"061",13u#,v_center(7u#));
+italcorr math_axis#*slant;
+adjust_fit(0,0); pickup rule.nib;
+numeric a; a=round(1.1*math_axis);
+x1=x4=good.x 1.5u; x2=x3=w-x1;
+y1=y2=good.y(.5(cap_height-2a)); y3=y4=y1+2a;
+draw z1--z3--z2--z4--cycle;
+labels(1,2,3,4); endchar;
+
+% Arbitrary width given
+% Length of the bars at the edges are 2.2*math_axis length
+% and it's vertically aligned on the high, i.e., .5 cap height as opposed
+% to being aligned on the math axis
+
+
+
+cmchar "Upside-down Uppercase Greek Omega";
+beginchar(oct"060",13u#,cap_height#,0);
+italcorr cap_height#*slant-.35u#; %italcorr .75cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib; pos1(vair,-90); pos2(cap_curve,0);
+pos3(vair,0); pos4(cap_curve,180); pos5(vair,180);
+x1=.5w; bot y1r=0-o; lft x4r=hround u; y2=y4=1/3h; x2=w-x4;
+rt x5l=hround(1/3(w+.5u)+.5hair); top y3=top y5=h; x3=w-x5;
+filldraw stroke z3e{down}...{down}z2e
+ & pulled_super_arc.e(2,1)(.5superpull)
+ & pulled_super_arc.e(1,4)(.5superpull)
+ & z4e{up}...{up}z5e; % bowl
+numeric arm_thickness; path p; p=z3{down}...{down}z2;
+arm_thickness=Vround(if hefty:slab+2stem_corr else:.75[slab,cap_vstem] fi);
+pickup crisp.nib; pos6(arm_thickness,90); pos7(fudged.hair,0);
+top y6r=h; x6=x3; rt x7r=hround (w-.8u); y7=good.y(y6l-.5beak)+eps;
+(x,y)=p intersectionpoint((0,y6l)--(w+h,y6l)); x6l:=x;
+arm(6,7,a,.5beak_darkness,1.2beak_jut); % right arm and beak
+pos8(arm_thickness,90); pos9(fudged.hair,180);
+y8=y6; y9=y7; x8+x6=x9+x7=w; x8l:=w-x6l;
+arm(8,9,b,.5beak_darkness,-1.2beak_jut); % left arm and beak
+math_fit(0,.5ic#); penlabels(1,2,3,4,5,6,7,8,9); endchar;
+
+% This character is taken from the Upper Case Omega of cmr
+% Directions and reference points are reversed and flipped
+% pos angles are flipped by 180 degrees
+% vertical values are reversed, up/down directions in the
+% filldraw stroke are reversed
+% left strokes same, but changes reference points
+% italic correction based on furthest pont of character , so made it
+% full cap_height minus amount for the beak, taken from the cap XI
+% I suppose a transformation of paths would have worked also, but this
+% way, limits are maintained better, i think
+% w+h instead of just w in intersection to make sure paths do intersect
+
+
+
+cmchar "Leads to character extension";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(oct"072",12u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+numeric a; a=round(.45math_axis);
+y11=y13=y15=math_axis; y12-a=y14+a=good.y math_axis;
+x11=0; x15=w; x13=.5[x11,x15]; x12=.5[x11,x13]; x14=.5[x13,x15];
+path p; p=z12{right}...z13...z14{right};
+draw z11{dir(-angle direction 1 of p)}...z12{right}...z13...
+ z14{right}...z15{dir(-angle direction 1 of p)};
+penlabels(11,12,13,14,15); endchar;
+
+% This character is an extension to fit with the Leads to character with
+% arrowhead
+% This character goes from edge to edge and a series of these can be linked
+% as desired.
+% It has 2/3 the width of that character, and if this relation is kept, the
+% the curves should all match
+
+
+
+cmchar "Leads to character with arrowhead";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(oct"073",18u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup crisp.nib;
+pos3(bar,0); pos4(bar,0);
+y0=math_axis; rt x0=hround(w-u);
+y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps;
+pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
+z9=.381966[.5[z3,z4],z0];
+numeric t[]; path p[];
+(t1,t2)=(z4l{z9-z4}..z6r) intersectiontimes (z3l{z9-z3}..z5r);
+z10=(z4l{z9-z4}..z6r) intersectionpoint (z3l{z9-z3}..z5r);
+filldraw z0..{z4-z9}z4r--subpath (0,t1) of (z4l{z9-z4}..z6r)
+ --z10--subpath (t2,0) of (z3l{z9-z3}..z5r)--z3r{z9-z3}..z0 & cycle;
+ % arrowhead
+pickup rule.nib;
+numeric a; a=round(.45math_axis);
+y11=y13=y15=y16=y0; y12-a=y14+a=good.y math_axis;
+x11=0; x15=2/3w; z17=lft z10;
+x13=.5[x11,x15]; x12=.5[x11,x13]; x14=.5[x13,x15]; x16=.3[x15,x0];
+path p; p=z12{right}...z13...z14{right};
+draw z11{dir(-angle direction 1 of p)}...
+ z12{right}...z13...z14{right}...z16{right}...z17;
+penlabels(0,3,4,5,6,9,10,11,12,13,14,15,16); endchar;
+
+% This character uses the rightward arrow arrowhead
+% The width is the same as that of the regular arrow
+% An extension character can be added for longer squiggles
+
+
+cmchar "LASY \lhd triangle";
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(oct"001",14u#,v_center(spread#+rule_thickness#));
+italcorr h#*slant-u#;
+adjust_fit(0,0); pickup rule.nib;
+lft x2=hround 1.5u-eps; x1=x3=w-x2;
+y1-y3=spread; y2=.5[y1,y3]=math_axis;
+draw z1--z2--z3--cycle; % triangle
+labels(1,2,3); endchar;
+
+% taken directly from CMR "less than" character
+% the path was closed to make a triangle
+
+
+
+cmchar "LASY \unlhd triangle";
+compute_spread(.45x_height#,.55x_height#);
+spread#':=spread#; spread':=spread; % the spread of `$=$'
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(oct"002",14u#,v_center(spread#'+spread#+rule_thickness#));
+italcorr h#*slant-u#;
+adjust_fit(0,0); pickup rule.nib;
+lft x2=hround 1.5u-eps; x1=x3=w-x2;
+y1-y3=spread; y2=.5[y1,y3]; top y1=h;
+draw z1--z2--z3--cycle; % triangle
+x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % bar
+labels(1,2,3,8,9); endchar;
+
+% taken directly from CMR "less than or equal to sign"
+% the "less than" path was closed to make a triangle
+
+
+
+cmchar "LASY \rhd triangle";
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(oct"003",14u#,v_center(spread#+rule_thickness#));
+italcorr math_axis#*slant-u#;
+adjust_fit(0,0); pickup rule.nib;
+rt x2=hround(w-1.5u)+eps; x1=x3=w-x2;
+y1-y3=spread; y2=.5[y1,y3]=math_axis;
+draw z1--z2--z3--cycle; % triangle
+labels(1,2,3); endchar;
+
+% taken directly from CMR "greater than" character
+% the path was closed to make a triangle
+
+
+
+cmchar "LASY \unrhd triangle";
+compute_spread(.45x_height#,.55x_height#);
+spread#':=spread#; spread':=spread; % the spread of `$=$'
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(oct"004",14u#,v_center(spread#'+spread#+rule_thickness#));
+italcorr h#*slant-u#;
+adjust_fit(0,0); pickup rule.nib;
+lft x1=hround 1.5u-eps; x2=w-x1; x3=x1;
+y1-y3=spread; y2=.5[y1,y3]; top y1=h;
+draw z1--z2--z3--cycle; % triangle
+x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % bar
+labels(1,2,3,8,9); endchar;
+
+% taken directly from CMR "greater than or equal to sign"
+% the "greater than" path was closed to make a triangle
+
+
+bye.
diff --git a/fonts/latex/mf/lasy10.mf b/fonts/latex/mf/lasy10.mf
new file mode 100644
index 0000000000..72439f0822
--- /dev/null
+++ b/fonts/latex/mf/lasy10.mf
@@ -0,0 +1,5 @@
+% Use parameter settings from cmsy10
+if unknown cmbase: input cmbase fi
+def generate suffix t= enddef;
+input cmsy10;
+input lasy;
diff --git a/fonts/latex/mf/lasy5.mf b/fonts/latex/mf/lasy5.mf
new file mode 100644
index 0000000000..e81d42e6d9
--- /dev/null
+++ b/fonts/latex/mf/lasy5.mf
@@ -0,0 +1,5 @@
+% Use parameter settings from cmsy5
+if unknown cmbase: input cmbase fi
+def generate suffix t= enddef;
+input cmsy5;
+input lasy;
diff --git a/fonts/latex/mf/lasy6.mf b/fonts/latex/mf/lasy6.mf
new file mode 100644
index 0000000000..c55f801176
--- /dev/null
+++ b/fonts/latex/mf/lasy6.mf
@@ -0,0 +1,5 @@
+% Use parameter settings from cmsy6
+if unknown cmbase: input cmbase fi
+def generate suffix t= enddef;
+input cmsy6;
+input lasy;
diff --git a/fonts/latex/mf/lasy7.mf b/fonts/latex/mf/lasy7.mf
new file mode 100644
index 0000000000..567bf8529e
--- /dev/null
+++ b/fonts/latex/mf/lasy7.mf
@@ -0,0 +1,5 @@
+% Use parameter settings from cmsy7
+if unknown cmbase: input cmbase fi
+def generate suffix t= enddef;
+input cmsy7;
+input lasy;
diff --git a/fonts/latex/mf/lasy8.mf b/fonts/latex/mf/lasy8.mf
new file mode 100644
index 0000000000..a8706e3398
--- /dev/null
+++ b/fonts/latex/mf/lasy8.mf
@@ -0,0 +1,5 @@
+% Use parameter settings from cmsy8
+if unknown cmbase: input cmbase fi
+def generate suffix t= enddef;
+input cmsy8;
+input lasy;
diff --git a/fonts/latex/mf/lasy9.mf b/fonts/latex/mf/lasy9.mf
new file mode 100644
index 0000000000..598c4ab91e
--- /dev/null
+++ b/fonts/latex/mf/lasy9.mf
@@ -0,0 +1,5 @@
+% Use parameter settings from cmsy9
+if unknown cmbase: input cmbase fi
+def generate suffix t= enddef;
+input cmsy9;
+input lasy;
diff --git a/fonts/latex/mf/lasyb10.mf b/fonts/latex/mf/lasyb10.mf
new file mode 100644
index 0000000000..b6dba7ad89
--- /dev/null
+++ b/fonts/latex/mf/lasyb10.mf
@@ -0,0 +1,5 @@
+% Use parameter settings from cmbsy10
+if unknown cmbase: input cmbase fi
+def generate suffix t= enddef;
+input cmbsy10;
+input lasy;
diff --git a/fonts/latex/mf/lcircle10.mf b/fonts/latex/mf/lcircle10.mf
new file mode 100644
index 0000000000..082614fa74
--- /dev/null
+++ b/fonts/latex/mf/lcircle10.mf
@@ -0,0 +1,14 @@
+%% RmS 91/11/14: check that cmbase is NOT loaded
+%% RmS 92/03/18: changed message to errmessage
+inner bye;
+if not unknown cmbase:
+ errhelp "This font must be generated using the plain base.";
+ errmessage "You can't use cmbase for this font!";
+ expandafter bye fi
+font_identifier "CIRCLE"; font_size 10pt#;
+font_coding_scheme:="LATEX CIRCLE";
+mode_setup;
+
+thickness#:=.4pt#;
+
+input circle
diff --git a/fonts/latex/mf/lcirclew10.mf b/fonts/latex/mf/lcirclew10.mf
new file mode 100644
index 0000000000..7a828eb363
--- /dev/null
+++ b/fonts/latex/mf/lcirclew10.mf
@@ -0,0 +1,13 @@
+%% RmS 91/11/14: check that cmbase is NOT loaded
+%% RmS 92/03/18: changed message to errmessage
+inner bye;
+if not unknown cmbase:
+ errhelp "This font must be generated using the plain base.";
+ errmessage "You can't use cmbase for this font!";
+ expandafter bye fi
+font_identifier "CIRCLEW"; font_size 10pt#;
+font_coding_scheme:="LATEX CIRCLE";
+mode_setup;
+
+thickness#:=.8pt#;
+input circle
diff --git a/fonts/latex/mf/lcmss8.mf b/fonts/latex/mf/lcmss8.mf
new file mode 100644
index 0000000000..142ae142e6
--- /dev/null
+++ b/fonts/latex/mf/lcmss8.mf
@@ -0,0 +1,78 @@
+% SliTeX Sans Serif 8 point, derived from
+% Computer Modern Sans Serif Quotation Style
+% by Pierre A. MacKay, 19 August, 1986
+if unknown cmbase: input cmbase fi
+
+font_identifier:="LCMSS"; font_size 8pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=2/36pt#; % width adjustment for certain characters
+serif_fit#:=-10/36pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-14/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=220/36pt#; % height of tallest characters
+asc_height#:=200/36pt#; % height of lowercase ascenders
+cap_height#:=197/36pt#; % height of caps
+fig_height#:=190/36pt#; % height of numerals
+x_height#:=150/36pt#; % height of lowercase without ascenders
+math_axis#:=80/36pt#; % axis of symmetry for math symbols
+bar_height#:=80/36pt#; % height of crossbar in lowercase e
+comma_depth#:=40/36pt#; % depth of comma below baseline
+desc_depth#:=40/36pt#; % depth of lowercase descenders
+
+crisp#:=18/36pt#; % diameter of serif corners
+tiny#:=18/36pt#; % diameter of rounded corners
+fine#:=8/36pt#; % diameter of sharply rounded corners
+thin_join#:=8/36pt#; % width of extrafine details
+hair#:=23/36pt#; % lowercase hairline breadth
+stem#:=23/36pt#; % lowercase stem breadth
+curve#:=23/36pt#; % lowercase curve breadth
+ess#:=23/36pt#; % breadth in middle of lowercase s
+flare#:=21/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=28/36pt#; % diameter of dots
+cap_hair#:=23/36pt#; % uppercase hairline breadth
+cap_stem#:=27/36pt#; % uppercase stem breadth
+cap_curve#:=27/36pt#; % uppercase curve breadth
+cap_ess#:=27/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=20/36pt#; % thickness of lines in math symbols
+
+dish#:=0pt#; % amount erased at top or bottom of serifs
+bracket#:=0pt#; % vertical distance from serif base to tangent
+jut#:=0pt#; % protrusion of lowercase serifs
+cap_jut#:=0pt#; % protrusion of uppercase serifs
+beak_jut#:=0pt#; % horizontal protrusion of beak serifs
+beak#:=0pt#; % vertical protrusion of beak serifs
+vair#:=18/36pt#; % vertical diameter of hairlines
+notch_cut#:=23/36pt#; % maximum breadth above or below notches
+bar#:=18/36pt#; % lowercase bar thickness
+slab#:=19/36pt#; % serif and arm thickness
+cap_bar#:=19/36pt#; % uppercase bar thickness
+cap_band#:=19/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=23/36pt#; % max breadth above/below uppercase notches
+serif_drop#:=0pt#; % vertical drop of sloped serifs
+stem_corr#:=.5/36pt#; % for small refinements of stem breadth
+vair_corr#:=.5/36pt#; % for small refinements of hairline height
+apex_corr#:=4/36pt#; % extra width at diagonal junctions
+
+o#:=6/36pt#; % amount of overshoot for curves
+apex_o#:=2/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=.95; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/10; % extra openness inside bowls
+beak_darkness:=0; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=true; % should dots be square?
+hefty:=true; % should we try hard not to be overweight?
+serifs:=false; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate sroman % switch to the driver file for SliTeX
+
diff --git a/fonts/latex/mf/lcmssb8.mf b/fonts/latex/mf/lcmssb8.mf
new file mode 100644
index 0000000000..1393336a37
--- /dev/null
+++ b/fonts/latex/mf/lcmssb8.mf
@@ -0,0 +1,78 @@
+% SliTeX Sans-Serif bold 8 point, derived from
+% Computer Modern Sans Serif Quotation Style
+% by Pierre A. MacKay, 19 August, 1986
+if unknown cmbase: input cmbase fi
+
+font_identifier:="LCMSSB"; font_size 8pt#;
+
+u#:=22/36pt#; % unit width
+width_adj#:=3/36pt#; % width adjustment for certain characters
+serif_fit#:=-12/36pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-15/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=220/36pt#; % height of tallest characters
+asc_height#:=200/36pt#; % height of lowercase ascenders
+cap_height#:=197/36pt#; % height of caps
+fig_height#:=200/36pt#; % height of numerals
+x_height#:=155/36pt#; % height of lowercase without ascenders
+math_axis#:=80/36pt#; % axis of symmetry for math symbols
+bar_height#:=90/36pt#; % height of crossbar in lowercase e
+comma_depth#:=35/36pt#; % depth of comma below baseline
+desc_depth#:=40/36pt#; % depth of lowercase descenders
+
+crisp#:=18/36pt#; % diameter of serif corners
+tiny#:=18/36pt#; % diameter of rounded corners
+fine#:=8/36pt#; % diameter of sharply rounded corners
+thin_join#:=8/36pt#; % width of extrafine details
+hair#:=42/36pt#; % lowercase hairline breadth
+stem#:=42/36pt#; % lowercase stem breadth
+curve#:=42/36pt#; % lowercase curve breadth
+ess#:=40/36pt#; % breadth in middle of lowercase s
+flare#:=36/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=41/36pt#; % diameter of dots
+cap_hair#:=42/36pt#; % uppercase hairline breadth
+cap_stem#:=46/36pt#; % uppercase stem breadth
+cap_curve#:=46/36pt#; % uppercase curve breadth
+cap_ess#:=46/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=26/36pt#; % thickness of lines in math symbols
+
+dish#:=0pt#; % amount erased at top or bottom of serifs
+bracket#:=0pt#; % vertical distance from serif base to tangent
+jut#:=0pt#; % protrusion of lowercase serifs
+cap_jut#:=0pt#; % protrusion of uppercase serifs
+beak_jut#:=0pt#; % horizontal protrusion of beak serifs
+beak#:=0pt#; % vertical protrusion of beak serifs
+vair#:=22/36pt#; % vertical diameter of hairlines
+notch_cut#:=48/36pt#; % maximum breadth above or below notches
+bar#:=22/36pt#; % lowercase bar thickness
+slab#:=24/36pt#; % serif and arm thickness
+cap_bar#:=23/36pt#; % uppercase bar thickness
+cap_band#:=30/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=42/36pt#; % max breadth above/below uppercase notches
+serif_drop#:=0pt#; % vertical drop of sloped serifs
+stem_corr#:=.5/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=15/36pt#; % extra width at diagonal junctions
+
+o#:=6/36pt#; % amount of overshoot for curves
+apex_o#:=2/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=.85; % factor applied to weights of heavy characters
+math_spread:=0.5; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/9; % extra openness inside bowls
+beak_darkness:=0; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=true; % should dots be square?
+hefty:=true; % should we try hard not to be overweight?
+serifs:=false; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate sroman % switch to the driver file for SliTeX
+
diff --git a/fonts/latex/mf/lcmssi8.mf b/fonts/latex/mf/lcmssi8.mf
new file mode 100644
index 0000000000..7c03c65f14
--- /dev/null
+++ b/fonts/latex/mf/lcmssi8.mf
@@ -0,0 +1,78 @@
+% SliTeX Sans-Serif Slanted 8 point, derived from
+% Computer Modern Sans Serif Quotation Style Slanted
+% by Pierre A. MacKay, 19 August, 1986
+if unknown cmbase: input cmbase fi
+
+font_identifier:="LCMSSI"; font_size 8pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=2/36pt#; % width adjustment for certain characters
+serif_fit#:=-10/36pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-14/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=220/36pt#; % height of tallest characters
+asc_height#:=200/36pt#; % height of lowercase ascenders
+cap_height#:=197/36pt#; % height of caps
+fig_height#:=190/36pt#; % height of numerals
+x_height#:=150/36pt#; % height of lowercase without ascenders
+math_axis#:=80/36pt#; % axis of symmetry for math symbols
+bar_height#:=80/36pt#; % height of crossbar in lowercase e
+comma_depth#:=40/36pt#; % depth of comma below baseline
+desc_depth#:=40/36pt#; % depth of lowercase descenders
+
+crisp#:=18/36pt#; % diameter of serif corners
+tiny#:=18/36pt#; % diameter of rounded corners
+fine#:=8/36pt#; % diameter of sharply rounded corners
+thin_join#:=8/36pt#; % width of extrafine details
+hair#:=23/36pt#; % lowercase hairline breadth
+stem#:=23/36pt#; % lowercase stem breadth
+curve#:=23/36pt#; % lowercase curve breadth
+ess#:=23/36pt#; % breadth in middle of lowercase s
+flare#:=21/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=28/36pt#; % diameter of dots
+cap_hair#:=23/36pt#; % uppercase hairline breadth
+cap_stem#:=27/36pt#; % uppercase stem breadth
+cap_curve#:=27/36pt#; % uppercase curve breadth
+cap_ess#:=27/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=20/36pt#; % thickness of lines in math symbols
+
+dish#:=0pt#; % amount erased at top or bottom of serifs
+bracket#:=0pt#; % vertical distance from serif base to tangent
+jut#:=0pt#; % protrusion of lowercase serifs
+cap_jut#:=0pt#; % protrusion of uppercase serifs
+beak_jut#:=0pt#; % horizontal protrusion of beak serifs
+beak#:=0pt#; % vertical protrusion of beak serifs
+vair#:=18/36pt#; % vertical diameter of hairlines
+notch_cut#:=23/36pt#; % maximum breadth above or below notches
+bar#:=18/36pt#; % lowercase bar thickness
+slab#:=19/36pt#; % serif and arm thickness
+cap_bar#:=19/36pt#; % uppercase bar thickness
+cap_band#:=19/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=23/36pt#; % max breadth above/below uppercase notches
+serif_drop#:=0pt#; % vertical drop of sloped serifs
+stem_corr#:=.5/36pt#; % for small refinements of stem breadth
+vair_corr#:=.5/36pt#; % for small refinements of hairline height
+apex_corr#:=4/36pt#; % extra width at diagonal junctions
+
+o#:=6/36pt#; % amount of overshoot for curves
+apex_o#:=2/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=sind 12/cosd 12; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=.95; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/10; % extra openness inside bowls
+beak_darkness:=0; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=true; % should dots be square?
+hefty:=true; % should we try hard not to be overweight?
+serifs:=false; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate sroman % switch to the SliTeX driver file.
+
diff --git a/fonts/latex/mf/line.mf b/fonts/latex/mf/line.mf
new file mode 100644
index 0000000000..c9ae71d3fc
--- /dev/null
+++ b/fonts/latex/mf/line.mf
@@ -0,0 +1,552 @@
+qqs:=ceiling(qqs#*hppp); % the way rule widths are calculated
+define_pixels(qqh,qqw,arrowlen,arrowht,arrowcurve);
+
+def line (expr delx, dely) =
+numeric qht,qwd,absdely;
+
+if dely > 0:
+ if delx > dely: qwd# := qqw#; qht# := dely*qqw#/delx;
+ else: qht# := qqw#; qwd# := delx*qqw#/dely; fi;
+ beginchar( 8(delx-1)+(dely-1),qwd#,qht#,0pt#);
+ x0=0; y0=0;
+ x1=w; y1=h;
+ else:
+ absdely=-dely;
+ if delx > absdely: qwd# := qqw#; qht# := absdely*qqw#/delx;
+ else: qht# := qqw#; qwd# := delx*qqw#/absdely; fi;
+ beginchar(64+8(delx-1)+(absdely-1),qwd#,qht#,0pt#);
+ x0=0; y0=h;
+ x1=w; y1=0;
+fi;
+pickup pencircle scaled qqs;
+draw z0..z1
+enddef;
+
+def larrow (expr char, delx, dely) =
+numeric rxa,rxb,rxc,rxd,rxe,rya,ryb,ryc,ryd,rye;
+numeric qht,qwd,absdely;
+if dely > 0:
+ if delx > dely: qwd# := qqw#; qht# := dely*qqw#/delx;
+ else: qht# := qqw#; qwd# := delx*qqw#/dely; fi;
+ % fixed by DEK on 24 Jan 89; previous code buggy but caused no harm
+ else:
+ absdely=-dely;
+ if delx > absdely: qwd# := qqw#; qht# := absdely*qqw#/delx;
+ else: qht# := qqw#; qwd# := delx*qqw#/absdely; fi;
+fi;
+
+beginchar(char,qwd#,qht#,0pt#);
+if dely > 0: y0=0; else: y0=h; fi;
+
+x0=0;
+rxa=arrowlen; rya=0;
+rxb=arrowlen; ryb=arrowht;
+rxc=arrowlen; ryc=-arrowht;
+rxd=.5rxa; ryd=.5ryb-arrowcurve;
+rxe=rxd; rye=-ryd;
+
+numeric rlen;
+rlen = sqrt(delx*delx + dely*dely);
+
+x1=(rxa*delx - rya*dely)/rlen;
+y1=(rxa*dely+rya*delx)/rlen + y0;
+
+%x2=rxb; y2=ryb;
+x2=(rxb*delx - ryb*dely)/rlen;
+y2=(rxb*dely+ryb*delx)/rlen + y0;
+
+%x3=rxc; y3=ryc;
+x3=(rxc*delx - ryc*dely)/rlen;
+y3=(rxc*dely+ryc*delx)/rlen + y0;
+
+%x4=rxd; y4=ryd;
+x4=(rxd*delx - ryd*dely)/rlen;
+y4=(rxd*dely+ryd*delx)/rlen + y0;
+
+%x5=rxe; y5=rye;
+x5=(rxe*delx - rye*dely)/rlen;
+y5=(rxe*dely+rye*delx)/rlen + y0;
+
+fill z0..z5..z3--z1--z2..z4..z0--cycle
+enddef;
+
+def rarrow (expr char, delx, dely) =
+
+numeric rxa,rxb,rxc,rxd,rxe,rya,ryb,ryc,ryd,rye;
+numeric qht,qwd,absdely;
+if dely > 0:
+ if delx > dely: qwd# := qqw#; qht# := dely*qqw#/delx;
+ else: qht# := qqw#; qwd# := delx*qqw#/dely; fi;
+ else:
+ absdely=-dely;
+ if delx > absdely: qwd# := qqw#; qht# := absdely*qqw#/delx;
+ else: qht# := qqw#; qwd# := delx*qqw#/absdely; fi;
+fi;
+
+beginchar(char,qwd#,qht#,0pt#);
+
+if dely > 0: y0=h; else: y0=0; fi;
+
+x0=w;
+rxa=-arrowlen; rya=0;
+rxb=rxa; ryb=arrowht;
+rxc=rxa; ryc=-arrowht;
+rxd=.5rxa; ryd=.5ryb-arrowcurve;
+rxe=rxd; rye=-ryd;
+
+numeric rlen;
+rlen = sqrt(delx*delx + dely*dely);
+
+%x1= rxa;y1=rya; %%%% replace the following by rotations
+x1=(rxa*delx - rya*dely)/rlen + x0;
+y1=(rxa*dely+rya*delx)/rlen + y0;
+
+%x2=rxb; y2=ryb;
+x2=(rxb*delx - ryb*dely)/rlen + x0;
+y2=(rxb*dely+ryb*delx)/rlen + y0;
+
+%x3=rxc; y3=ryc;
+x3=(rxc*delx - ryc*dely)/rlen + x0;
+y3=(rxc*dely+ryc*delx)/rlen + y0;
+
+%x4=rxd; y4=ryd;
+x4=(rxd*delx - ryd*dely)/rlen + x0;
+y4=(rxd*dely+ryd*delx)/rlen + y0;
+
+%x5=rxe; y5=rye;
+x5=(rxe*delx - rye*dely)/rlen + x0;
+y5=(rxe*dely+rye*delx)/rlen + y0;
+
+fill z0..z5..z3--z1--z2..z4..z0--cycle
+enddef;
+
+% character code rules, for
+% line(x,y):
+% 0 < x,y <= 6 : 8*(x-1) + (y-1)
+%
+% larrow(x,y):
+% 0 < x,y <= 4 : 8*(2x-1) + (2y-1)
+% y=0 : '33
+% rarrow(x,y):
+% 0 < x,y < 3 : 8*(3x-1) + (3y-1)
+% 0 < x <= 4, y=3 : 8*(2x-1) + 6
+% 0 < x < 4, y = 4 : 8*(2x) + 7
+% x=3, 0 < y <=4 : 8*6 + (2y-1)
+% x = 4, 0 < y < 4 : 8*7 + 2y
+% y=0 : 55
+%
+% for y < 0: value is 64 + value for (x, |y|)
+%
+% up arrow: '66 down arrow: '77
+
+fontdimen 1: 0,0,0,0,0,0,0,qqs#; % line thickness in points
+let cmchar=\; % cmchar should precede each character, for testing purposes
+
+
+font_coding_scheme:= "LaTeX line";
+
+cmchar "Character '00";
+line(1,1);
+endchar;
+
+cmchar "Character '11";
+larrow(9,1,1);
+endchar;
+
+cmchar "Character '22";
+rarrow(18,1,1);
+endchar;
+
+cmchar "Character '01";
+line(1,2);
+endchar;
+
+cmchar "Character '13";
+larrow(11,1,2);
+endchar;
+
+cmchar "Character '25";
+rarrow(21,1,2);
+endchar;
+
+cmchar "Character '02";
+line(1,3);
+endchar;
+
+cmchar "Character '15";
+larrow(13,1,3);
+endchar;
+
+cmchar "Character '16";
+rarrow(14,1,3);
+endchar;
+
+cmchar "Character '03";
+line(1,4);
+endchar;
+
+cmchar "Character '17";
+larrow(15,1,4);
+endchar;
+
+cmchar "Character '27";
+rarrow(23,1,4);
+endchar;
+
+cmchar "Character '04";
+line(1,5);
+endchar;
+
+cmchar "Character '05";
+line(1,6);
+endchar;
+
+cmchar "Character '10";
+line(2,1);
+endchar;
+
+cmchar "Character '31";
+larrow(25,2,1);
+endchar;
+
+cmchar "Character '52";
+rarrow(42,2,1);
+endchar;
+
+cmchar "Character '12";
+line(2,3);
+endchar;
+
+cmchar "Character '35";
+larrow(29,2,3);
+endchar;
+
+cmchar "Character '36";
+rarrow(30,2,3);
+endchar;
+
+cmchar "Character '14";
+line(2,5);
+endchar;
+
+cmchar "Character '20";
+line(3,1);
+endchar;
+
+cmchar "Character '51";
+larrow(41,3,1);
+endchar;
+
+cmchar "Character '61";
+rarrow(49,3,1);
+endchar;
+
+cmchar "Character '21";
+line(3,2);
+endchar;
+
+cmchar "Character '53";
+larrow(43,3,2);
+endchar;
+
+cmchar "Character '63";
+rarrow(51,3,2);
+endchar;
+
+cmchar "Character '23";
+line(3,4);
+endchar;
+
+cmchar "Character '57";
+larrow(47,3,4);
+endchar;
+
+cmchar "Character '67";
+rarrow(55,3,4);
+endchar;
+
+cmchar "Character '24";
+line(3,5);
+endchar;
+
+cmchar "Character '30";
+line(4,1);
+endchar;
+
+cmchar "Character '71";
+larrow(57,4,1);
+endchar;
+
+cmchar "Character '72";
+rarrow(58,4,1);
+endchar;
+
+cmchar "Character '32";
+line(4,3);
+endchar;
+
+cmchar "Character '75";
+larrow(61,4,3);
+endchar;
+
+cmchar "Character '76";
+rarrow(62,4,3);
+endchar;
+
+cmchar "Character '34";
+line(4,5);
+endchar;
+
+cmchar "Character '40";
+line(5,1);
+endchar;
+
+cmchar "Character '41";
+line(5,2);
+endchar;
+
+cmchar "Character '42";
+line(5,3);
+endchar;
+
+cmchar "Character '43";
+line(5,4);
+endchar;
+
+cmchar "Character '45";
+line(5,6);
+endchar;
+
+cmchar "Character '50";
+line(6,1);
+endchar;
+
+cmchar "Character '54";
+line(6,5);
+endchar;
+
+cmchar "Character '100";
+line(1,-1);
+endchar;
+
+cmchar "Character '111";
+larrow(73,1,-1);
+endchar;
+
+cmchar "Character '122";
+rarrow(82,1,-1);
+endchar;
+
+cmchar "Character '101";
+line(1,-2);
+endchar;
+
+cmchar "Character '113";
+larrow(75,1,-2);
+endchar;
+
+cmchar "Character '125";
+rarrow(85,1,-2);
+endchar;
+
+cmchar "Character '102";
+line(1,-3);
+endchar;
+
+cmchar "Character '115";
+larrow(77,1,-3);
+endchar;
+
+cmchar "Character '116";
+rarrow(78,1,-3);
+endchar;
+
+cmchar "Character '103";
+line(1,-4);
+endchar;
+
+cmchar "Character '117";
+larrow(79,1,-4);
+endchar;
+
+cmchar "Character '127";
+rarrow(87,1,-4);
+endchar;
+
+cmchar "Character '104";
+line(1,-5);
+endchar;
+
+cmchar "Character '105";
+line(1,-6);
+endchar;
+
+cmchar "Character '110";
+line(2,-1);
+endchar;
+
+cmchar "Character '131";
+larrow(89,2,-1);
+endchar;
+
+cmchar "Character '152";
+rarrow(106,2,-1);
+endchar;
+
+cmchar "Character '112";
+line(2,-3);
+endchar;
+
+cmchar "Character '135";
+larrow(93,2,-3);
+endchar;
+
+cmchar "Character '136";
+rarrow(94,2,-3);
+endchar;
+
+cmchar "Character '114";
+line(2,-5);
+endchar;
+
+cmchar "Character '120";
+line(3,-1);
+endchar;
+
+cmchar "Character '151";
+larrow(105,3,-1);
+endchar;
+
+cmchar "Character '161";
+rarrow(113,3,-1);
+endchar;
+
+cmchar "Character '121";
+line(3,-2);
+endchar;
+
+cmchar "Character '153";
+larrow(107,3,-2);
+endchar;
+
+cmchar "Character '163";
+rarrow(115,3,-2);
+endchar;
+
+cmchar "Character '123";
+line(3,-4);
+endchar;
+
+cmchar "Character '157";
+larrow(111,3,-4);
+endchar;
+
+cmchar "Character '167";
+rarrow(119,3,-4);
+endchar;
+
+cmchar "Character '124";
+line(3,-5);
+endchar;
+
+cmchar "Character '130";
+line(4,-1);
+endchar;
+
+cmchar "Character '171";
+larrow(121,4,-1);
+endchar;
+
+cmchar "Character '172";
+rarrow(122,4,-1);
+endchar;
+
+cmchar "Character '132";
+line(4,-3);
+endchar;
+
+cmchar "Character '175";
+larrow(125,4,-3);
+endchar;
+
+cmchar "Character '176";
+rarrow(126,4,-3);
+endchar;
+
+cmchar "Character '134";
+line(4,-5);
+endchar;
+
+cmchar "Character '140";
+line(5,-1);
+endchar;
+
+cmchar "Character '141";
+line(5,-2);
+endchar;
+
+cmchar "Character '142";
+line(5,-3);
+endchar;
+
+cmchar "Character '143";
+line(5,-4);
+endchar;
+
+cmchar "Character '145";
+line(5,-6);
+endchar;
+
+cmchar "Character '150";
+line(6,-1);
+endchar;
+
+cmchar "Character '154";
+line(6,-5);
+endchar;
+
+%%%Horizontal arrows:
+
+
+cmchar "Character '33";
+larrow(27,1,0);
+endchar;
+
+cmchar "Character '55"; %right arrow
+beginchar(45,qqw#,qqw#,0pt#);
+x0=w; y0=0;
+x1=x0-arrowlen; y1=0;
+x2=x1; y2=arrowht;
+x3=x1; y3=-y2;
+x4=.5[x0,x1]; y4=.5y2-arrowcurve;
+x5=x4; y5=-y4;
+fill z0..z4..z2--z1--z3..z5..z0--cycle;
+endchar;
+
+%%%vertical arrows
+
+
+cmchar "Character '66"; %up arrow
+beginchar(54,qqw#,qqw#,0pt#);
+x0=0; y0=w;
+y1=y0-arrowlen; x1=0;
+y2=y1; x2=arrowht;
+y3=y1; x3=-x2;
+y4=.5[y0,y1]; x4=.5x2-arrowcurve;
+y5=y4; x5=-x4;
+fill z0..z4..z2--z1--z3..z5..z0--cycle;
+endchar;
+
+
+cmchar "Character '77"; %down arrow
+beginchar(63,qqw#,qqw#,0pt#);
+x0=0; y0=0;
+y1=arrowlen; x1=0;
+y2=y1; x2=arrowht;
+y3=y1; x3=-x2;
+y4=.5y1; x4=.5x2-arrowcurve;
+y5=y4; x5=-x4;
+fill z0..z4..z2--z1--z3..z5..z0--cycle;
+endchar;
+
+bye
diff --git a/fonts/latex/mf/line10.mf b/fonts/latex/mf/line10.mf
new file mode 100644
index 0000000000..5f93014fba
--- /dev/null
+++ b/fonts/latex/mf/line10.mf
@@ -0,0 +1,18 @@
+%% RmS 91/11/14: check that cmbase is NOT loaded
+%% RmS 92/03/18: changed message to errmessage
+inner bye;
+if not unknown cmbase:
+ errhelp "This font must be generated using the plain base.";
+ errmessage "You can't use cmbase for this font!";
+ expandafter bye fi
+font_identifier "LINE"; font_size 10pt#;
+font_coding_scheme:="LATEX LINE";
+mode_setup;
+
+qqs#=.4pt#; %width of lines
+qqh#=10pt#; %height of vertical stroke.
+qqw#=10pt#; %length of horizontal stroke.
+
+%arrow dimensions:
+arrowlen#=.4*qqw#; arrowht#=.15*qqw#; arrowcurve#=.1*arrowht#;
+input line;
diff --git a/fonts/latex/mf/linew10.mf b/fonts/latex/mf/linew10.mf
new file mode 100644
index 0000000000..1110232291
--- /dev/null
+++ b/fonts/latex/mf/linew10.mf
@@ -0,0 +1,18 @@
+%% RmS 91/11/14: check that cmbase is NOT loaded
+%% RmS 92/03/18: changed message to errmessage
+inner bye;
+if not unknown cmbase:
+ errhelp "This font must be generated using the plain base.";
+ errmessage "You can't use cmbase for this font!";
+ expandafter bye fi
+font_identifier "LINEW"; font_size 10pt#;
+font_coding_scheme:="LATEX LINE";
+mode_setup;
+
+qqs#=.8pt#; %width of lines
+qqh#=10pt#; %height of vertical stroke.
+qqw#=10pt#; %length of horizontal stroke.
+
+%arrow dimensions:
+arrowlen#=.6*qqw#; arrowht#=.22*qqw#; arrowcurve#=.1*arrowht#;
+input line;
diff --git a/fonts/latex/mf/sroman.mf b/fonts/latex/mf/sroman.mf
new file mode 100644
index 0000000000..722937ca37
--- /dev/null
+++ b/fonts/latex/mf/sroman.mf
@@ -0,0 +1,70 @@
+% This is the driver file sroman.mf based on roman.mf in the
+% Computer Modern Roman family of fonts (by D. E. Knuth, 1979--1985)
+% It differs from roman.mf only in that it has been
+% adjusted to call for sromanu.mf with a special uppercase I
+% for the SLITeX fonts: lcmss8, lcmssb8, and lcmssi8.
+% Written by Pierre A. MacKay, 16 Sept. 1986
+
+if ligs>1: font_coding_scheme:="TeX text";
+ spanish_shriek=oct"074"; spanish_query=oct"076";
+else: font_coding_scheme:=if ligs=0: "TeX typewriter text"
+ else: "TeX text without f-ligatures" fi;
+ spanish_shriek=oct"016"; spanish_query=oct"017"; fi
+
+mode_setup; font_setup;
+
+input sromanu; % upper case (majuscules)
+input romanl; % lower case (minuscules)
+input greeku; % upper case Greek letters
+input romand; % numerals
+input romanp; % ampersand, question marks, currency sign
+input romspl; % lowercase specials (dotless \i, ligature \ae, etc.)
+input romspu; % uppercase specials (\AE, \OE, \O)
+input punct; % punctuation symbols common to roman and italic text
+input accent; % accents common to roman and italic text
+if ligs>1: input romlig; fi % letter ligatures
+if ligs>0: input comlig; fi % ligatures common with italic text
+if ligs<=1: input romsub; fi % substitutes for ligatures
+
+ligtable "!": "`" =: spanish_shriek;
+ligtable "?": "`" =: spanish_query;
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+ k#:=-.5u#; kk#:=-1.5u#; kkk#:=-2u#; % three degrees of kerning
+ ligtable "k": if serifs: "v": "a" kern -u#, fi\\"w": "e" kern k#,
+ "a" kern k#, "o" kern k#, "c" kern k#;
+ ligtable "P": "A" kern kk#,
+ "y": "o" kern k#, "e" kern k#, "a" kern k#, "." kern kk#, "," kern kk#;
+ ligtable "F": "V": "W": if serifs: "o" kern kk#, "e" kern kk#, "u" kern kk#,
+ "r" kern kk#, "a" kern kk#, "A" kern kkk#,
+ else: "o" kern k#, "e" kern k#, "u" kern k#,
+ "r" kern k#, "a" kern k#, "A" kern kk#, fi
+ "K": "X": "O" kern k#, "C" kern k#, "G" kern k#, "Q" kern k#;
+ ligtable "T": "y" kern if serifs: k# else: kk# fi,
+ "Y": "e" kern kk#, "o" kern kk#,
+ "r" kern kk#, "a" kern kk#, "A" kern kk#, "u" kern kk#;
+ ligtable "O": "D": "X" kern k#, "W" kern k#, "A" kern k#,
+ "V" kern k#, "Y" kern k#;
+ if serifs: ligtable "h": "m": "n":
+ "t" kern k#, "u" kern k#, "b" kern k#, "y" kern k#, "v" kern k#, "w" kern k#;
+ ligtable "c": "h" kern k#, "k" kern k#; fi
+ ligtable "o": "b": "p": "e" kern -k#, "o" kern -k#, "x" kern k#,
+ "d" kern -k#, "c" kern -k#, "q" kern -k#,
+ "a": if serifs: "v" kern k#, "j" kern u#, else: "r" kern k#, fi
+ "t": "y" kern k#,
+ "u": "w" kern k#;
+ ligtable "A": if serifs: "R": fi\\ "t" kern k#,
+ "C" kern k#, "O" kern k#, "G" kern k#, "U" kern k#, "Q" kern k#,
+ "L": "T" kern kk#, "Y" kern kk#, "V" kern kkk#, "W" kern kkk#;
+ ligtable "g": "j" kern -k#; % logjam
+ ligtable "I": "I" kern -k#; fi % Richard III
+ % there are ligature/kern programs for |"f"| in the {\tt romlig} file
+ % and for |"-"|, |"`"|, and |"'"| in the {\tt comlig} file
+bye.
+
diff --git a/fonts/latex/mf/sromanu.mf b/fonts/latex/mf/sromanu.mf
new file mode 100644
index 0000000000..ddc3b215b0
--- /dev/null
+++ b/fonts/latex/mf/sromanu.mf
@@ -0,0 +1,54 @@
+% File: MF Inputs sromanu.mf
+% Author: Pierre A. MacKay
+% Internet: mackay@cs.washington.edu
+% Date: June 25, 1991
+%
+% This for the SLITeX fonts: lcmss8, lcmssb8, lcmssi8.
+% All characters in romanu.mf except I are generated
+% A special I with slab serifs is then substituted for the
+% normal, confusing, sans-serif I of cmss* fonts.
+% Based on the macros in the METAFONTbook, Appendix E,
+% page 307 & 312. Just as in the case of the iff
+% macro, this depends on the expectation that every
+% character program will end with endchar.
+
+string currenttitle;
+def exclude_I expr t =
+ currenttitle:= t;
+ if t = "The letter I" : let next_ = lose_it_
+ else: let next_ = use_it_ fi; next_ enddef;
+% Add _ to the macro names used by iff to avoid confusion.
+def use_it_ = relax; enddef;
+def lose_it_ = let endchar = fi; let ; = fix_ semi_
+ if false: enddef;
+let cmchar = exclude_I;
+input romanu
+let cmchar=relax;
+
+% Uppercase I provided by Pierre A. MacKay, in June l986.
+% The I has slab serifs based on the proportions of
+% the upper and lower horizontals of upper case E.
+
+cmchar "The letter I";
+beginchar("I",max(6u#,4u#+cap_stem#),cap_height#,0);
+italcorr cap_height#*slant-.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
+lft x1l=lft x2l=hround(.5w-.5cap_stem); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+pickup crisp.nib; % arms based on proportions of uppercase E
+pos3(slab,90); pos4(slab if not serifs:+2stem_corr fi,-90);
+x3=x4=x1; top y3r=h; bot y4r=0;
+pos5(hair,0); pos6(hair,0); % top and bottom right arms
+rt x5r=rt x6r=hround(w-u);
+pos7(hair,180); pos8(hair,180); % top and bottom left arms
+lft x7r=lft x8r=hround(u);
+y5=y7=good.y(y3l-beak)-eps; % beak in case we ever want a beaked serif!
+y6=y8=good.y(y4l+beak)+eps; % watch that this doesn't get too heavy
+arm(3,5,a,darkness,jut); arm(3,7,b,darkness,jut); % top left and right arms
+arm(4,6,c,darkness,jut); arm(4,8,d,darkness,jut); % bottom left and right
+if serifs: dish_serif(1,2,a,1/3,1.05cap_jut,b,1/3,1.05cap_jut); % upper serif
+ dish_serif(2,1,c,1/3,1.05cap_jut,d,1/3,1.05cap_jut); fi % lower serif
+math_fit(0,.5ic#); penlabels(1,2,3,4,5,6,7,8); endchar;
+
+endinput;
diff --git a/fonts/latex/tfm/icmcsc10.tfm b/fonts/latex/tfm/icmcsc10.tfm
new file mode 100644
index 0000000000..e6055d9002
--- /dev/null
+++ b/fonts/latex/tfm/icmcsc10.tfm
Binary files differ
diff --git a/fonts/latex/tfm/icmex10.tfm b/fonts/latex/tfm/icmex10.tfm
new file mode 100644
index 0000000000..e750bf70a0
--- /dev/null
+++ b/fonts/latex/tfm/icmex10.tfm
Binary files differ
diff --git a/fonts/latex/tfm/icmmi8.tfm b/fonts/latex/tfm/icmmi8.tfm
new file mode 100644
index 0000000000..b194053127
--- /dev/null
+++ b/fonts/latex/tfm/icmmi8.tfm
Binary files differ
diff --git a/fonts/latex/tfm/icmsy8.tfm b/fonts/latex/tfm/icmsy8.tfm
new file mode 100644
index 0000000000..f95d4b3f69
--- /dev/null
+++ b/fonts/latex/tfm/icmsy8.tfm
Binary files differ
diff --git a/fonts/latex/tfm/icmtt8.tfm b/fonts/latex/tfm/icmtt8.tfm
new file mode 100644
index 0000000000..4987f1ac95
--- /dev/null
+++ b/fonts/latex/tfm/icmtt8.tfm
Binary files differ
diff --git a/fonts/latex/tfm/ilasy8.tfm b/fonts/latex/tfm/ilasy8.tfm
new file mode 100644
index 0000000000..5f63edeb37
--- /dev/null
+++ b/fonts/latex/tfm/ilasy8.tfm
Binary files differ
diff --git a/fonts/latex/tfm/ilcmss8.tfm b/fonts/latex/tfm/ilcmss8.tfm
new file mode 100644
index 0000000000..0fbb80c7c9
--- /dev/null
+++ b/fonts/latex/tfm/ilcmss8.tfm
Binary files differ
diff --git a/fonts/latex/tfm/ilcmssb8.tfm b/fonts/latex/tfm/ilcmssb8.tfm
new file mode 100644
index 0000000000..2ff3cdccde
--- /dev/null
+++ b/fonts/latex/tfm/ilcmssb8.tfm
Binary files differ
diff --git a/fonts/latex/tfm/ilcmssi8.tfm b/fonts/latex/tfm/ilcmssi8.tfm
new file mode 100644
index 0000000000..11934baa8f
--- /dev/null
+++ b/fonts/latex/tfm/ilcmssi8.tfm
Binary files differ
diff --git a/fonts/latex/tfm/lasy10.tfm b/fonts/latex/tfm/lasy10.tfm
new file mode 100644
index 0000000000..40618362e1
--- /dev/null
+++ b/fonts/latex/tfm/lasy10.tfm
Binary files differ
diff --git a/fonts/latex/tfm/lasy5.tfm b/fonts/latex/tfm/lasy5.tfm
new file mode 100644
index 0000000000..ae91755cff
--- /dev/null
+++ b/fonts/latex/tfm/lasy5.tfm
Binary files differ
diff --git a/fonts/latex/tfm/lasy6.tfm b/fonts/latex/tfm/lasy6.tfm
new file mode 100644
index 0000000000..1c714743df
--- /dev/null
+++ b/fonts/latex/tfm/lasy6.tfm
Binary files differ
diff --git a/fonts/latex/tfm/lasy7.tfm b/fonts/latex/tfm/lasy7.tfm
new file mode 100644
index 0000000000..76985f4c94
--- /dev/null
+++ b/fonts/latex/tfm/lasy7.tfm
Binary files differ
diff --git a/fonts/latex/tfm/lasy8.tfm b/fonts/latex/tfm/lasy8.tfm
new file mode 100644
index 0000000000..3e5c26c074
--- /dev/null
+++ b/fonts/latex/tfm/lasy8.tfm
Binary files differ
diff --git a/fonts/latex/tfm/lasy9.tfm b/fonts/latex/tfm/lasy9.tfm
new file mode 100644
index 0000000000..8fa044196d
--- /dev/null
+++ b/fonts/latex/tfm/lasy9.tfm
Binary files differ
diff --git a/fonts/latex/tfm/lasyb10.tfm b/fonts/latex/tfm/lasyb10.tfm
new file mode 100644
index 0000000000..446e346d91
--- /dev/null
+++ b/fonts/latex/tfm/lasyb10.tfm
Binary files differ
diff --git a/fonts/latex/tfm/lcircle10.tfm b/fonts/latex/tfm/lcircle10.tfm
new file mode 100644
index 0000000000..0aaee79a79
--- /dev/null
+++ b/fonts/latex/tfm/lcircle10.tfm
Binary files differ
diff --git a/fonts/latex/tfm/lcirclew10.tfm b/fonts/latex/tfm/lcirclew10.tfm
new file mode 100644
index 0000000000..d8a9a74034
--- /dev/null
+++ b/fonts/latex/tfm/lcirclew10.tfm
Binary files differ
diff --git a/fonts/latex/tfm/lcmss8.tfm b/fonts/latex/tfm/lcmss8.tfm
new file mode 100644
index 0000000000..a43be91826
--- /dev/null
+++ b/fonts/latex/tfm/lcmss8.tfm
Binary files differ
diff --git a/fonts/latex/tfm/lcmssb8.tfm b/fonts/latex/tfm/lcmssb8.tfm
new file mode 100644
index 0000000000..f848b9c98c
--- /dev/null
+++ b/fonts/latex/tfm/lcmssb8.tfm
Binary files differ
diff --git a/fonts/latex/tfm/lcmssi8.tfm b/fonts/latex/tfm/lcmssi8.tfm
new file mode 100644
index 0000000000..e53e6c73b4
--- /dev/null
+++ b/fonts/latex/tfm/lcmssi8.tfm
Binary files differ
diff --git a/fonts/latex/tfm/line10.tfm b/fonts/latex/tfm/line10.tfm
new file mode 100644
index 0000000000..85c66fa5c8
--- /dev/null
+++ b/fonts/latex/tfm/line10.tfm
Binary files differ
diff --git a/fonts/latex/tfm/linew10.tfm b/fonts/latex/tfm/linew10.tfm
new file mode 100644
index 0000000000..68036a39b3
--- /dev/null
+++ b/fonts/latex/tfm/linew10.tfm
Binary files differ