% $Header: tmathit.mf,v 1.1 88/01/15 13:12:54 simpson Rel $ % $Log: tmathit.mf,v $ %Revision 1.1 88/01/15 13:12:54 simpson %initial release % %Revision 0.1 87/12/11 19:01:36 simpson %beta test % % The Computer Modern Math Italic family (by D. E. Knuth, 1979--1985) font_coding_scheme:="TeX math italic"; mode_setup; font_setup; input tgreekl; % lower case Greek letters % From file italms.mf, font cmmi10 (output with slant) cmchar "Lowercase italic script l"; beginchar(oct"044",4.5u#+max(1.5u#,stem#),asc_height#,0); italcorr .8asc_height#*slant-u#; adjust_fit(if monospace:u#,u# else: 0,0 fi); pickup fine.nib; pos1(hair,-45); pos2(hair,0); pos3(vair,90); pos4(stem,180); pos5(vair,270); pos6(hair,315); lft x1l=hround(lft x1l-x1); rt x2r=hround(w-1.5u); x3=.5w; lft x4r=hround .5u; x5=x3+.75u; x6=x1+w+1; y1=y6=.125h; y2=.8h; top y3r=h+oo; y4=.5[y3,y5]; bot y5=-oo; filldraw stroke z1e{10u,asc_height}...z2e{up}...pulled_arc.e(3,4) & pulled_arc.e(4,5)...z6e{10u,asc_height}; % bowl and hook math_fit(0,ic#); penlabels(1,2,3,4,5,6); endchar; font_slant slant; font_x_height x_height#; font_quad 18u#+4letter_fit#; slant:=mono_charic#:=0; % the remaining characters will not be slanted currenttransform:=identity yscaled aspect_ratio scaled granularity; input titalms; % special symbols for math italic input tgreeku; % upper case greek letters input tromms; % roman math specials % The following characters come from a hodge-podge of files. % My own creation (created in just 1 hour!) cmchar "Right hand"; beginchar(oct"004", 2.1body_height#, body_height#, 0); adjust_fit(0,0); picture hand; % On the graph I drew this on, the hand is 40 units tall and 84 (2.1*40) units % wide. handunit# := body_height#/40; define_pixels(handunit); z1=(4handunit,0); z2=(handunit,handunit); z3=(0,4handunit); z4=(0,34handunit); z5=(handunit,36handunit); z6=(4handunit,37handunit); z7=(9handunit,35handunit); z8=(16handunit,36handunit); z9=(30handunit,38handunit); z10=(50handunit,40handunit); z11=(70handunit,40handunit); z12=(78handunit,40handunit); z13=(84handunit,38handunit); z14=(83handunit,34handunit); z15=(80handunit,33handunit); z16=(56handunit,30handunit); z17=(52handunit,29handunit); z18=(51handunit,24handunit); z19=(46handunit,18handunit); z20=(45handunit,14handunit); z21=(40handunit,8handunit); z22=(37handunit,handunit); z23=(35handunit,0); z24=(27handunit,handunit); z25=(13handunit,2handunit); fill z1{dir 180}..z2{z3-z1}..{dir 90}z3--z4{dir 90}..z5{z6-z4}..z6{dir 0} ..z7{dir 0}..z8..z9..z10..z11{dir 0}--z12{dir 0}..z13{dir -80}..z14{dir 225} ..z15{dir 190}--z16..{dir 200}z17 & flex(z17,z18,z19) & flex(z19,z20,z21) ..z22{dir 225}..z23{dir 180}..z24{z25-z23}..z25..cycle; hand:=currentpicture; endchar; % My own creation cmchar "Left hand"; beginchar(oct"036", 2.1body_height#, body_height#, 0); adjust_fit(0,0); currentpicture:=hand reflectedabout ((.5w,0),(.5w,h)); endchar; % From font cmsy10, file symbol.mf cmchar "Subset or equal to sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of `$=$' compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"133",14u#,v_center(spread#'+spread#+rule_thickness#)); adjust_fit(0,0); pickup rule.nib; autorounded; lft x2=hround 1.5u-eps; x1=x3=w-x2; y1-y3=spread; y2=.5[y1,y3]; top y1=h; x4=x5=.5w; y4=y1; y5=y3; draw z1---z4...z2{down}...z5---z3; % arc and bars x8=x1; lft x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % lower bar labels(1,2,3,4,5,8,9); endchar; % From font cmsy10, file symbol.mf cmchar "Superset or equal to sign"; 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#)); adjust_fit(0,0); pickup rule.nib; autorounded; lft x1=hround 1.5u-eps; x2=w-x1; x3=x1; y1-y3=spread; y2=.5[y1,y3]; top y1=h; x4=x5=.5w; y4=y1; y5=y3; draw z1---z4...z2{down}...z5---z3; % arc and bars x8=x1; rt x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % lower bar labels(1,2,3,4,5,8,9); endchar; % From font cmsy10, file symbol.mf cmchar "Times operator"; beginarithchar(oct"052"); pickup rule.nib; 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; draw z1--z2; draw z3--z4; % diagonals labels(1,2,3,4); endchar; % From font cmsy10, file symbol.mf cmchar "Asterisk at the axis"; beginchar(oct"071",9u#,v_center(x_height#)); adjust_fit(0,0); numeric ast_flare; ast_flare=hround .7[thin_join,stem]; x0=.5w; y0=h-.5x_height; for d=-150 step 60 until 150: z[d]=z0+.5dir d xscaled 7.5u yscaled x_height; numeric theta; theta=angle(z[d]-z0); fill z0+.5(0,-thin_join)rotated theta ---z[d]+.5(-ast_flare,-ast_flare)rotated theta ..z[d]..z[d]+.5(-ast_flare,ast_flare)rotated theta ---z0+.5(0,thin_join)rotated theta--cycle; endfor % diagonal at angle |d| labels(0,[-150],[-90],[-30],30,90,150); endchar; % From font cmsy10, file symbol.mf cmchar "Elementary division operator"; beginarithchar(oct"057"); pickup rule.nib; x3-.5dot_size=hround(.5w-.5dot_size); w:=r:=2x3; y3+.5dot_size=vround(math_axis+math_spread[.5x_height,.6x_height]+.5dot_size); lft x1=hround u-eps; x2=w-x1; y1=y2=math_axis; draw z1--z2; % bar pos3(dot_size,0); pos4(dot_size,90); z3=z4; pos5(dot_size,0); pos6(dot_size,90); z5=z6; x5=x3; .5[y3,y5]=math_axis; dot(3,4); dot(5,6); % dots penlabels(1,2,3,4,5,6); endchar; % From font cmsy10, file symbol.mf cmchar "Similarity sign"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"062",14u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness; if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1; bot y1=bot y3=-d; top y2=top y4=h; draw z1{up}...z2{right}..{right}z3...{up}z4; % stroke labels(1,2,3,4); endchar; % From font cmsy10, file symbol.mf cmchar "Similar or equal sign"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"061",14u#,v_center(2spread#+rule_thickness#)); adjust_fit(0,0); pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness; if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1; bot y1=bot y3=floor math_axis; top y2=top y4=h; draw z1{up}...z2{right}..{right}z3...{up}z4; % stroke pickup rule.nib; lft x5=hround u-eps; x6=w-x5; y5=y6=math_axis-spread; draw z5--z6; % bar labels(1,2,3,4,5,6); endchar; % From font cmsy10, file symbol.mf cmchar "Proportionality sign"; beginchar(oct"003",16.5u#,x_height#,0); italcorr x_height#*slant-.5u#; adjust_fit(0,-2.5u#); pickup fine.nib; numeric theta,phi; phi=angle(3u,h); theta=angle(5u,-h); pos1(vair,180); pos2(.5[vair,stem],90+.5theta); pos3(stem,90+theta); pos4(stem,90+theta); pos5(.5[vair,stem],90+.5theta); pos6(vair,180); pos7(.2[vair,stem],270+.5phi); pos8(.3[vair,stem],270+phi); pos9(.2[vair,stem],270+.5phi); lft x1r=w-rt x6l=hround u; x2=x9=.4[x1,x8]; x5=x7=.6[x8,x6]; if monospace: x2l:=x2r; x5r:=x5l; x7r:=x7l; x9l:=x9r; fi y1=y6=.5h; top y2r=top y7l=h+oo; bot y5l=bot y9r=-oo; x8=.5[x3,x4]=.5w; y8=.5[y3,y4]=.5h; y3-y4=h/3; z3-z4=whatever*dir theta; filldraw stroke z1e{up}...z2e{right}...z3e---z4e...z5e{right}...z6e{up} ...z7e{left}...{-dir phi}z8e...{left}z9e...z1e{up}; % `infinity' bowls erase fill (w-3.5u,h+o)--(w,h+o) --(w,-o)--(w-3.5u,-o)--cycle; % erase excess penlabels(1,2,3,4,5,6,7,8,9); endchar; % From font cmsy10, file symbol.mf cmchar "Empty set symbol"; beginchar(oct"172",9u#,body_height#,body_height#-asc_height#); adjust_fit(0,0); penpos1(vair,90); penpos3(vair,-90); penpos2(stem,180); penpos4(stem,0); if not monospace: interim superness:=sqrt(more_super*hein_super); fi x2r=hround max(.7u,1.45u-.5stem); x4r=w-x2r; x1=x3=.5w; y1r=asc_height+o; y3r=-o; y2=y4=.5asc_height-vair_corr; y2l:=y4l:=.52asc_height; penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3) & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle; % bowl pickup rule.nib; lft x6=hround 2u-eps; x5=w-x6; top y5=h+o; bot y6=-d-o; draw z5--z6; % diagonal penlabels(1,2,3,4,5,6); endchar; % From font cmsy10, file symbol.mf cmchar "Nabla or backwards-difference operator"; beginchar(oct"050",15u#,cap_height#,0); adjust_fit(0,0); numeric right_stem,alpha; right_stem=cap_hair if hefty: -3stem_corr fi; x1l=w-x4r=.75u; y1=y4=h; x2-x1=x4-x3; x3l=x2l+apex_corr; y2=y3=-apex_o-apex_oo; alpha=diag_ratio(2,right_stem,y1-y2,x4r-x1l-apex_corr); penpos1(alpha*cap_stem,0); penpos2(alpha*cap_stem,0); penpos3(alpha*right_stem,0); penpos4(alpha*right_stem,0); fill diag_end(2l,1l,1,1,4r,3r)--diag_end(4r,3r,1,1,2l,1l)--cycle; % triangle z0=whatever[z1r,z2r]=whatever[z3l,z4l]; y5=y6=h-cap_vstem; z5=whatever[z1r,z2r]; z6=whatever[z3l,z4l]; if y0>cap_notch_cut: y0:=cap_notch_cut; unfill z0+.5right{up}...{z4-z3}z6--z5{z2-z1} ...{down}z0+.5left--cycle; % counter else: unfill z0--z5--z6--cycle; fi % counter penlabels(0,1,2,3,4,5,6); endchar; % From font cmsy10, file symbol.mf cmchar "Section sign"; beginchar(oct"070",6.5u#+max(1.5u#,stem#),asc_height#,desc_depth#); adjust_fit(0,0); pickup fine.nib; numeric sstem; sstem=hround .75[hair,stem]; pos0(stem,0); pos1(hair,0); pos2(vair,90); pos3(sstem,180); pos4(vair,270); pos5'(sstem,0); pos5(sstem,180); pos6(vair,90); pos7(sstem,0); pos8(vair,-90); pos9(hair,-180); pos10(stem,-180); top y2r=h+oo; bot y8r=-d-oo; y2-y1=y9-y8=(y2-y8)/8; y3=.52[y4,y2]; y5=.52[y4,y6]; y7=.52[y6,y8]; y5'=.52[y6,y4]; y2-y4=y4-y6=y6-y8; rt x1r=hround(w-1.5u); lft x3r=hround 1.25u; x2=x4=x6=x8=.5w; x5=x7=w-x3; x5'=x3; x9=w-x1; bulb(2,1,0); bulb(8,9,10); % bulbs filldraw stroke z2e{left}...z3e{down}...z4e{3(x5-x3),y5-y3} ...z5e{down}...{left}z6e; % upper stroke filldraw stroke z4e{left}...z5'e{down}...z6e{3(x7-x5'),y7-y5'} ...z7e{down}...{left}z8e; % upper stroke penlabels(0,1,2,3,4,5,6,7,8,9,10); endchar; % From font cmsy10, file symbol.mf cmchar "Double dagger mark"; beginchar(oct"131",8u#,asc_height#,desc_depth#); adjust_fit(0,0); pickup fine.nib; pos1(stem,0); pos2(thin_join,0); pos3(stem,0); pos4(stem,90); pos2'(thin_join,90); pos5(stem,90); z2'=z2; x1=x2=x3; x1-.5stem=hround(.5w-.5stem); w:=r:=2x1; x4-.5stem=hround u; x5=w-x4; y1+.5stem=h+oo; y2=y4=y5=.5[y1,y3]; y3-.5stem=ceiling(.5[-d,h]); filldraw circ_stroke z1e{down}..{down}z2e; % top stem filldraw circ_stroke z3e{up}..{up}z2e; % upper middle stem filldraw circ_stroke z4e{right}..{right}z2'e; % top left bulb filldraw circ_stroke z5e{left}..{left}z2'e; % top right bulb pos6(stem,0); pos7(thin_join,0); pos8(stem,0); pos9(stem,90); pos7'(thin_join,90); pos0(stem,90); z7'=z7; x6=x7=x8=x1; x9=x4; x0=x5; y6=y3-stem-1; y7=y9=y0=.5[y6,y8]; y8-.5stem=-d-oo; filldraw circ_stroke z6e{down}..{down}z7e; % lower middle stem filldraw circ_stroke z8e{up}..{up}z7e; % bottom stem filldraw circ_stroke z9e{right}..{right}z7'e; % bottom left bulb filldraw circ_stroke z0e{left}..{left}z7'e; % bottom right bulb penlabels(1,2,3,4,5,6,7,8,9,0); endchar; % From font cmsy10, file sym.mf cmchar "Minus"; beginarithchar(oct"055"); pickup rule.nib; lft x1=hround 1.5u-eps; x2=w-x1; y1=y2=math_axis; draw z1--z2; % bar labels(1,2); endchar; % From font cmsy10, file sym.mf cmchar "Plus-or-minus sign"; beginarithchar(oct"010"); pickup rule.nib; numeric shiftup; shiftup=vround 1.5u; x1=x2=.5w; lft x3=lft=x5=hround u-eps; x4=x6=w-x3; .5[y1,y2]=y3=y4=math_axis+shiftup; top y1=h+shiftup; y5=y6=y2; draw z1--z2; % stem draw z3--z4; % plus bar draw z5--z6; % minus bar labels(1,2,3,4,5,6); endchar; % From font cmsy10, file sym.mf cmchar "Downward arrow"; beginchar(oct"067",9u#,asc_height#,asc_depth#); adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(bar,90); pos4(bar,90); lft x1l=hround(.5w-.5rule_thickness); y1+.5rule_thickness=h; x0=x1=x2; bot y0=-d; 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; p=z4r{z9-z4}..z6r; t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p; filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r) --z2r---z1r..z1l---z2l--subpath (t,0) of\\(z3r{z9-z3}..z5r) --z3l{z9-z3}..z0 & cycle; % arrowhead and stem penlabels(0,1,2,3,4,5,6,9); endchar; % From font cmsy10, file sym.mf cmchar "Upward arrow"; beginchar(oct"066",9u#,asc_height#,asc_depth#); italcorr .76asc_height#*slant+.5crisp#-u#; adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(bar,90); pos4(bar,90); lft x1l=hround(.5w-.5rule_thickness); y1-.5rule_thickness=-d; x0=x1=x2; top y0=h; 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; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p; filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r) --z2r---z1r..z1l---z2l--subpath (t,0) of\\(z3l{z9-z3}..z5r) --z3r{z9-z3}..z0 & cycle; % arrowhead and stem penlabels(0,1,2,3,4,5,6,9); endchar; % From font cmsy10, file sym.mf cmchar "Leftward arrow"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"064",18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); 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; p=z4r{z9-z4}..z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r) --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r) --z3l{z9-z3}..z0 & cycle; % arrowhead and stem penlabels(0,1,2,3,4,5,6,9); endchar; % From font cmsy10, file sym.mf cmchar "Rightward arrow"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"065",18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; 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; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r) --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r) --z3r{z9-z3}..z0 & cycle; % arrowhead and stem penlabels(0,1,2,3,4,5,6,9); endchar; % From font cmsy10, file sym.mf cmchar "Proper subset sign"; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"032",14u#,v_center(spread#+rule_thickness#)); italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib; autorounded; lft x2=hround 1.5u-eps; x1=x3=w-x2; y1-y3=spread; y2=.5[y1,y3]=math_axis; x4=x5=.5w; y4=y1; y5=y3; draw z1---z4...z2{down}...z5---z3; % arc and bars labels(1,2,3,4,5); endchar; % From font cmsy10, file sym.mf cmchar "Proper superset sign"; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"033",14u#,v_center(spread#+rule_thickness#)); italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib; autorounded; lft x1=hround 1.5u-eps; x2=w-x1; x3=x1; y1-y3=spread; y2=.5[y1,y3]=math_axis; x4=x5=.5w; y4=y1; y5=y3; draw z1---z4...z2{down}...z5---z3; % arc and bars labels(1,2,3,4,5); endchar; % From font cmsy10, file sym.mf cmchar "Element sign"; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"037",12u#,v_center(spread#+rule_thickness#)); italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib; autorounded; lft x2=hround 1.5u-eps; x1=x3=x6=w-x2; y1-y3=spread; y2=y6=.5[y1,y3]=math_axis; x4=x5=.5w+u; y4=y1; y5=y3; draw z1---z4...z2{down}...z5---z3; % arc and bars draw z2--z6; % middle bar labels(1,2,3,4,5,6); endchar; % From font cmsy10, file sym.mf cmchar "Logical not sign"; beginchar(oct"035",12u#,x_height#,0); italcorr x_height#*slant-.5u#; adjust_fit(0,0); pickup rule.nib; lft x1=hround u-eps; x2=x3=w-x1; y1=y2=good.y .5[bar_height,h]; y2-y3=1.2(h-bar_height); draw z1--z2--z3; % bar and stem labels(1,2,3); endchar; % From font cmsy10, file sym.mf cmchar "Less than sign"; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"074",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; % diagonals labels(1,2,3); endchar; % From font cmsy10, file sym.mf cmchar "Greater than sign"; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"076",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; % diagonals labels(1,2,3); endchar; % From font cmsy10, file sym.mf cmchar "Unequals sign"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"063",14u#,v_center(4spread#+rule_thickness#)); italcorr h#*slant-.5u#; adjust_fit(0,0); pickup rule.nib; lft x1=hround u-eps; x3=x1; x2=x4=w-x1; y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis; draw z1--z2; draw z3--z4; % bars lft x6=hround 3.5u-eps; x5=w-x6; top y5=h+o; bot y6=-d-o; draw z5--z6; % diagonal labels(1,2,3,4,5,6); endchar; % From font cmsy10, file sym.mf cmchar "Less than or equal to sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of `$=$' compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"011",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; % diagonals x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % bar labels(1,2,3,8,9); endchar; % From font cmsy10, file sym.mf cmchar "Greater than or equal to sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of `$=$' compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"012",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; % diagonals x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % bar labels(1,2,3,8,9); endchar; % From font cmsy10, file sym.mf cmchar "Equivalence or congruence sign"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"060",14u#,v_center(2spread#+rule_thickness#)); italcorr h#*slant-.5u#; adjust_fit(0,0); pickup rule.nib; lft x1=hround u-eps; x3=x5=x1; x2=x4=x6=w-x1; y1=y2; y3=y4=math_axis; y5=y6; y1-y3=y3-y5=spread; draw z1--z2; % upper bar draw z3--z4; % middle bar draw z5--z6; % lower bar labels(1,2,3,4,5,6); endchar; % From font cmsy10, file sym.mf cmchar "Reverse slash (backslash)"; beginchar(oct"134",9u#,body_height#,paren_depth#); adjust_fit(0,0); pickup rule.nib; lft x1=hround u-eps; top y1=h+eps; rt x2=hround(w-u)+eps; bot y2=-d-eps; draw z1--z2; % diagonal labels(1,2); endchar; % From font cmsy10, file sym.mf cmchar "Vertical line"; beginchar(oct"174",5u#,body_height#,paren_depth#); italcorr body_height#*slant+.5rule_thickness#-2u#; adjust_fit(0,0); pickup rule.nib; x1=x2=good.x .5w; top y1=h+eps; bot y2=-d-eps; draw z1--z2; % stem labels(1,2); endchar; % From font cmsy10, file sym.mf cmchar "Left curly brace"; beginchar(oct"173",9u#,body_height#,paren_depth#); italcorr body_height#*slant+.5vair#-u#; adjust_fit(0,0); pickup fine.nib; forsuffixes $=1,1',4,4',7,7': pos$(vair,0); endfor forsuffixes $=2,3,5,6: pos$(stem,0); endfor x2=x3=x5=x6; x1=x1'=x7=x7'=w-x4=w-x4'; lft x4l=hround(1.5u-.5vair); lft x2l=hround(.5w-.5stem); top y1=h; bot y7=-d; .5[y4,y4']=.5[y1,y7]=.5[y2,y6]=.5[y3,y5]; y1-y2=y3-y4=(y1-y4)/4; y1-y1'=y4-y4'=y7'-y7=vair-fine; filldraw z1l{left}...z2l---z3l...{left}z4l --z4'l{right}...z5l---z6l...{right}z7l --z7r--z7'r{left}...z6r---z5r...{left}.5[z4r,z4'r]{right} ...z3r---z2r...{right}z1'r--z1r--cycle; % stroke penlabels(1,2,3,4,5,6,7); endchar; % From font cmsy10, file sym.mf cmchar "Right curly brace"; beginchar(oct"175",9u#,body_height#,paren_depth#); italcorr math_axis#*slant+.5vair#-u#; adjust_fit(0,0); pickup fine.nib; forsuffixes $=1,1',4,4',7,7': pos$(vair,0); endfor forsuffixes $=2,3,5,6: pos$(stem,0); endfor x2=x3=x5=x6; x1=x1'=x7=x7'=w-x4=w-x4'; rt x4r=hround(w-1.5u+.5vair); rt x2r=hround(.5w+.5stem); top y1=h; bot y7=-d; .5[y4,y4']=.5[y1,y7]=.5[y2,y6]=.5[y3,y5]; y1-y2=y3-y4=(y1-y4)/4; y1-y1'=y4-y4'=y7'-y7=vair-fine; filldraw z1r{right}...z2r---z3r...{right}z4r --z4'r{left}...z5r---z6r...{left}z7r --z7l--z7'l{right}...z6l---z5l...{right}.5[z4l,z4'l]{left} ...z3l---z2l...{left}z1'l--z1l--cycle; % stroke penlabels(1,2,3,4,5,6,7); endchar; % From font cmsy10, file sym.mf cmchar "Straight double quotes"; beginchar(oct"042",9u#,asc_height#,0); numeric top_width#,spread#; top_width#=if serifs: flare# else: stem# fi; spread#=max(3u#,top_width#+.5u#); define_pixels(spread); italcorr asc_height#*slant+.5top_width#+.5spread#-4u#; adjust_fit(0,0); x1=x2; x3=x4=w-x1; x3-x1=spread+2; y1=y3; y2=y4=max(.5[bar_height,x_height]+.5vair,h-x_height); if serifs: pickup crisp.nib; pos1(flare,0); pos2(vair,0); pos3(flare,0); pos4(vair,0); y1+.5stem=h; filldraw circ_stroke z1e--z2e; % left stem and bulb filldraw circ_stroke z3e--z4e; % right stem and bulb else: pickup fine.nib; pos1(stem,0); pos2(vair,0); pos3(stem,0); pos4(vair,0); top y1=h; filldraw stroke z1e--z2e; % left stem filldraw stroke z3e--z4e; fi % right stem penlabels(1,2,3,4); endchar; % From font cmsy10, file sym.mf cmchar "Infinity"; beginchar(oct"001",18u#,x_height#,0); italcorr .7x_height#*slant-.5u#; adjust_fit(0,0); pickup fine.nib; numeric theta,phi; if monospace: phi=-theta=90; else: phi=angle(4u,h); theta=angle(6u,-h); fi pos1(vair,180); pos2(.5[vair,curve],90+.5theta); pos3(curve,90+theta); pos4(curve,90+theta); pos5(.5[vair,curve],90+.5theta); pos6(vair,180); pos7(.2[vair,curve],270+.5phi); pos8(.3[vair,curve],270+phi); pos9(.2[vair,curve],270+.5phi); lft x1r=w-rt x6l=hround u; x2=x9=.4[x1,x8]; x5=x7=.6[x8,x6]; if monospace: x2l:=x2r; x5r:=x5l; x7r:=x7l; x9l:=x9r; fi y1=y6=.5h; top y2r=top y7l=h+oo; bot y5l=bot y9r=-oo; x8=.5[x3,x4]=.5w; y8=.5[y3,y4]=.5h; y3-y4=h/3; z3-z4=whatever*dir theta; filldraw stroke z1e{up}...z2e{right}...z3e---z4e...z5e{right} ...z6e{up}...z7e{left}...{-dir phi}z8e...{left}z9e...z1e{up}; % bowls penlabels(1,2,3,4,5,6,7,8,9); endchar; % From font cmsy10, file sym.mf cmchar "Set union sign"; beginchar(oct"005",12u#,.8asc_height#,0); italcorr .8asc_height#*slant-.5u#; adjust_fit(0,0); pickup rule.nib; autorounded; lft x1=hround u; x2=x1; x3=w-x3; x4=x5=w-x1; y1=good.y h+o; bot y3=-o; y2=y4=2/3[y1,y3]; y5=y1; draw z1---z2...z3...z4---z5; % stems and cup labels(1,2,3,4,5); endchar; % From font cmsy10, file sym.mf cmchar "Set intersection sign"; beginchar(oct"034",12u#,.8asc_height#,0); italcorr .8asc_height#*slant-.5u#; adjust_fit(0,0); pickup rule.nib; autorounded; lft x1=hround u; x2=x1; x3=w-x3; x4=x5=w-x1; y3=good.y h+o; bot y1=-o; y2=y4=2/3[y1,y3]; y5=y1; draw z1---z2...z3...z4---z5; % stems and cap labels(1,2,3,4,5); endchar; % My own creation cmchar "Square root extender"; beginchar(oct"006",12u#,14u#,0); adjust_fit(0,0); pickup rule.nib; bot lft z1=(0,h); bot rt z2=(w+2u,h); draw z1--z2; penlabels(1,2); endchar; % From font cmsy10, file symbol.mf (hacked up to be above baseline) cmchar "Radical sign"; beginchar(oct"013",15u#,14u#,2u#); adjust_fit(0,-letter_fit#); pickup rule.nib; x1=good.x 4/9w; x2=good.x(w+.5); bot y1=-2u; bot y2=14u; draw z1--z2; % diagonal pickup crisp.nib; pos3(max(curve,rule_thickness),0); x3l=1.5[x2,x1]; y3=.5[y1,y2]; pos4(rule_thickness,0); x4=x1; bot y4=-2u; pos5(vair,-45); x5l=good.x(x3l-u); z5l=whatever[z3r,z2]; z6=z5r+whatever*(z2-z3r)=whatever[z3l,z4l]; z7=whatever[z1,z2]=z3r+whatever*(z4l-z3l); filldraw z5r--z6--z4l--z4--z7--z3r--z5l--cycle; % left diagonal and serif penlabels(1,2,3,4,5,6,7); endchar; % The following TRW logo is designed by Mike Urban and put in the Bell % System logo position. The Bell System logo is not even used by AT&T % anymore and I work for TRW---so there. There is some perverse % appropriateness in having the escape sequence \(bs. def fixpt(expr pta,ptb,theta)= if known xpart pta: ((ypart pta)-(ypart ptb))/((xpart pta)-(xpart ptb))= (sind theta)/(cosd theta); else: ((xpart pta)-(xpart ptb))/((ypart pta)-(ypart ptb))= (cosd theta)/(sind theta); fi; enddef; def over(expr pta,ptb,delta)= xpart pta = (xpart ptb)+(delta/cosd 20); enddef; input logodesign; a#:=cap_height#/3.91; define_pixels(a); beginchar(oct"007", 12.82a#, 3.91a#, 0); LOGO; endchar; % From the font cmsy10, file sym.mf cmchar "Integral sign"; beginchar(oct"015",5.25u#+max(1.25u#,stem#)+2max(1.5u#,curve#), asc_height#,desc_depth#); italcorr asc_height#*slant-.5u#; adjust_fit(0,0); pickup fine.nib; pos1(curve,0); pos2(hair,0); pos3(vair,90); pos4(.6[hair,stem],180); pos5(stem,180); pos5'(stem,0); z5'=z5; pos6(.6[hair,stem],0); pos7(vair,-90); pos8(hair,-180); pos9(curve,-180); x7=w-x3=2.4u; rt x1r=max(rt x3+eps,hround(w-u)); x9=w-x1; x5=.5[x4,x6]; x4-x6=1.5u; lft x5r=hround(.5w-.5stem); y9-.5curve=vround(-.9d-o+vair); y3-y1=y9-y7; top y3r=h+o; bot y7r=-d-o; y5=.5[y3,y7]=.5[y4,y6]; y4-y6=2/3(y3-y7); bulb(3,2,1); bulb(7,8,9); % bulbs filldraw stroke z3e{left}...z4e{(z5e-z4e)xscaled 1.1} ..tension atleast 1 and atleast .8..{z5-z4}z5e; % upper stem filldraw stroke z5'e{z6-z5}..tension atleast.8 and atleast 1 ..{(z6e-z5'e)xscaled 1.1}z6e...{left}z7e; % lower stem math_fit(0,-2u#); % It looks better with troff if we move it over 1 unit to the left currentpicture:=currentpicture shifted (-1u,0); penlabels(1,2,3,4,5,6,7,8,9); endchar; % From the font cmr10, file punct.mf cmchar "Hash mark (number sign)"; if monospace: compute_spread(.6x_height#,.7x_height#); else: compute_spread(.45x_height#,.55x_height#); fi beginchar("#",15u#,asc_height#,asc_depth#); italcorr (math_axis#+.5(spread#+rule_thickness#))*slant-.5u#; adjust_fit(0,0); pickup rule.nib; lft x1=hround u-eps; x3=x1; x2=x4=w-x1; y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis; draw z1--z2; % upper bar draw z3--z4; % lower bar lft x6=hround 3u; rt x7=hround(w-3u); x5-x6=x7-x8; x8=good.x if monospace: .6 else: .5 fi\\w; top y5=top y7=h+eps; bot y6=bot y8=-d-eps; y15=y1; z15=whatever[z5,z6]; y36=y3; z36=whatever[z5,z6]; y27=y2; z27=whatever[z7,z8]; y48=y4; z48=whatever[z7,z8]; draw z5--if x5>x6+1:(good.x(x15+.5),y1)--(good.x(x15-.5),y1) --(good.x(x36+.5),y3)--(good.x(x36-.5),y3)--fi\\z6; % left diagonal draw z7--if x7>x8+1:(good.x(x27+.5),y2)--(good.x(x27-.5),y2) --(good.x(x48+.5),y4)--(good.x(x48-.5),y4)--fi\\z8; % right diagonal labels(1,2,3,4,5,6,7,8,15,27,36,48); endchar; % From font cmr10, file punct.mf cmchar "Plus sign"; beginarithchar("+"); pickup rule.nib; x1=x2=good.x .5w; top y1=h+eps; .5[y1,y2]=math_axis; lft x3=hround u-eps; x4=w-x3; y3=y4=math_axis; draw z1--z2; % stem draw z3--z4; % crossbar labels(1,2,3,4); endchar; % From font cmr10, file accent.mf cmchar "Grave accent"; beginchar(oct"140",9u#,min(asc_height#,2x_height#),0); adjust_fit(0,0); if serifs: pickup crisp.nib; x1-.5stem=hround 2u; x2=2/3[x1,w-x1]; y1+.5stem=h+eps; y2=max(2/3[h,x_height],x_height+o+hair); numeric theta; theta=angle(z2-z1)+90; pos1(stem,theta); pos2(hair,theta); filldraw circ_stroke z1e--z2e; % diagonal else: pickup fine.nib; pos1(stem,0); pos2(vair,0); lft x1l=hround 1.5u; rt x2r=hround(.5w+.25u+.5vair); top y1=h; bot y2=vround 2/3[h,x_height]; filldraw stroke z1e--z2e; fi % diagonal penlabels(1,2); endchar; % From font cmr10, file accent.mf cmchar "Acute accent"; beginchar(oct"047",9u#,min(asc_height#,2x_height#),0); italcorr h#*slant-if serifs: 1.5 fi u#; adjust_fit(0,0); if serifs: pickup crisp.nib; x1+.5stem=hround(w-2u); x2=2/3[x1,w-x1]; y1+.5stem=h+eps; y2=max(2/3[h,x_height],x_height+o+hair); numeric theta; theta=angle(z2-z1)+90; pos1(stem,theta); pos2(hair,theta); filldraw circ_stroke z1e--z2e; % diagonal else: pickup fine.nib; pos1(stem,0); pos2(vair,0); rt x1r=hround(w-1.5u); lft x2l=hround(.5w-.25u-.5vair); top y1=h; bot y2=vround 2/3[h,x_height]; filldraw stroke z1e--z2e; fi % diagonal penlabels(1,2); endchar; % From font cmr10, file punct.mf cmchar "Equals sign"; compute_spread(.45x_height#,.55x_height#); beginchar("=",14u#,v_center(spread#+rule_thickness#)); italcorr h#*slant-.5u#; adjust_fit(0,0); pickup rule.nib; lft x1=hround u-eps; x3=x1; x2=x4=w-x1; y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis; draw z1--z2; % upper bar draw z3--z4; % lower bar labels(1,2,3,4); endchar; % From font cmr10, file punct.mf cmchar "At sign"; beginchar("@",14u#,asc_height#,0); italcorr .7asc_height#*slant-.5u#; adjust_fit(0,if hefty or monospace:-2u# else: 0 fi); pickup fine.nib; pos0(fudged.hair,0); pos1(vair,90); pos2(fudged.stem,180); pos3(vair,270); pos4(fudged.stem,-180); pos5(fudged.stem,-180); pos6(vair,-90); pos7(fudged.hair,0); pos8(vair,90); pos9(fudged.hair,180); pos10(vair,270); pos11(.5[vair,flare],360); x1=x3=.5[x0,x2]; y0=y2=.5[y1,y3]; x8=x10=.5w; y7=y9=.5[y8,y10]; lft x9r=hround u; x7=w-x9; top y8r=h+oo; bot y10r=-oo; top y1r=vround(.8[y10,y8]+.5vair); bot y3r=vround(.2[y10,y8]-.5vair); x6l=1/3[x5l,x7l]; y6=y3; y11=good.y(.1[y10,y8]-.5); x0=x4=x5; y4=.8[y3,y1]; y5=2/3[y7,y6]; if hefty or monospace: lft x2r=hround(5u-.5fudged.stem); rt x0r=hround(w-3u); x11r=x0r; else: lft x2r=hround 3.4u; x0=w-x2; x11r=x7r; fi filldraw stroke super_arc.e(1,2) & super_arc.e(2,3); % left inner bowl filldraw stroke super_arc.e(3,0) & super_arc.e(0,1); % right inner bowl filldraw stroke super_arc.e(8,9) & super_arc.e(9,10) & term.e(10,11,right,1,4); % left outer bowl and terminal if hefty or monospace: {{interim superness:=hein_super; filldraw stroke super_arc.e(0,8)}}; % link else: (x,y6r)=whatever[z6l,z7l]; x6r:=x; filldraw stroke z4e---z5e...z6e{right}...{up}z7e & super_arc.e(7,8); fi % stem and link penlabels(0,1,2,3,4,5,6,7,8,9,10,11); endchar; % From font cmr10, file accent.mf cmchar "Tilde (squiggle) accent"; beginchar(oct"176",9u#,min(asc_height#,10/7x_height#+.5dot_size#),0); italcorr h#*slant-u#; adjust_fit(0,0); if serifs: numeric theta; theta=angle(1/6(6u-vair),1/4(h-x_height)); pickup crisp.nib; numeric mid_width; mid_width=.4[vair,stem]; pos1(vair,theta+90); pos2(vair,theta+90); pos3(vair,theta+90); pos4(vair,theta+90); z2-z1=z4-z3=(mid_width-crisp)*dir theta; lft x1r=w-rt x4l=hround 1.5u; top y4r=h; bot y1l=vround(bot y1l+min(2/3[x_height,h],y3l-.25vair)-top y1r); pair delta; ypart delta=3(y3l-y1l); delta=whatever*dir theta; filldraw z1l..controls(z1l+delta)and(z3l-delta)..z3l..z4l --z4r..controls(z4r-delta)and(z2r+delta)..z2r..z1r--cycle; % stroke else: pickup fine.nib; pos1(vair,180); pos2(vair,90); pos3(.5[vair,slab],90); pos4(vair,90); pos5(vair,180); lft x1r=w-rt x5l=hround 1.5u; x2-x1=x3-x2=x4-x3=x5-x4; bot y1=bot y4l=vround(.75[x_height,h]-vair); top y2r=top y5=h; y3=.5[y2,y4]; filldraw stroke z1e{up}...z2e{right}..z3e..{right}z4e...{up}z5e; fi % stroke penlabels(1,2,3,4,5); endchar; % From font cmsy10, file symbol.mf cmchar "Circle for copyright, etc."; beginchar(oct"135",18u#,asc_height#,desc_depth#); autorounded; adjust_fit(if monospace:-3u#,-3u# else: 0,0 fi); pickup rule.nib; lft x6=hround u; x2=w-x6; top y8=h+o; bot y4=-d-o; circle_points; draw_circle; % circle labels(1,2,3,4,5,6,7,8); endchar; % From font cmr10, file accent.mf cmchar "Circumflex (hat) accent"; beginchar(oct"041",9u#,min(asc_height#,2x_height#),0); if serifs: italcorr .5[x_height#,h#]*slant+.5hair#-1.75u#; adjust_fit(0,0); pickup crisp.nib; pos2(.5[vair,curve],90); top y2r=h; x2=.5w; x1=w-x3=good.x 2.25u; y1=y3=.5[x_height,y2]; pos1(hair,angle(z2-z1)+90); pos3(hair,angle(z3-z2)+90); filldraw stroke z1e--z2e--z3e; % diagonals else: italcorr 2/3[x_height#,h#]*slant-.5stem#+.5vair#-.75u#; adjust_fit(0,0); pickup fine.nib; pos1(vair,0); pos3(vair,0); x1=w-x3; pos2(stem,0); top y2=h; x2=.5w; bot y1=bot y3=vround 2/3[h,x_height]-eps; lft x1l=hround(rt x2r-3.25u-.5vair); % same slope as in the acute accent z0=whatever[z1r,z2r]=whatever[z2l,z3l]; y4l=y4r=y2; x4l=good.x .2[x2l,x2]; x4r=w-x4l; filldraw z4l--z1l--z1r--z0--z3l--z3r--z4r--cycle; fi % diagonals penlabels(0,1,2,3,4); endchar; % From font cmr10, file accent.mf cmchar "Circumflex (hat) accent"; beginchar(oct"136",9u#,min(asc_height#,2x_height#),0); if serifs: italcorr .5[x_height#,h#]*slant+.5hair#-1.75u#; adjust_fit(0,0); pickup crisp.nib; pos2(.5[vair,curve],90); top y2r=h; x2=.5w; x1=w-x3=good.x 2.25u; y1=y3=.5[x_height,y2]; pos1(hair,angle(z2-z1)+90); pos3(hair,angle(z3-z2)+90); filldraw stroke z1e--z2e--z3e; % diagonals else: italcorr 2/3[x_height#,h#]*slant-.5stem#+.5vair#-.75u#; adjust_fit(0,0); pickup fine.nib; pos1(vair,0); pos3(vair,0); x1=w-x3; pos2(stem,0); top y2=h; x2=.5w; bot y1=bot y3=vround 2/3[h,x_height]-eps; lft x1l=hround(rt x2r-3.25u-.5vair); % same slope as in the acute accent z0=whatever[z1r,z2r]=whatever[z2l,z3l]; y4l=y4r=y2; x4l=good.x .2[x2l,x2]; x4r=w-x4l; filldraw z4l--z1l--z1r--z0--z3l--z3r--z4r--cycle; fi % diagonals penlabels(0,1,2,3,4); endchar; % My own creation cmchar "Box rule"; beginchar(oct"132",1u#,cap_height#+2u#,4.3u#); italcorr body_height#*slant+.5rule_thickness#-2u#; adjust_fit(0,0); pickup crisp.nib; pos1(vair,0); pos2(vair,0); x1=x2=hround 0; y1=h; y2=-d; filldraw stroke z1e--z2e; % stem penlabels(1,2); endchar; % My own creation. Only used by otroff. See note below. cmchar "Underscore"; beginchar("_",9.4u#,x_height#,.7u#); italcorr .5x_height#*slant-.5u#; adjust_fit(0,0); numeric below_baseline; below_baseline#:=4u#; define_pixels(below_baseline); pickup crisp.nib; pos1(vair,90); pos2(vair,90); top y1r=top y2r=vround(-below_baseline); x2=hround(w); x1=0; filldraw stroke z1e--z2e; % bar penlabels(1,2); endchar; % My own creation (This is only used by ditroff. Ditroff's underscore % needs to be a frog's hair longer than otroff's.) cmchar "Underscore"; beginchar(oct"041",9.4u#,x_height#,.7u#); italcorr .5x_height#*slant-.5u#; adjust_fit(0,0); numeric below_baseline; below_baseline#:=4u#; define_pixels(below_baseline); pickup crisp.nib; pos1(vair,90); pos2(vair,90); top y1r=top y2r=vround(-below_baseline); x2=hround(w+1u); x1=0; filldraw stroke z1e--z2e; % bar penlabels(1,2); endchar; % The delimiters are from the font cmex10, file bigdel.mf. I had to hack % them up extensively though to get them to work with troff. Troff wants % everything lined up in the center and the widths of the floor and ceiling % characters are the same as the parentheses. cmchar "Extensible left bracket---top"; beginchar(oct"022",8u#,cap_height#+2u#,4u#); adjust_fit(0,0); pickup fine.nib; pos1(heavy_rule_thickness,0); pos2(heavy_rule_thickness,0); top y1=h; y2=-d; x1=x2=hround(.5w); filldraw stroke z1e--z2e; % stem pos3(heavy_rule_thickness,90); pos4(heavy_rule_thickness,90); x3=x1l; rt x4=hround(w-.75u+.5heavy_rule_thickness); y3r=y4r=y1; filldraw stroke z3e--z4e; % upper bar penlabels(1,2,3,4); endchar; cmchar "Extensible left bracket---bottom"; beginchar(oct"020",8u#,cap_height#+4u#,2u#); adjust_fit(0,0); pickup fine.nib; pos1(heavy_rule_thickness,0); pos2(heavy_rule_thickness,0); y1=h; bot y2=-d; x1=x2=hround(.5w); filldraw stroke z1e--z2e; % stem pos5(heavy_rule_thickness,90); pos6(heavy_rule_thickness,90); x5=x1l; rt x6=hround(w-.75u+.5heavy_rule_thickness); y5l=y6l=y2; filldraw stroke z5e--z6e; % lower bar penlabels(1,2,5,6); endchar; cmchar "Extensible right bracket---top"; beginchar(oct"023",8u#,cap_height#+2u#,4u#); adjust_fit(0,0); pickup fine.nib; pos1(heavy_rule_thickness,0); pos2(heavy_rule_thickness,0); top y1=h; y2=-d; x1=x2=hround(.5w); filldraw stroke z1e--z2e; % stem pos3(heavy_rule_thickness,90); pos4(heavy_rule_thickness,90); x3=x1r; lft x4=hround(.75u-.5heavy_rule_thickness); y3r=y4r=y1; filldraw stroke z3e--z4e; % upper bar penlabels(1,2,3,4); endchar; cmchar "Extensible right bracket---bottom"; beginchar(oct"021",8u#,cap_height#+4u#,2u#); adjust_fit(0,0); pickup fine.nib; pos1(heavy_rule_thickness,0); pos2(heavy_rule_thickness,0); y1=h; bot y2=-d; x1=x2=hround(.5w); filldraw stroke z1e--z2e; % stem pos5(stem,90); pos6(stem,90); x5=x1r; lft x6=hround(.75u-.5heavy_rule_thickness); y5l=y6l=y2; filldraw stroke z5e--z6e; % lower bar penlabels(1,2,5,6); endchar; cmchar "Extensible left curly brace---middle"; beginchar(oct"030",8u#,cap_height#+4u#,4u#); adjust_fit(0,0); pickup fine.nib; numeric min_breadth; min_breadth=hround(rule_thickness+.6dw); pos4(min_breadth,0); pos4'(min_breadth,0); forsuffixes $=2,3,5,6: pos$(heavy_rule_thickness,0); endfor lft x4l=lft x4'l=hround(1.5u-.5min_breadth); x2=x3=x5=x6; x2=hround(.5w); y2=h; y6=-d; .5[y4,y4']=.5[y2,y6]=.5[y3,y5]; y3-y4=(y2-y6)/4; y4-y4'=min_breadth-fine; filldraw z2l---z3l...{3(x4l-x3l),y4-y3}z4l --z4'l{3(x5l-x4l),y5-y4'}...z5l---z6l--z6r---z5r ...{3(x4r-x5r),.5[y4,y4']-y5}.5[z4r,z4'r]{3(x3r-x4r),y3-.5[y4,y4']} ...z3r---z2r--cycle; % stroke penlabels(2,3,4,5,6); endchar; cmchar "Extensible right curly brace---middle"; beginchar(oct"031",8u#,cap_height#+4u#,4u#); adjust_fit(0,0); pickup fine.nib; numeric min_breadth; min_breadth=hround(rule_thickness+.6dw); pos4(min_breadth,0); pos4'(min_breadth,0); forsuffixes $=2,3,5,6: pos$(heavy_rule_thickness,0); endfor rt x4r=rt x4'r=hround(w-1.5u+.5min_breadth); x2=x3=x5=x6; x2=hround(.5w); y2=h; y6=-d; .5[y4,y4']=.5[y2,y6]=.5[y3,y5]; y3-y4=(y2-y6)/4; y4-y4'=min_breadth-fine; filldraw z2r---z3r...{3(x4r-x3r),y4-y3}z4r --z4'r{3(x5r-x4r),y5-y4'}...z5r---z6r--z6l---z5l ...{3(x4l-x5l),.5[y4,y4']-y5}.5[z4l,z4'l]{3(x3l-x4l),y3-.5[y4,y4']} ...z3l---z2l--cycle; % stroke penlabels(2,3,4,5,6); endchar; cmchar "Extension module"; beginchar(oct"017",8u#,cap_height#+4u#,4u#); adjust_fit(0,0); pickup fine.nib; numeric max_breadth; max_breadth=bold+2dw; pos2(heavy_rule_thickness,0); pos2'(heavy_rule_thickness,0); x2=x2'=hround(.5w); y2=h; y2'=-d; filldraw stroke z2e--z2'e; % link penlabels(2,2'); endchar; cmchar "Extensible left curly brace---top"; beginchar(oct"024",8u#,cap_height#+2u#,4u#); adjust_fit(0,0); pickup fine.nib; numeric min_breadth; min_breadth=hround(rule_thickness+.6dw); pos1(min_breadth,0); pos1'(min_breadth,0); pos2(heavy_rule_thickness,0); pos3(heavy_rule_thickness,0); rt x1r=rt x1'r=hround(w-1.5u+.5min_breadth); x2=x3=hround(.5w); top y1=h; y3=-d; y2=.5[y1,y3]; y1-y1'=min_breadth-fine; filldraw z1l{3(x2l-x1l),y2-y1}...z2l---z3l --z3r---z2r...{3(x1r-x2r),y1'-y2}z1'r--z1r--cycle; % stroke penlabels(1,2,3); endchar; cmchar "Extensible left curly brace---bottom"; beginchar(oct"025",8u#,cap_height#+4u#,2u#); adjust_fit(0,0); pickup fine.nib; numeric min_breadth; min_breadth=hround(rule_thickness+.6dw); pos7(min_breadth,0); pos7'(min_breadth,0); pos5(heavy_rule_thickness,0); pos6(heavy_rule_thickness,0); rt x7r=rt x7'r=hround(w-1.5u+.5min_breadth); x5=x6=hround(.5w); y5=h; y7=-d; y6=.5[y5,y7]; y7'-y7=min_breadth-fine; filldraw z5l---z6l...{3(x7l-x6l),y7-y6}z7l --z7r--z7'r{3(x6r-x7r),y6-y7'}...z6r---z5r--cycle; % stroke penlabels(5,6,7); endchar; cmchar "Extensible right curly brace---top"; beginchar(oct"026",8u#,cap_height#+2u#,4u#); adjust_fit(0,0); pickup fine.nib; numeric min_breadth; min_breadth=hround(rule_thickness+.6dw); pos1(min_breadth,0); pos1'(min_breadth,0); pos2(heavy_rule_thickness,0); pos3(heavy_rule_thickness,0); lft x1l=lft x1'l=hround(1.5u-.5min_breadth); x2=x3=hround(.5w); top y1=h; y3=-d; y2=.5[y1,y3]; y1-y1'=min_breadth-fine; filldraw z1r{3(x2r-x1r),y2-y1}...z2r---z3r --z3l---z2l...{3(x1l-x2l),y1'-y2}z1'l--z1l--cycle; % stroke penlabels(1,2,3); endchar; cmchar "Extensible right curly brace---bottom"; beginchar(oct"027",8u#,cap_height#+4u#,2u#); adjust_fit(0,0); pickup fine.nib; numeric min_breadth; min_breadth=hround(rule_thickness+.6dw); pos7(min_breadth,0); pos7'(min_breadth,0); pos5(heavy_rule_thickness,0); pos6(heavy_rule_thickness,0); lft x7l=lft x7'l=hround(1.5u-.5min_breadth); x5=x6=hround(.5w); top y5=h; bot y7=-d; y6=.5[y5,y7]; y7'-y7=min_breadth-fine; filldraw z5r---z6r...{3(x7r-x6r),y7-y6}z7r --z7l--z7'l{3(x6l-x7l),y6-y7'}...z6l---z5l--cycle; % stroke penlabels(5,6,7); endchar; bye.