Category : EmTeX is a TeX/LaTeX document editor
Archive   : MISC_MF.ZIP
Filename : CMMAN.MF

 
Output of file : CMMAN.MF contained in archive : MISC_MF.ZIP
% Variants of Computer Modern, specially for the TeX/METAFONT manuals

if unknown cmbase: input cmbase fi
mode_setup;

def generate suffix t= enddef;

inner cmchar;

font_size 10pt#;
font_identifier "CMMAN";
font_coding_scheme "PI";

input cmtt10; font_setup;

cmchar "Cross between 0 and O";
beginchar("0",9u#,fig_height#,0);
italcorr fig_height#*slant-.5u#;
adjust_fit(0,0);
penpos1(vair,90); penpos3(vair,-90); penpos2(curve,180); penpos4(curve,0);
superness:=.77;
x2r=round max(.7u,1.45u-.5curve); x4r=w-x2r; x1=x3=.5w;
y1r=h+o; y3r=-o; y2=y4=.5h-vair_corr; y2l:=y4l:=.52h;
penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
& pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle; % bowl
penlabels(1,2,3,4); endchar;

input cmssq8; slant:=sind 12/cosd 12; font_setup;

cmchar "Lowercase Greek beta";
beginchar(oct"014",9.5u#,asc_height#,desc_depth#);
italcorr .5[x_height#,asc_height#]*slant-u#;
adjust_fit(0,0); pickup fine.nib;
pos0(hair,180); pos1(hair,180); pos2(vair,90);
pos3(stem,0); pos4(vair,-90); pos5(hair,-180);
pos6(vair,-270); pos7(curve,-360); pos8(vair,-450); pos9(hair,-540);
x0=x1=x9; lft x0l=hround(1.5u-.5hair); x2=x4=x6=x8=.5w+.25u;
rt x3r=hround(w-1.5u); rt x7r=hround(w-1.5u+.5curve); rt x5l=hround(x4-u);
bot y0=-d; y1=top y6r=x_height; top y2r=h+oo; y3=.5[y2,y4];
y5=.5[y4,y6]; top y6r-bot y4r=vstem+eps; bot y8=-oo; y7=y9=.5[y6,y8];
if y6l filldraw stroke z0e---z1e...pulled_arc.e(2,3)
& pulled_arc.e(3,4)...{up}z5e; % stem and upper bowl
filldraw stroke z5e{up}...pulled_arc.e(6,7)
& pulled_arc.e(7,8)...{up}z9e; % lower bowl
math_fit(desc_depth#*slant+.5hair#-u#,.7x_height#*slant+.5curve#-1.5u#);
penlabels(0,1,2,3,4,5,6,7,8,9); endchar;

cmchar "Lowercase thorn";
beginchar(oct"015",10u#+serif_fit#,asc_height#,desc_depth#);
italcorr .5x_height#*slant+min(.5curve#-.85u#,-.1u#);
adjust_fit(serif_fit#,0);
pickup tiny.nib; pos1(stem',0); pos2(stem,0);
pos0'(stem',0); pos0(stem,0); z0l=z0'l; x0'=x1; x0=x2;
lft x1l=hround(2.5u-.5stem'); top y1=h;
numeric edge; edge=rt x2r;
pickup fine.nib; pos3(if hefty:thin_join else: hair fi,180);
pos4(vair',90); pos5(curve,0); pos6(vair,-90);
rt x3l=1/3[rt x2,edge]; y3=1/8[bar_height,x_height];
x4l=w-.5(w-serif_fit)+.5u; top y4r=x_height+oo;
rt x5r=hround min(w-1.35u+.5curve,w-.6u); y5=.5x_height;
x6=x3; bot y6r=-oo;
(x,y4r)=whatever[z3l,z4l]; x4r:=min(x,.5[x5r,x4]);
filldraw stroke z3e{up}...{right}z4e&super_arc.e(4,5)
&z5e{down}...{5(x6-x5),y6-y5}z6e; % bowl
y0=ypart(((edge,h)--(edge,0))intersectionpoint(z3l{up}...{right}z4l));
pickup tiny.nib; bot y2=-d;
filldraw stroke z1e--z0'e--z0e--z2e; % stem
pickup crisp.nib; pos8(hair,0); pos7'(stem,0);
z7'=z2; x8l=x7'l; bot y8=0;
filldraw stroke z7'e--z8e; % point
if serifs: sloped_serif.l(1,0',a,1/3,jut,serif_drop); % upper serif
dish_serif(2,0,b,1/3,jut,c,1/3,0); fi % lower serif
penlabels(0,1,2,3,4,5,6,8); endchar;

input cmr10; font_setup;

message "Parentheses";
code:=ASCII "0"; % the characters will be 123456789:
for c=0,1,2,4,infinity:
cmchar "Left paren with curl "&decimal c;
beginchar(incr code,7u#,body_height#,paren_depth#);
italcorr body_height#*slant-.5u#;
adjust_fit(0,0); pickup fine.nib;
pos1(vair,0); pos2(.75[hair,stem],0); pos3(vair,0);
rt x1r=rt x3r=round(w-u); lft x2l=round(x1-4u if monospace: +4/3u fi);
top y1=h; y2=.5[y1,y3]=math_axis;
filldraw stroke z1e{curl c}..z2e..{curl c}z3e; % arc
penlabels(1,2,3); endchar;

cmchar "Right paren with curl "&decimal c;
beginchar(incr code,7u#,body_height#,paren_depth#);
italcorr math_axis#*slant-.5u#;
adjust_fit(0,0); pickup fine.nib;
pos1(vair,0); pos2(.75[hair,stem],0); pos3(vair,0);
lft x1l=lft x3l=round u; rt x2r=round(x1+4u if monospace: -4/3u fi);
top y1=h; y2=.5[y1,y3]=math_axis;
filldraw stroke z1e{curl c}..z2e..{curl c}z3e; % arc
penlabels(1,2,3); endchar;
endfor

cmchar "Variant letter g";
beginchar("g",10u#+serif_fit#,x_height#,desc_depth#);
italcorr x_height#*slant-serif_fit#+.5stem#-2u# if serifs:+.5u# fi;
adjust_fit(0,serif_fit# if serifs: -.5u# fi);
pickup tiny.nib; pos1(stem',0); pos2(stem,0);
pos0'(stem',0); pos0(stem,0); z0r=z0'r; x0'=x1; x0=x2;
rt x1r=hround(w-2.5u+.5stem');
numeric edge; edge=lft x2l;
path edge_path; edge_path=(edge,h)--(edge,0);
pickup fine.nib; pos3(if hefty:thin_join else: hair fi,0);
pos4(vair,90); pos5(curve,180); pos6(vair,270); penpos7(x3r-x3l,360);
lft x3l=min(lft x3l-(rt x3r-tiny.rt x2r),2/3[lft x2,edge]); y3=bar_height;
x4l=.5(w-serif_fit)-.3u; top y4r=x_height+oo;
lft x5r=hround max(1.35u-.5curve,.6u); y5=.5x_height;
x6l=x4l-.2u; bot y6r=vround 1/3vair;
lft x7l=edge; y7=min(y3,y6+y4-y3+.6vair);
(x,y4r)=whatever[z3l,z4l]; x4r:=max(x,.5[x5r,x4]);
(x',y6r)=whatever[z7l,z6l]; x6r:=max(x',.5[x5r,x6]);
filldraw stroke z3e{up}...{left}z4e&super_arc.e(4,5)
&super_arc.e(5,6)&z6e{right}...{up}z7e; % bowl
y1=ypart(edge_path intersectionpoint(z3l{up}...{left}z4l));
y0=ypart(edge_path intersectionpoint(z7l{down}...{left}z6l));
pickup tiny.nib; bot y2=if serifs: -.25d else: 0 fi;
filldraw stroke z1e--z0'e--z0e--z2e; % stem
pickup crisp.nib;
pos8(hround(hair-stem_corr),0); pos7'(stem',0);
z7'=z1; x8r=x7'r; top y8=h+oo;
filldraw stroke z7'e--z8e; % point
if serifs: pickup tiny.nib;
pos9(vair,-90); x9=.5[x2,x10]; bot y9r=-d-o-1;
pos10(hair,-180); lft x10r=hround u; y10=-.75d+.5flare;
pos11(flare,-180); z11r=z10r;
bulb(9,10,11); filldraw stroke super_arc.e(2,9); % tail
else: pickup fine.nib; pos2'(stem,0); z2'=z2;
z2''r=z2'r; z2''=z2'; z2''l=(x2'l,0);
pos9(vair,-90); x9=4.5u; bot y9r=-d-o-1;
pos10(.5[vair,flare],-90); lft x10=hround 1.25u;
y10r=good.y -5/6d; y10l:=good.y y10l;
filldraw stroke z2'e..z2''e&super_arc.e(2'',9)
& term.e(9,10,left,.9,4); fi % tail
penlabels(0,1,2,3,4,5,6,7,8,9,10,11); endchar;

input cmtt9; font_setup;

cmchar "Variant letter g";
beginchar("x",10u#+serif_fit#,x_height#,desc_depth#);
italcorr x_height#*slant-serif_fit#+.5stem#-2u# if serifs:+.5u# fi;
adjust_fit(0,serif_fit# if serifs: -.5u# fi);
pickup tiny.nib; pos1(stem',0); pos2(stem,0);
pos0'(stem',0); pos0(stem,0); z0r=z0'r; x0'=x1; x0=x2;
rt x1r=hround(w-2.5u+.5stem');
numeric edge; edge=lft x2l;
path edge_path; edge_path=(edge,h)--(edge,0);
pickup fine.nib; pos3(if hefty:thin_join else: hair fi,0);
pos4(vair,90); pos5(curve,180); pos6(vair,270); penpos7(x3r-x3l,360);
lft x3l=min(lft x3l-(rt x3r-tiny.rt x2r),2/3[lft x2,edge]); y3=bar_height;
x4l=.5(w-serif_fit)-.3u; top y4r=x_height+oo;
lft x5r=hround max(1.35u-.5curve,.6u); y5=.5x_height;
x6l=x4l-.2u; bot y6r=vround 1/3vair;
lft x7l=edge; y7=min(y3,y6+y4-y3+.6vair);
(x,y4r)=whatever[z3l,z4l]; x4r:=max(x,.5[x5r,x4]);
(x',y6r)=whatever[z7l,z6l]; x6r:=max(x',.5[x5r,x6]);
filldraw stroke z3e{up}...{left}z4e&super_arc.e(4,5)
&super_arc.e(5,6)&z6e{right}...{up}z7e; % bowl
y1=ypart(edge_path intersectionpoint(z3l{up}...{left}z4l));
y0=ypart(edge_path intersectionpoint(z7l{down}...{left}z6l));
pickup tiny.nib; bot y2=if serifs: -.25d else: 0 fi;
filldraw stroke z1e--z0'e--z0e--z2e; % stem
pickup crisp.nib;
pos8(hround(hair-stem_corr),0); pos7'(stem',0);
z7'=z1; x8r=x7'r; top y8=h+oo;
filldraw stroke z7'e--z8e; % point
if serifs: pickup tiny.nib;
pos9(vair,-90); x9=.5[x2,x10]; bot y9r=-d-o-1;
pos10(hair,-180); lft x10r=hround u; y10=-.75d+.5flare;
pos11(flare,-180); z11r=z10r;
bulb(9,10,11); filldraw stroke super_arc.e(2,9); % tail
else: pickup fine.nib; pos2'(stem,0); z2'=z2;
z2''r=z2'r; z2''=z2'; z2''l=(x2'l,0);
pos9(vair,-90); x9=4.5u; bot y9r=-d-o-1;
pos10(.5[vair,flare],-90); lft x10=hround 1.25u;
y10r=good.y -5/6d; y10l:=good.y y10l;
filldraw stroke z2'e..z2''e&super_arc.e(2'',9)
& term.e(9,10,left,.9,4); fi % tail
penlabels(0,1,2,3,4,5,6,7,8,9,10,11); endchar;

input cmbx9; font_setup;

cmchar "Variant letter g";
beginchar("y",10u#+serif_fit#,x_height#,desc_depth#);
italcorr x_height#*slant-serif_fit#+.5stem#-2u# if serifs:+.5u# fi;
adjust_fit(0,serif_fit# if serifs: -.5u# fi);
pickup tiny.nib; pos1(stem',0); pos2(stem,0);
pos0'(stem',0); pos0(stem,0); z0r=z0'r; x0'=x1; x0=x2;
rt x1r=hround(w-2.5u+.5stem');
numeric edge; edge=lft x2l;
path edge_path; edge_path=(edge,h)--(edge,0);
pickup fine.nib; pos3(if hefty:thin_join else: hair fi,0);
pos4(vair,90); pos5(curve,180); pos6(vair,270); penpos7(x3r-x3l,360);
lft x3l=min(lft x3l-(rt x3r-tiny.rt x2r),2/3[lft x2,edge]); y3=bar_height;
x4l=.5(w-serif_fit)-.3u; top y4r=x_height+oo;
lft x5r=hround max(1.35u-.5curve,.6u); y5=.5x_height;
x6l=x4l-.2u; bot y6r=vround 1/3vair;
lft x7l=edge; y7=min(y3,y6+y4-y3+.6vair);
(x,y4r)=whatever[z3l,z4l]; x4r:=max(x,.5[x5r,x4]);
(x',y6r)=whatever[z7l,z6l]; x6r:=max(x',.5[x5r,x6]);
filldraw stroke z3e{up}...{left}z4e&super_arc.e(4,5)
&super_arc.e(5,6)&z6e{right}...{up}z7e; % bowl
y1=ypart(edge_path intersectionpoint(z3l{up}...{left}z4l));
y0=ypart(edge_path intersectionpoint(z7l{down}...{left}z6l));
pickup tiny.nib; bot y2=if serifs: -.25d else: 0 fi;
filldraw stroke z1e--z0'e--z0e--z2e; % stem
pickup crisp.nib;
pos8(hround(hair-stem_corr),0); pos7'(stem',0);
z7'=z1; x8r=x7'r; top y8=h+oo;
filldraw stroke z7'e--z8e; % point
if serifs: pickup tiny.nib;
pos9(vair,-90); x9=.5[x2,x10]; bot y9r=-d-o-1;
pos10(hair,-180); lft x10r=hround u; y10=-.75d+.5flare;
pos11(flare,-180); z11r=z10r;
bulb(9,10,11); filldraw stroke super_arc.e(2,9); % tail
else: pickup fine.nib; pos2'(stem,0); z2'=z2;
z2''r=z2'r; z2''=z2'; z2''l=(x2'l,0);
pos9(vair,-90); x9=4.5u; bot y9r=-d-o-1;
pos10(.5[vair,flare],-90); lft x10=hround 1.25u;
y10r=good.y -5/6d; y10l:=good.y y10l;
filldraw stroke z2'e..z2''e&super_arc.e(2'',9)
& term.e(9,10,left,.9,4); fi % tail
penlabels(0,1,2,3,4,5,6,7,8,9,10,11); endchar;

message "big G";
u#:=50/36pt#; % unit width
width_adj#:=0pt#; % width adjustment for certain characters
serif_fit#:=0pt#; % extra sidebar near lowercase serifs
cap_serif_fit#:=0/36pt#; % extra sidebar near uppercase serifs
letter_fit#:=0pt#; % extra space added to all sidebars

body_height#:=12pt#+250/36pt#; % height of tallest characters
asc_height#:=body_height#; % height of lowercase ascenders
cap_height#:=body_height#; % height of caps
fig_height#:=body_height#; % height of numerals
x_height#:=155/250asc_height#; % height of lowercase without ascenders
math_axis#:=90/250asc_height#; % axis of symmetry for math symbols
bar_height#:=87/250asc_height#; % height of crossbar in lowercase e
comma_depth#:=70/250asc_height#;% depth of comma below baseline
desc_depth#:=comma_depth#; % depth of lowercase descenders

crisp#:=0pt#; % diameter of serif corners
tiny#:=1.2/36pt#; % diameter of rounded corners
fine#:=1.1/36pt#; % diameter of sharply rounded corners
thin_join#:=1.1/36pt#; % width of extrafine details
hair#:=14/36pt#; % lowercase hairline breadth
stem#:=75/36pt#; % lowercase stem breadth
curve#:=90/36pt#; % lowercase curve breadth
ess#:=81/36pt#; % breadth in middle of lowercase s
flare#:=66/36pt#; % diameter of bulbs or breadth of terminals
dot_size#:=114/36pt#; % diameter of dots
cap_hair#:=17/36pt#; % uppercase hairline breadth
cap_stem#:=96/36pt#; % uppercase stem breadth
cap_curve#:=111/36pt#; % uppercase curve breadth
cap_ess#:=105/36pt#; % breadth in middle of uppercase s
rule_thickness#:=1pt#; % thickness of lines in math symbols

dish#:=2/36pt#; % amount erased at top or bottom of serifs
bracket#:=50/36pt#; % vertical distance from serif base to tangent
jut#:=70/36pt#; % protrusion of lowercase serifs
cap_jut#:=2.5pt#; % protrusion of uppercase serifs
beak_jut#:=25/36pt#; % horizontal protrusion of beak serifs
beak#:=comma_depth#; % vertical protrusion of beak serifs
vair#:=12/36pt#; % vertical diameter of hairlines
notch_cut#:=22pt#; % maximum breadth above or below notches
bar#:=17/36pt#; % lowercase bar thickness
slab#:=17/36pt#; % serif and arm thickness
cap_bar#:=17/36pt#; % uppercase bar thickness
cap_band#:=17/36pt#; % uppercase thickness above/below lobes
cap_notch_cut#:=22pt#; % max breadth above/below uppercase notches
serif_drop#:=10/36pt#; % vertical drop of sloped serifs
stem_corr#:=3/36pt#; % for small refinements of stem breadth
vair_corr#:=2/36pt#; % for small refinements of hairline height
apex_corr#:=0pt#; % extra width at diagonal junctions

o#:=12/36pt#; % amount of overshoot for curves
apex_o#:=12/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?

font_setup;

cmchar "The letter G";
if serifs: beginchar("G",14u#,cap_height#,0);
italcorr cap_height#*slant-1.5u#-.5cap_serif_fit#;
adjust_fit(0,.5cap_serif_fit#);
pickup tiny.nib; pos0(cap_stem,0); pos7(cap_stem,0);
rt x0r=hround(w-2u); y0=good.y(.1[bar_height,x_height]+1); x7=x0;
pickup fine.nib;
if hefty: bot y7=0; pos5(cap_stem,0); x5=x0; top y5=tiny.top y0;
else: pos5(cap_hair,0); pos8(cap_stem,0);
y7=.5bar_height; z5l=z8l; z8=z7; x9=x8r; bot y9=0;
filldraw z8l{down}..{4(x9-x8),y9-y8}z9--z8r--cycle; fi % spur
pos1(cap_hair,0); pos2(cap_band,90);
pos3(cap_curve,180); pos4(cap_band,270);
rt x1r=hround(w-2u); lft x3r=hround u; x2=x4=.55[x3,x1];
top y2r=h+o; bot y4r=-o; y3=.5[y2,y4];
bot y1=vround max(.6h,x_height-.5vair);
(x2l',y2l)=whatever[z2r,z1l]; x2l:=x2l';
(x4l',y4l)=whatever[z4r,z5l]; x4l:=x4l';
filldraw stroke z1e{x2-x1,10(y2-y1)}
...pulled_arc.e(2,3) & pulled_arc.e(3,4)...z5e{up}; % arc
x6=x1r; top y6=h+o; x1r-x1'=2cap_curve-fine; y1'=y1;
path upper_arc; upper_arc=z1{x2-x1,10(y2-y1)}..{left}z2;
numeric t; t=xpart(upper_arc intersectiontimes (z6--z1'));
filldraw subpath(0,t) of upper_arc--z6--z1r--z1--cycle; % barb
pickup tiny.nib; filldraw stroke z0e--z7e; % stem
dish_serif(0,7,a,1/3,max(cap_jut,2.25u),b,1/3,1.25u); % serif
math_fit(-.3cap_height#*slant-.5u#,ic#);
else: beginchar("G",12u#,cap_height#,0);
italcorr cap_height#*slant-.5u#;
adjust_fit(0,0);
pickup fine.nib; pos1(1.2flare,80); pos2(slab,90);
pos3(cap_curve,180); pos4(slab,270); pos5(flare,270);
rt x1r=hround(w-1.35u); x2=x4=.5w+u;
lft x3r=hround max(u,2u-.5cap_curve); rt x5l=hround(w-1.2u);
top y1r=vround .93h+o; top y2r=h+o; y3=.5h;
bot y4r=-o; bot y5r=vround .07h-o;
filldraw stroke rterm.e(2,1,right,.9,4)&super_arc.e(2,3)
& super_arc.e(3,4) & term.e(4,5,right,1,4); % arc and terminals
pos0(stem,0); pos7(stem,0);
z7r=z5r; x0=x7; top y0=1+vround .35[bar_height,x_height];
filldraw stroke z0e--z7e; % stem
pos8(cap_bar,90); pos9(cap_bar,90);
z0r=z9r; y8=y9; lft x8=hround x4;
filldraw stroke z8e--z9e; % bar
math_fit(-.3cap_height#*slant-.5u#,.5ic#); fi
penlabels(0,1,1',2,3,4,5,6,7,8,9); endchar;

message "The TeXbook title";
f:=20/3; % magnification factor (based mostly on cmssdc10)
u#:=f*19/36pt#; % unit width
width_adj#:=f*15/36pt#; % width adjustment for certain characters
serif_fit#:=-f*8/36pt#; % extra sidebar near lowercase serifs
cap_serif_fit#:=-f*9/36pt#; % extra sidebar near uppercase serifs
letter_fit#:=-.2u#; % extra space added to all sidebars

body_height#:=f*270/36pt#; % height of tallest characters
asc_height#:=f*265/36pt#; % height of lowercase ascenders
cap_height#:=f*265/36pt#; % height of caps
fig_height#:=f*265/36pt#; % height of numerals
x_height#:=f*170/36pt#; % height of lowercase without ascenders
math_axis#:=f*95/36pt#; % axis of symmetry for math symbols
bar_height#:=f*95/36pt#; % height of crossbar in lowercase e
comma_depth#:=f*40/36pt#; % depth of comma below baseline
desc_depth#:=f*60/36pt#; % depth of lowercase descenders

crisp#:=5*23/36pt#; % diameter of serif corners
tiny#:=5*23/36pt#; % diameter of rounded corners
fine#:=5*8/36pt#; % diameter of sharply rounded corners
thin_join#:=12*8/36pt#; % width of extrafine details
hair#:=5*40/36pt#; % lowercase hairline breadth
stem#:=5*40/36pt#; % lowercase stem breadth
curve#:=5*40/36pt#; % lowercase curve breadth
ess#:=5*37/36pt#; % breadth in middle of lowercase s
flare#:=5*31/36pt#; % diameter of bulbs or breadth of terminals
dot_size#:=5*38/36pt#; % diameter of dots
cap_hair#:=5*40/36pt#; % uppercase hairline breadth
cap_stem#:=5*44/36pt#; % uppercase stem breadth
cap_curve#:=5*44/36pt#; % uppercase curve breadth
cap_ess#:=5*42/36pt#; % breadth in middle of uppercase s
rule_thickness#:=5*25/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#:=f*1.5/36pt#; % vertical protrusion of beak serifs
vair#:=6*23/36pt#; % vertical diameter of hairlines
notch_cut#:=6*40/36pt#; % maximum breadth above or below notches
bar#:=6*23/36pt#; % lowercase bar thickness
slab#:=6*31/36pt#; % serif and arm thickness
cap_bar#:=6*29/36pt#; % uppercase bar thickness
cap_band#:=6*27/36pt#; % uppercase thickness above/below lobes
cap_notch_cut#:=6*37/36pt#; % max breadth above/below uppercase notches
serif_drop#:=f*2/36pt#; % vertical drop of sloped serifs
stem_corr#:=5*1/36pt#; % for small refinements of stem breadth
vair_corr#:=5*2/36pt#; % for small refinements of hairline height
apex_corr#:=f*14/36pt#; % extra width at diagonal junctions

o#:=f*7/36pt#; % amount of overshoot for curves
apex_o#:=0pt#; % amount of overshoot for diagonal junctions

slant:=0; % tilt ratio $(\Delta x/\Delta y)$
fudge:=.91; % factor applied to weights of heavy characters
math_spread:=-.3; % extra openness of math symbols
superness:=.74; % parameter for superellipses
superpull:=1/18; % 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?

font_setup;

cmchar "The letter T";
beginchar("T",13u#-width_adj#,cap_height#,0);
italcorr cap_height#*slant-beak_jut#-.25u#;
adjust_fit(0,0);
h:=vround(h-2stem_corr);
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; pos3(slab,90); pos4(hair,0);
top y3r=h; x3=x1; rt x4r=hround(w-.65u); y4=good.y(y3l-beak);
arm(3,4,e,beak_darkness,.7beak_jut); % right arm and beak
pos5(hair,180); x5=w-x4; y5=y4;
arm(3,5,f,beak_darkness,-.7beak_jut); % left arm and beak
if serifs: dish_serif(1,2,a,1/3,.5cap_jut,b,1/3,.5cap_jut); % upper bracketing
dish_serif(2,1,c,1/3,1.414cap_jut,d,1/3,1.414cap_jut); fi % lower serif
math_fit(-.75cap_height#*slant,ic#-2.5u#); penlabels(1,2,3,4,5,6); endchar;

cmchar "The letter h";
beginchar("h",10u#,asc_height#,0);
italcorr .5[bar_height#,x_height#]*slant-serif_fit#+.5stem#-2u#;
adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
pickup tiny.nib; pos1(stem,0); pos2(stem,0);
pos1'(stem',0); pos2'(stem',0); pos3(stem,0);
lft x1l=hround(2.5u-.5stem); x1l=x1'l=x2l=x2'l; x3=w-x1;
top y1=h; bot y2=0; y1=y1'; y2=y2';
filldraw stroke z1'e--z2'e; % left stem
h_stroke(2,a,3,4); % arch and right stem
if serifs: sloped_serif.l(1',2',b,1/3,jut,serif_drop); % upper left serif
numeric inner_jut; pickup tiny.nib;
if rt x2r+jut+.5u+1<=lft x4l-jut: inner_jut=jut;
else: rt x2r+jut+.5u+1=lft x4l-inner_jut; fi
dish_serif(2,1,c,1/3,jut,d,1/3,jut); % lower left serif
dish_serif(4,3,e,1/3,inner_jut,f,1/3,jut); fi % lower right serif
penlabels(1,2,3,4); endchar;

cmchar "The letter e";
beginchar("e",7.25u#+max(.75u#,.5curve#),x_height#,0);
italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
adjust_fit(if monospace: .25u#,.5u# else: 0,0 fi);
numeric left_curve,right_curve;
left_curve=right_curve+6stem_corr=curve if not serifs: -3stem_corr fi;
if right_curve if left_curve pickup tiny.nib; pos1(right_curve,0);
pos2(vair,90); pos3(left_curve,180);
y1=good.y bar_height; top y2r=h+vround 1.5oo; y0l=bot y1;
rt x1r=hround min(w-.5u,w-u+.5right_curve);
lft x3r=hround max(.5u,1.25u-.5left_curve); x2=.5w+.25u;
{{interim superness:=more_super;
filldraw stroke super_arc.e(1,2)}}; % right bowl
y3=.5[y2,y4]; bot y4r=-oo; x4=x2+.25u;
if serifs: pos4(vair',270); pos5(hair,360);
y5=max(good.y(.5bar_height-.9),y4l+vair); x5r=x1r;
(x,y4l)=whatever[z4r,z5]; x4l:=x;
filldraw stroke pulled_arc.e(2,3) & pulled_arc.e(3,4)
...{x5-x4,5(y5-y4)}z5e; % left bowl, arc, and terminal
else: pos4(vair,270);
filldraw stroke super_arc.e(2,3) & super_arc.e(3,4); % left bowl and arc
pickup fine.nib; pos4'(vair,270); z4=z4';
pos5(.5[vair,flare],275); rt x5r=hround(w-.6u);
y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
filldraw stroke term.e(4',5,right,1,4); fi % terminal
path testpath; testpath=super_arc.r(2,3) & super_arc.r(3,4);
y1'r=y0r=y0l+.6[thin_join,vair]; y1'l=y0l; x1'l=x1'r=x1;
forsuffixes $=l,r:
x0$=xpart(((0,y0$)--(x1,y0$)) intersectionpoint testpath); endfor
fill stroke z0e--z1'e; % crossbar
penlabels(0,1,2,3,4,5); endchar;

cmchar "The letter E";
beginchar("E",12u#-width_adj#,cap_height#,0);
italcorr cap_height#*slant-beak_jut#-.5u#;
adjust_fit(cap_serif_fit#,0);
h:=vround(h-stem_corr);
pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
lft x1l=lft x2l=hround max(2u,3u-.5cap_stem); top y1=h; bot y2=0;
filldraw stroke z1e--z2e; % stem
pickup crisp.nib; pos3(slab,90); pos4(hair,0);
top y3r=h; x3=x1; rt x4r=hround(w-u); y4=good.y(y3l-beak);
arm(3,4,e,beak_darkness,beak_jut); % upper arm and beak
pos5(cap_bar,-90); pos6(hair,0);
top y5l=vround(.52[y2,y1]+.5cap_bar); x5=x1;
pos0(cap_bar,90); pos7(hair,0);
z0=z5; x6=x7; y6-y5l=y0l-y7;
if serifs: rt x6r=hround(w-4.4u+.5hair); y6=good.y(y5l+.6beak);
rt x9r=hround(w-.5u);
else: rt x6r=hround(w-1.5u); y6=y5l; rt x9r=hround(w-.75u); fi
arm(5,6,f,beak_darkness,0); arm(0,7,g,beak_darkness,0); % middle arm and serif
pos8(slab if not serifs:+2stem_corr fi,-90); pos9(hair,0);
bot y8r=0; x8=x2; y9=y8l+7/6beak;
arm(8,9,h,beak_darkness,1.5beak_jut); % lower arm and beak
if serifs: dish_serif(1,2,a,1/3,cap_jut,b,1/3,.5cap_jut); % upper serif
dish_serif(2,1,c,1/3,cap_jut,d,1/3,.5cap_jut); fi % lower serif
math_fit(0,.5ic#); penlabels(0,1,2,3,4,5,6,7,8,9); endchar;

cmchar "The letter X";
beginchar("X",13u#,cap_height#,0);
italcorr cap_height#*slant-.25u#;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
numeric stem[],outer_jut,xjut,alpha[];
stem1=cap_stem-2stem_corr; stem2=min(cap_hair,stem1);
outer_jut=.75cap_jut; xjut= if serifs: (stem1-stem2)/4 else: 0 fi;
x1l=l+letter_fit+.5u+outer_jut; x2r=r-letter_fit-u-outer_jut-xjut;
x3l=l+letter_fit+.25u+outer_jut+xjut; x4r=r-letter_fit-.25u-outer_jut;
y1=y2=h; y3=y4=0;
alpha1=diag_ratio(1,stem1,h,x4r-x1l);
alpha2=diag_ratio(1,stem2,h,x2r-x3l);
penpos1(alpha1*stem1,0); penpos2(alpha2*stem2,0);
penpos3(alpha2*stem2,0); penpos4(alpha1*stem1,0);
if hefty: z0=whatever[z1,z4]=whatever[z2,z3];
x12=x34=x0; y13=y24=y0;
z12=whatever[z2l,z3l]; z13=whatever[z2l,z3l];
z24=whatever[z2r,z3r]; z34=whatever[z2r,z3r];
forsuffixes $=13,24,34: z$'=.1[z$,z0]; endfor
fill diag_end(12,1r,.5,1,1l,13')--z13'--diag_end(13',3l,1,.5,3r,34')--z34'
--diag_end(34',4l,.5,1,4r,24')--z24'
--diag_end(24',2r,1,.5,2l,12)--z12--cycle; % diagonals
else: fill diag_end(4r,1r,.5,1,1l,4l)
--diag_end(1l,4l,.5,1,4r,1r)--cycle; % left diagonal
fill diag_end(2l,3l,.5,1,3r,2r)
--diag_end(3r,2r,.5,1,2l,3l)--cycle; fi % right diagonal
if serifs: numeric inner_jut[]; pickup tiny.nib;
prime_points_inside(1,4); prime_points_inside(2,3);
prime_points_inside(3,2); prime_points_inside(4,1);
if rt x1'r+cap_jut+.5u+1<=lft x2'l-cap_jut-xjut: inner_jut1=cap_jut;
else: rt x1'r+inner_jut1+.5u+1=lft x2'l-inner_jut1-xjut; fi
if rt x3'r+cap_jut+.5u+1<=lft x4'l-cap_jut-xjut: inner_jut2=cap_jut;
else: rt x3'r+inner_jut2+.5u+1=lft x4'l-inner_jut2-xjut; fi
dish_serif(1',4,a,1/3,outer_jut,b,2/3,inner_jut1); % upper left serif
dish_serif(4',1,c,2/3,inner_jut2,d,1/3,outer_jut); % lower right serif
dish_serif(2',3,e,2/3,inner_jut1+xjut,
f,1/2,outer_jut+xjut)(dark); % upper right serif
dish_serif(3',2,g,1/2,outer_jut+xjut,
h,2/3,inner_jut2+xjut)(dark); fi % lower left serif
math_fit(0,.5ic#); penlabels(0,1,2,3,4,12,13,24,34); endchar;

cmchar "The letter b";
beginchar("b",10u#+serif_fit#,asc_height#,0);
italcorr .5x_height#*slant+min(.5curve#-u#,-.25u#);
adjust_fit(serif_fit#,0);
pickup tiny.nib; pos1(stem',0); pos2(stem,0);
pos0'(stem',0); pos0(stem,0); z0l=z0'l; x0'=x1; x0=x2;
lft x1l=hround(2.5u-.5stem'); top y1=h;
numeric edge; edge=rt x2r;
pickup fine.nib; pos3(if hefty:thin_join else: hair fi,180);
pos4(vair,90); pos5(curve,0);
pos6(vair,-90); penpos7(x3l-x3r,-180);
rt x3l=1/3[rt x2,edge]; y3=1/8[bar_height,x_height];
x4l=w-.5(w-serif_fit)+.5u; top y4r=x_height+oo;
rt x5r=hround min(w-1.35u+.5curve,w-.6u); y5=.5x_height;
x6l=x4l-.2u; bot y6r=-oo;
x7=x3; y7=min(y3,y6+y4-y3+.6vair);
(x,y4r)=whatever[z3l,z4l]; x4r:=min(x,.5[x4,x5r]);
(x',y6r)=whatever[z7l,z6l]; x6r:=min(x',.5[x6,x5r]);
filldraw stroke z3e{up}...pulled_arc.e(4,5)&pulled_arc.e(5,6)...{up}z7e; % bowl
y0=ypart(((edge,h)--(edge,0))intersectionpoint(z3l{up}...{right}z4l));
y2=ypart(((edge,h)--(edge,0))intersectionpoint(z6l{left}...{up}z7l));
pickup tiny.nib; filldraw stroke z1e--z0'e--z0e--z2e; % stem
pickup crisp.nib; pos8(hair,0); pos7'(stem,0);
z7'=z2; x8l=x7'l; bot y8=0;
filldraw stroke z7'e--z8e; % point
if serifs: sloped_serif.l(1,0',a,1/3,jut,serif_drop); fi % upper serif
penlabels(0,1,2,3,4,5,6,7,8); endchar;

cmchar "The letter o";
beginchar("o",9u#,x_height#,0);
italcorr .7x_height#*slant;
adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
penpos1(vair,90); penpos3(vair',-90);
penpos2(curve,180); penpos4(curve,0);
x2r=hround max(.5u,1.25u-.5curve);
x4r=w-x2r; x1=x3=.5w; y1r=h+vround 1.5oo; y3r=-oo;
y2=y4=.5h-vair_corr; y2l:=y4l:=.52h;
penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
& pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle; % bowl
penlabels(1,2,3,4); endchar;

cmchar "The letter k";
beginchar("k",9.5u#,asc_height#,0);
italcorr x_height#*slant-.2u#;
adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib;
numeric right_jut,stem[],alpha[];
stem1=max(tiny.breadth,hround(fudged.stem-stem_corr));
stem2=max(tiny.breadth,hround(fudged.stem-2stem_corr));
stem3=max(tiny.breadth,hround(fudged.hair-4stem_corr));
stem4=max(tiny.breadth,hround(fudged.stem-3stem_corr));
if serifs: right_jut=.6jut; else: right_jut=.4tiny; fi
pos1(stem1,0); pos2(stem2,0); top y1=h; bot y2=0;
lft x1l=lft x2l=hround(2.5u-.5stem1);
top y3=x_height; rt x3r=hround(r-letter_fit-.7u-right_jut);
bot y6=0; rt x6r=hround(r-letter_fit-.3u-right_jut);
x4=x11=x1; y4=.7bar_height; y11=y3;
alpha1=diag_ratio(1,.5(stem3-tiny),y3-y4,x3r-x4);
alpha2=diag_ratio(1,.5(stem4-tiny),y11-y6,x6r-x1);
penpos3(alpha1*(stem3-tiny),0); penpos4(whatever,-90);
z5=.5[z5l,z5r]; penpos6(alpha2*(stem4-tiny),0);
forsuffixes $=l,r: y3'$=x_height; y6'$=0; z4$=z3'$+whatever*(z3-z4);
z5$=z6'$+whatever*(z11-z6)=whatever[z3,z4]; endfor
z3'r=z3r+penoffset z3-z4 of currentpen+whatever*(z3-z4);
% we have also |z3'l=z3l+penoffset z4-z3 of currentpen+whatever*(z3-z4)|;\]
z6'r=z6r+penoffset z11-z6 of currentpen+whatever*(z11-z6);
z6'l=z6l+penoffset z6-z11 of currentpen+whatever*(z11-z6);
fill z4r--diag_end(4r,3'r,1,.5,3'l,4l)--z4l--cycle; % upper diagonal
fill z5l--diag_end(5l,6'l,.5,1,6'r,5r)--z5r--cycle; % lower diagonal
pos0(stem1,0); pos0'(stem2,0); y0=y0'; x0=x1; x0'=x2;
rt z0r=whatever[z3,z4]; filldraw stroke z1e..z0e--z0'e..z2e; % stem
if serifs: numeric inner_jut;
if rt x2r+jut+.5u+1<=lft x6l-jut: inner_jut=jut;
else: rt x2r+inner_jut+.5u+1=lft x6l-inner_jut; fi
sloped_serif.l(1,0,a,1/3,jut,serif_drop); % upper stem serif
dish_serif(2,0',b,1/3,jut,c,1/3,inner_jut); % lower stem serif
dish_serif(3,4,d,2/3,1.4jut,e,1/2,right_jut)(dark); % upper diagonal serif
dish_serif(6,5,f,1/2,inner_jut,g,1/3,right_jut)(dark);fi % lower diagonal serif
penlabels(0,1,2,3,4,5,6,11); endchar;

font_size 10pt#;
font_identifier "CMMAN";
font_coding_scheme "PI";
bye


  3 Responses to “Category : EmTeX is a TeX/LaTeX document editor
Archive   : MISC_MF.ZIP
Filename : CMMAN.MF

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/