% Filename: rfcmrm.mf % Author: Alan Jeffrey % E-mail: jeffrey@cs.chalmers.se % Version number: 1.0 % Last modified: 18 Dec 1991 % 18 Dec 1991: Finished V1.0 % These are the extra glyphs for my proposed TeX math font scheme. mode_setup; font_setup; % The Greek glyphs, upright. input greeku; input greekl; % Some characters from msbm (the only change is that they are now upright). beginchar(oct"050", 12u#, x_height#, 0); italcorr 1/3x_height#*slant+.5hair#+.5u#; adjust_fit(0,0); pickup rule.nib; pos1(stem,0); pos2(stem,0);x1l=hround(2u-.5stem); x2r=w-x1l; top y2+.3stem=h+oo; bot y1-.3stem=-oo; filldraw z1l---z2l...z2r---z1r...cycle; pickup crisp.nib; pos3(hair,180); x3=lft x1l; y3=3/4h; pos4(stem,90); top y4r+.15stem=h+oo; x4-x3=.05[x1,x2]; pos4'(hair,0); y4'=y3; x4'=1/4[x1,x2]; pos5(hair,90); z5=z1; filldraw super_arc.r(3,4)&super_arc.r(4,4')...{z1-z2}z5&z5{z2-z1} ...super_arc.l(4',4)&super_arc.l(4,3)---cycle; % left arm pos8(hair,-90); pos6(hair,0); z8=z2; pos7(stem, -90); bot y7r-.15stem=-oo; x6-x7=x4-x3; x6=w-x3; pos7'(hair,180); y7'=y6; x7'=w-x4'; y6=h-y3; filldraw super_arc.r(6,7)&super_arc.r(7,7')...{z2-z1}z8&z8{z1-z2} ...super_arc.l(7',7)&super_arc.l(7,6)---cycle; % right arm %filldraw z8{z1-z2}..z7l...{up}z6r---z6l{-u,-2u}...z7r..{z2-z1}z8---cycle; %right arm penlabels(range 1 thru 8,4'); endchar; cmchar "Reversed, reflected, lowercase Greek epsilon"; beginchar(oct"051",8u#,x_height#,0); italcorr x_height#*slant+.5hair#-2u#; adjust_fit(0,0); pickup fine.nib; pos0(bar,90); pos1(bar,90); pos2(curve,180); pos3(vair,270); pos4(hair,300); pos6(bar,90); pos7(bar,90); x1=.5w+.5u; x0=x1+u; lft x2r=hround(1.5u-.5curve); x3=.5[x0,x1]; x4r=good.x(w-u); x5=w+.5u; x6=x0; z7=z2l; top y0r=top y1r=h; y2=y5=y6=bar_height; bot y3r=-oo; path p; p=z3r{right}...{up}z5; numeric t; t=ypart(((x4r,y3r)--(x4r,y5))intersectiontimes p); y4r=ypart point t of p; filldraw circ_stroke z0e..pulled_arc.e(1,2) & pulled_arc.e(2,3) ...z4e{direction t of p}; % arc filldraw circ_stroke z6e--z7e; % bar math_fit(-.3x_height#*slant+.5curve#-u#,ic#); picture v; v:=currentpicture; v:=v reflectedabout((0,h/2),(w,h/2)); v:=v reflectedabout((w/2,-d),(w/2,h)); currentpicture:=v shifted (2u,0); penlabels(0,1,2,3,4,5,6,7); endchar; % Some hacked-around cmr characters. cmchar "h with horizontal stroke"; beginchar(oct"052",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 pickup crisp.nib; x5=x2l-2u; x6=x2r+2u; % STROKE! y5=y6=.4[x_height,h]; draw z5--z6; % STROKE! penlabels(1,2,3,4,5,6); endchar; cmchar "h with diagonal stroke"; beginchar(oct"053",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 pickup crisp.nib; x5=x2l-2u; x6=x2r+2u; % STROKE! .5[y5,y6]=.4[x_height,h]; y6-y5=2u; draw z5--z6; % STROKE! penlabels(1,2,3,4,5,6); endchar; cmchar "Cents"; beginchar(oct"054",8u#,x_height#,0); italcorr x_height#*slant-.2u#; adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi); pickup fine.nib; pos2(vair',90); pos4(vair',270); x2=x4=.5(w+u); top y2r=vround(h+1.5oo); bot y4r=-oo; pos3(curve,180); lft x3r=hround max(.6u,1.35u-.5curve); y3=.5h; if serifs: pos1(hair,0); pos0(flare,0); y1=min(bar_height+.5flare+2vair'+2,.9[bar_height,h]-.5flare); rt x1r=hround(w-.7u); bulb(2,1,0); % bulb pos5(hair,0); rt x5r=hround(w-.5u); y5=max(good.y(.5bar_height-.9),y4l+vair'); (x,y4l)=whatever[z4r,z5l]; x4l:=min(x,x4l+.5u); filldraw stroke pulled_super_arc.e(2,3)(.7superpull) & pulled_super_arc.e(3,4)(.5superpull) ..tension .9 and 1..{x5-x4,5(y5-y4)}z5e; % arc and lower terminal else: pos1(4/7[vair',flare],80); rt x1r=hround(w-.6u); top y1r=vround .82[bar_height,top y2r]; filldraw stroke term.e(2,1,right,.8,4); % upper terminal pos5(.6[vair',flare],275); rt x5r=hround(w-.5u); y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l; forsuffixes e=l,r: path p.e; p.e=z4e{right}..tension .9 and 1..z5e; if angle direction 1 of p.e>75: p.e:=z4e{right}..tension atleast.9 and 1..{dir 75}z5e; fi endfor filldraw stroke pulled_super_arc.e(2,3)(.7superpull) & pulled_super_arc.e(3,4)(.5superpull) & p.e; fi % arc and lower terminal pickup crisp.nib; x6=x7=x2; y6=h+1.5u; y7=-1.5u; draw z6--z7; % STROKE! penlabels(0,1,2,3,4,5,6,7); endchar; cmchar "Currency symbol"; beginarithchar(oct"055"); pickup rule.nib; autocorrection:=1; x1=good.x(1/sqrt2)[.5w,rt u]; y1=good.y(1/sqrt2)[math_axis,bot h]; x2=x3=w-x1; x4=x1; .5[y1,y2]=.5[y3,y4]=math_axis; y2=y4; z5=.25[z1,z2]; z6=.25[z3,z4]; z7=.25[z2,z1]; z8=.25[z4,z3]; draw z1--z5; draw z2--z7; draw z3--z6; draw z4--z8; % tails draw z5..z6..z7..z8..cycle; % circle labels(1,2,3,4,5,6,7,8); endchar; cmchar "Left semantic bracket [["; beginchar(oct"056",7.25u#,body_height#,paren_depth#); adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0); top y1=h; bot y2=-d; lft x1l=lft x2l=hround(2.5u-.5rule_thickness)-1-eps; filldraw stroke z1e--z2e; % left stem pos7(rule_thickness,0); pos8(rule_thickness,0); top y7=h; bot y8=-d; lft x7l=lft x8l=hround(4.75u-.5rule_thickness)-1-eps; filldraw stroke z7e--z8e; % right stem pos3(rule_thickness,90); pos4(rule_thickness,90); pos5(rule_thickness,90); pos6(rule_thickness,90); x3=x5=x1l; rt x4=rt x6=ceiling(w-.4u)+eps; y3r=y4r=y1; y5l=y6l=y2; filldraw stroke z3e--z4e; % upper bar filldraw stroke z5e--z6e; % lower bar penlabels(1,2,3,4,5,6,7,8); endchar; cmchar "Right semantic bracket ]]"; beginchar(oct"057",7.25u#,body_height#,paren_depth#); adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0); top y1=h; bot y2=-d; rt x1r=rt x2r=hround(w-2.5u+.5rule_thickness)+1+eps; filldraw stroke z1e--z2e; % left stem pos7(rule_thickness,0); pos8(rule_thickness,0); top y7=h; bot y8=-d; rt x7r=rt x8r=hround(w-4.75u+.5rule_thickness)+1+eps; filldraw stroke z7e--z8e; % right stem pos3(rule_thickness,90); pos4(rule_thickness,90); pos5(rule_thickness,90); pos6(rule_thickness,90); x3=x5=x1l; lft x4=lft x6=ceiling(.4u)-eps; y3r=y4r=y1; y5l=y6l=y2; filldraw stroke z3e--z4e; % upper bar filldraw stroke z5e--z6e; % lower bar penlabels(1,2,3,4,5,6,7,8); endchar; cmchar "Upside-down ampersand"; beginchar(oct"060",14u#,asc_height#,0); italcorr x_height#*slant-serif_fit# - if serifs: .4u# else: 1.5u# fi; adjust_fit(0,serif_fit#); pickup tiny.nib; pos2(slab,-90); x2=4u; bot y2r=-o; if not hefty:(x,y2l)=whatever[z2r,(w-5u,x_height)]; x2l:=x; fi if serifs: pos0(fudged.hair,0); rt x0r+jut=hround(w-.9u); top y0=x_height; pos1(fudged.hair,0); z1=whatever[z0,(.6[x0,x2],0)]; y1=max(y0-1.5bracket-.2x_height,2/3x_height); filldraw stroke z0e---z1e...{left}z2e; % short diagonal else: pickup fine.nib; pos1(.25[slab,flare],-15); rt x1r=hround(w-2u); y1r=good.y .75[bar_height,x_height]; x1l:=good.x x1l; y1l:=good.y y1l; top z2'l=(x2l,tiny.top y2l); bot z2'r=(x2r,tiny.bot y2r); filldraw stroke term.e(2',1,right,1,4); fi % short diagonal and terminal pickup tiny.nib; numeric slope,theta,reduced_hair; slope=(h-2vair-slab)/10.5u; theta=angle(-slope,1); reduced_hair=max(tiny.breadth,hround(fudged.hair if hefty:-2stem_corr fi)); lft x3r=hround .75u; x5=.5[x3r,x6l]; lft x6r=hround .5(w-u); x3l-x3r=curve-tiny; pos6(reduced_hair,180); pos5(vair,theta); y5=.5h; ellipse_set(2l,3l,4l,5l); ellipse_set(2r,3r,4r,5r); pos7(vair,270); top y7l=h+o; x7=.45[x6r,x8r]; pos8(fudged.stem,30); x8l=good.x(x8l+3.5u-x8); y8r=y6; ellipse_set(7l,6l,5',5l); filldraw stroke z2e{left}...z3e{up}...z4e---z5e...{up}z6e ...z7e{left}...z8e{down}; % bowls pos10(slab,90); x10=w-3.5u; bot y10l=-o; pos9(fudged.stem,angle(z8-z10)-90); z9=.5[z8,z10]+(1.75u,0) rotated(angle(z8-z10)+90); filldraw stroke z8e{down}...z9e{z10-z8}...{right}z10e; % long diagonal if serifs: pickup crisp.nib; pos10'(slab,90); z10'=z10; pos11(fudged.hair,180); rt x11l=hround(w-u); y11=.5bar_height; filldraw stroke z10'e{right}...{up}z11e; % terminal numeric inner_jut; if rt x6l+.5u