% This was CMR10.MF in text format, as of Mar 31, 1986. % Computer Modern Roman 10 point % % Now it is MULTICM10.MF % version 13 D\'ecembre 1992, 12:52:25 % by Yannis Haralambous (yannis@gat.citilille.fr) % % To use the file with other letters than "a", go to ### if unknown cmbase: input cmbase fi font_identifier:="MULTICM"; font_size 10pt#; def para(expr lll,mmm,nnn,ooo) = u#:=lll*20/36pt#+mmm*23/36pt#+nnn*21/36pt#+ooo*22/36pt#; % unit width width_adj#:=lll*0pt#+mmm*11/36pt#+nnn*0pt#+ooo*22/36pt#; % width adjustment for certain characters serif_fit#:=lll*0pt#+mmm*0pt#+nnn*0pt#-ooo*9/36pt#; % extra sidebar near lowercase serifs cap_serif_fit#:=lll*5/36pt#+mmm*7/36pt#+nnn*0pt#-ooo*11/36pt#; % extra sidebar near uppercase serifs letter_fit#:=0pt#; % extra space added to all sidebars body_height#:=lll*270/36pt#+mmm*270/36pt#+nnn*250/36pt#+ooo*270/36pt#; % height of tallest characters asc_height#:=lll*250/36pt#+mmm*250/36pt#+nnn*220/36pt#+ooo*250/36pt#; % height of lowercase ascenders cap_height#:=lll*246/36pt#+mmm*247/36pt#+nnn*220/36pt#+ooo*250/36pt#; % height of caps fig_height#:=lll*232/36pt#+mmm*232/36pt#+nnn*220/36pt#+ooo*250/36pt#; % height of numerals x_height#:=lll*155/36pt#+mmm*160/36pt#+nnn*155/36pt#+ooo*165/36pt#; % height of lowercase without ascenders math_axis#:=lll*90/36pt#+mmm*90/36pt#+nnn*110/36pt#+ooo*90/36pt#; % axis of symmetry for math symbols bar_height#:=lll*87/36pt#+mmm*85/36pt#+nnn*79/36pt#+ooo*90/36pt#; % height of crossbar in lowercase e comma_depth#:=lll*70/36pt#+mmm*70/36pt#+nnn*50/36pt#+ooo*38/36pt#; % depth of comma below baseline desc_depth#:=lll*70/36pt#+mmm*70/36pt#+nnn*80/36pt#+ooo*70/36pt#; % depth of lowercase descenders crisp#:=lll*0pt#+mmm*0pt#+nnn*22/36pt#+ooo*26/36pt#; % diameter of serif corners tiny#:=lll*8/36pt#+mmm*13/36pt#+nnn*22/36pt#+ooo*26/36pt#; % diameter of rounded corners fine#:=lll*7/36pt#+mmm*10/36pt#+nnn*21/36pt#+ooo*9/36pt#; % diameter of sharply rounded corners thin_join#:=lll*7/36pt#+mmm*10/36pt#+nnn*21/36pt#+ooo*9/36pt#; % width of extrafine details hair#:=lll*9/36pt#+mmm*17/36pt#+nnn*25/36pt#+ooo*49/36pt#; % lowercase hairline breadth stem#:=lll*25/36pt#+mmm*41/36pt#+nnn*25/36pt#+ooo*49/36pt#; % lowercase stem breadth curve#:=lll*30/36pt#+mmm*46/36pt#+nnn*25/36pt#+ooo*49/36pt#; % lowercase curve breadth ess#:=lll*27/36pt#+mmm*38/36pt#+nnn*22/36pt#+ooo*43/36pt#; % breadth in middle of lowercase s flare#:=lll*33/36pt#+mmm*45/36pt#+nnn*32/36pt#+ooo*40/36pt#; % diameter of bulbs or breadth of terminals dot_size#:=lll*38/36pt#+mmm*56/36pt#+nnn*36/36pt#+ooo*47/36pt#; % diameter of dots cap_hair#:=lll*11/36pt#+mmm*19/36pt#+nnn*25/36pt#+ooo*49/36pt#; % uppercase hairline breadth cap_stem#:=lll*32/36pt#+mmm*51/36pt#+nnn*25/36pt#+ooo*53/36pt#; % uppercase stem breadth cap_curve#:=lll*37/36pt#+mmm*55/36pt#+nnn*25/36pt#+ooo*53/36pt#; % uppercase curve breadth cap_ess#:=lll*35/36pt#+mmm*53/36pt#+nnn*25/36pt#+ooo*51/36pt#; % breadth in middle of uppercase s rule_thickness#:=lll*.4pt#+mmm*.6pt#+nnn*25/36pt#+ooo*30/36pt#; % thickness of lines in math symbols dish#:=lll*1/36pt#+mmm*1/36pt#+nnn*0pt#+ooo*0pt#; % amount erased at top or bottom of serifs bracket#:=lll*20/36pt#+mmm*10/36pt#+nnn*0pt#+ooo*0pt#; % vertical distance from serif base to tangent jut#:=lll*28/36pt#+mmm*25/36pt#+nnn*34/36pt#+ooo*0pt#; % protrusion of lowercase serifs cap_jut#:=lll*37/36pt#+mmm*39/36pt#+nnn*34/36pt#+ooo*0pt#; % protrusion of uppercase serifs beak_jut#:=lll*10/36pt#+mmm*11/36pt#+nnn*0pt#+ooo*0pt#; % horizontal protrusion of beak serifs beak#:=lll*70/36pt#+mmm*70/36pt#+nnn*34/36pt#+ooo*1.5/36pt#; % vertical protrusion of beak serifs vair#:=lll*8/36pt#+mmm*13/36pt#+nnn*22/36pt#+ooo*26/36pt#; % vertical diameter of hairlines notch_cut#:=lll*10pt#+mmm*10pt#+nnn*25/36pt#+ooo*49/36pt#; % maximum breadth above or below notches bar#:=lll*11/36pt#+mmm*17/36pt#+nnn*22/36pt#+ooo*26/36pt#; % lowercase bar thickness slab#:=lll*11/36pt#+mmm*17/36pt#+nnn*22/36pt#+ooo*36/36pt#; % serif and arm thickness cap_bar#:=lll*11/36pt#+mmm*17/36pt#+nnn*22/36pt#+ooo*34/36pt#; % uppercase bar thickness cap_band#:=lll*11/36pt#+mmm*17/36pt#+nnn*22/36pt#+ooo*31/36pt#; % uppercase thickness above/below lobes cap_notch_cut#:=lll*10pt#+mmm*10pt#+nnn*25/36pt#+ooo*45/36pt#; % max breadth above/below uppercase notches serif_drop#:=lll*4/36pt#+mmm*3/36pt#+nnn*0pt#+ooo*2/36pt#; % vertical drop of sloped serifs stem_corr#:=lll*1/36pt#+mmm*2/36pt#+nnn*0pt#+ooo*1/36pt#; % for small refinements of stem breadth vair_corr#:=lll*1/36pt#+mmm*1.5/36pt#+nnn*0pt#+ooo*2/36pt#; % for small refinements of hairline height apex_corr#:=lll*0pt#+mmm*0pt#+nnn*10/36pt#+ooo*18/36pt#; % extra width at diagonal junctions o#:=lll*8/36pt#+mmm*4/36pt#+nnn*4/36pt#+ooo*8/36pt#; % amount of overshoot for curves apex_o#:=lll*8/36pt#+mmm*3/36pt#+nnn*3/36pt#+ooo*0pt#; % amount of overshoot for diagonal junctions slant:=0; % tilt ratio $(\Delta x/\Delta y)$ fudge:=lll*1+mmm*1+nnn*0.81+ooo*.88; % factor applied to weights of heavy characters math_spread:=lll*0+mmm*0.5+nnn*(-1)+ooo*0.5; % extra openness of math symbols superness:=lll*1/sqrt2+mmm*8/11+nnn*1/sqrt2+ooo*3/4; % parameter for superellipses superpull:=lll*1/6+mmm*1/8+nnn*0+ooo*1/18; % extra openness inside bowls beak_darkness:=lll*11/30+mmm*0.4+nnn*0+ooo*0; % fraction of triangle inside beak serifs ligs:=2; % level of ligatures to be included square_dots:=if (ooo >= 0.5): true else: false fi; % should dots be square? hefty:=if (nnn+ooo >= 0.5): true else: false fi; % should we try hard not to be overweight? serifs:=if (ooo >= 0.5): false else: true fi; % should serifs and bulbs be attached? monospace:=if (nnn >= 0.5): true else: false fi; % should all characters have the same width? variant_g:=false; % should an italic-style g be used? low_asterisk:=if (nnn >= 0.5): true else: false fi; % should the asterisk be centered at the axis? math_fitting:=false; % should math-mode spacing be used? font_setup enddef; mode_setup; def alpha(expr K,L) = para((15-L)*(15-K)/225,L*(15-K)/225,K*(15-L)/225,L*K/225); message("(raw=" & decimal K & ",column=" & decimal L & ")"); % % ### the following code is taken from the Computer Modern fonts % replace it by some other letter if you like, make a % comment out of the cmchar "..." line % add the line % def t_ = shifted (-.5w,0) enddef; % just after the "adjust_fit ..." line % %cmchar "The letter a"; beginchar(K*16+L,9u#,x_height#,0); bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh); italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#; adjust_fit(0,serif_fit# if serifs: if hair#+.5stem#>1.5u#:-.25u# fi\\fi); def t_ = shifted (-.5w,0) enddef; pickup fine.nib; top y3r=h+vround 1.5oo; if serifs: pos1(flare,180); pos2(hair,180); pos3(vair,90); lft x1r=hround max(u,2.1u-.5flare); x3=.5w-.5u; y1=min(bh+.5flare+2vair+2,.9[bh,h]-.5flare); bulb(3,2,1); % bulb else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r; pos3(1/8[vair,thin_join],90); x3=.5w-.2u; top y1r=vround .82[bh,top y3r]; filldraw stroke term.e(3,1,left,.9,4); fi % terminal pos4(stem,0); rt x4r=hround(w-2.5u+.5stem); y4=1/3[bh,h]; pos5(stem,0); x5=x4; y5=max(.55bh,2vair); filldraw stroke super_arc.e(3,4)&z4e..z5e; % arc and stem pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh; pos7(hround(curve-2stem_corr),180); lft x7r=hround max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r]; pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo; pos9(thin_join,360); z9l=z5l; (x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u); {{interim superness:=more_super; filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl if serifs: numeric shaved_stem; shaved_stem=hround(stem-3stem_corr); if hair#+.5stem#>1.5u#: pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5; pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh]; pos11(shaved_stem,0); rt x11r=hround(w-.25u); bot y11=0; pos12(shaved_stem,0); x11=x12; top y12=slab+eps; filldraw z5'l---z10l...z11l{right}--z11r --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle; % foot else: pickup crisp.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5; pos10(shaved_stem,0); x10=x5'; y10=1/3bh; pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo; pos12(hair,180); rt x12l=hround(w-.1u); y12=max(y10,y11+vair); pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12); (x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10); filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi % hook else: numeric shaved_stem; shaved_stem=hround(stem-stem_corr); pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5; pos10(shaved_stem,0); x10=x5'; bot y10=0; filldraw stroke z5'e--z10e; fi % base of stem penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13); endchar; % % ### do not replace the rest of this file % enddef; for K = 0 upto 15: for L = 0 upto 15: alpha(K,L); endfor; endfor; end.