% Based on the American Mathematical Society's bsymbols.mf % Edited by Ariel Barton to produce better sans serif symbols % Date: 2013/03/22 def char_negate(suffix c,t,b) = %c is center point; t is top point; b is bottom pickup rule.nib; w-x.t=x.b; y.t-y.c=y.c-y.b; draw z.t--z.b; penlabels(t,c,b); enddef; def char_center(suffix c) = % find center of type character x.c=w/2; y.c=.5[-d,h]; enddef; cmchar "Less than or not (double) equals sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"000",14u#,v_center(2spread#'+spread#+2rule_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; x2=x9=x7; x1=x8=x6; y7=y6; y8=y9; y7-y9=spread'; top y3-bot y6=spread'; draw z1--z2--z3; % diagonals draw z6--z7; draw z8--z9; % equal sign z.c=.5[z7,z8]; x.t=x.c; y.t=2/3[y6,y3]; char_negate(c,t,b); penlabels(1,2,3,6,7,8,9); endchar; cmchar "Greater than or not (double) equals sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"001",14u#,v_center(2spread#'+spread#+2rule_thickness#)); italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib; rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread; x2=x7=x9; x1=x6=x8; y6=y7; y8=y9; y2=.5[y1,y3]; top y3-bot y6=spread'; top y1=h; y7-y9=spread'; draw z1--z2--z3; % diagonals draw z6--z7; draw z8--z9; z.c=.5[z7,z8]; x.t=x.c; y.t=2/3[y6,y3]; char_negate(c,t,b); penlabels(1,2,3,6,7,8,9); endchar; cmchar "Not 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"002",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); 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-3u; draw z1--z2--z3; % diagonals x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % bar char_center(100); x101=w-3u; y101=y1+3u; char_negate(100,101,102); labels(1,2,3,8,9,99,100); endchar; cmchar "Not 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"003",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); 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-3u; draw z1--z2--z3; % diagonals x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % bar char_center(100); x101=w-3u; y101=y1+3u; char_negate(100,101,102); labels(1,2,3,8,9,99,100); endchar; cmchar "Not less than sign"; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"004",14u#,v_center(spread#+rule_thickness#+6u#)); 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 char_center(100); x101=w-3u; y101=y1+3u; char_negate(100,101,102); labels(1,2,3); endchar; cmchar "Not greater than sign"; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"005",14u#,v_center(spread#+rule_thickness#+6u#)); 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 char_center(100); x101=w-3u; y101=y1+3u; char_negate(100,101,102); labels(1,2,3,99,100); endchar; cmchar "Not precedes sign"; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"006",14u#,v_center(spread#+rule_thickness#+6u#)); adjust_fit(0,0); pickup rule.nib; autorounded; lft x2=hround 1.5u-epsilon; x1=x3=w-x2; y1-y3=spread; y2=.5[y1,y3]; top y1=h-3u; draw z1{-u,-spread}...{left}z2; % upper diagonal draw z3{-u,spread}...{left}z2; % lower diagonal char_center(100); x101=w-3u; y101=y1+3u; char_negate(100,101,102); labels(1,2,3,99,100); endchar; cmchar "Not follows sign"; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"007",14u#,v_center(spread#+rule_thickness#+6u#)); adjust_fit(0,0); pickup rule.nib; autorounded; lft x1=hround 1.5u-epsilon; x2=w-x1; x3=x1; y1-y3=spread; y2=.5[y1,y3]; top y1=h-3u; draw z1{u,-spread}...{right}z2; % upper diagonal draw z3{u,spread}...{right}z2; % lower diagonal char_center(100); x101=w-3u; y101=y1+3u; char_negate(100,101,102); labels(1,2,3,99,100); endchar; cmchar "Less than or slanted not (double) equals sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"010",14u#,v_center(2spread#'+spread#+2rule_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; x2=x9=x7; x1=x8=x6; y7=y6; y8=y9; y7-y9=spread'; top y3-bot y6=spread'; draw z1--z2--z3; % diagonals draw z6--z7; draw z8--z9; % equal sign z.c=.5[z7,z8]; x.t=2/3[x.c, x3]; y.t=2/3[y6,y3]; char_negate(c,t,b); penlabels(1,2,3,6,7,8,9); endchar; cmchar "Greater than or slanted not (double) equals sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"011",14u#,v_center(2spread#'+spread#+2rule_thickness#)); italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib; rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread; x2=x7=x9; x1=x6=x8; y6=y7; y8=y9; y2=.5[y1,y3]; top y3-bot y6=spread'; top y1=h; y7-y9=spread'; draw z1--z2--z3; % diagonals draw z6--z7; draw z8--z9; z.c=.5[z7,z8]; x.t=2/3[x.c, w-x3]; y.t=2/3[y6,y3]; char_negate(c,t,b); penlabels(1,2,3,6,7,8,9); endchar; cmchar "Not less than or (slanted) equal sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"012",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); 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]; y3-y8=y2-y9=spread'; top y1=h-3u; x2=x9; x1=x8; draw z1--z2--z3; % diagonals draw z8--z9; % equal sign char_center(c); x.t=w-3u; y.t=y1+3u; char_negate(c,t,b); penlabels(1,2,3,8,9); endchar; cmchar "Not greater than or (slanted) equal sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"13",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib; rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread; x2=x9; x1=x8; y2=.5[y1,y3]; y3-y8=y2-y9=spread'; top y1=h-3u; draw z1--z2--z3; % diagonals draw z8--z9; char_center(c); x.t=w-3u; y.t=y1+3u; char_negate(c,t,b); penlabels(1,2,3,8,9); endchar; cmchar "Less than or not 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"014",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 x100=w/2; y100=y8; % center point y101=.5[y8,y3]; x101-x100=y101-y100; char_negate(100,101,102); labels(1,2,3,8,9); endchar; cmchar "Greater than or not 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"015",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 x100=w/2; y100=y8; % center point y101=.5[y8,y3]; x101-x100=y101-y100; char_negate(100,101,102); labels(1,2,3,8,9); endchar; cmchar "Not precedes or equals sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of $=$' compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"016",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); 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-3u; draw z1{-u,-spread}...{left}z2; % upper diagonal draw z3{-u,spread}...{left}z2; % lower diagonal x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % bar char_center(100); x101=w-3u; y101=y1+3u; char_negate(100,101,102); labels(1,2,3,8,9,99,100); endchar; cmchar "Not follows or equals sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of $=$' compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"017",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); 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-3u; draw z1{u,-spread}...{right}z2; % upper diagonal draw z3{u,spread}...{right}z2; % lower diagonal x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % bar char_center(100); x101=w-3u; y101=y1+3u; char_negate(100,101,102); labels(1,2,3,8,9,99,100); endchar; cmchar "Precedes or not approximately equals sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(.54x_height#,.55x_height#); spread#'':=spread#; spread'':=spread; compute_spread(5/4 x_height#,3/2 x_height#); beginchar(oct"020",14u#,v_center(spread#'+spread#+spread#'')); 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; draw z1{-u,-spread}...{left}z2; %upper diagonal' draw z3{-u,spread}...{left}z2; % lower diagonal pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness; if vair#>.8curve#: pickup rule.nib; autorounded; fi lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; bot y11=bot y13; top y12=top y14; top y12-bot y11=spread''; y3-y14=spread'; draw z11{up}...z12{right}..{right}z13...{up}z14; x.c=w/2; y.c=.5[y12,y13]; x.t=3/8[x.c,x14]; y.t=2/3[y12,y3]; char_negate(c,t,b); penlabels(1,2,3,11,12,13,14); endchar; cmchar "Follows or not equals sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % spread of similarity sign compute_spread(.54 x_height#,.66 x_height#); spread#'':=spread#; spread'':=spread; % spread between symbols compute_spread(5/4 x_height#,3/2 x_height#); % spread of follows sign beginchar(oct"021",14u#,v_center(spread#'+spread#+spread#'')); adjust_fit(0,0); pickup rule.nib; autorounded; lft x1=hround 1.5u-eps; x1=x3; x2=w-x1; y1-y3=spread; y2=.5[y1,y3]; top y1=h; draw z1{u,-spread}...{right}z2; %upper diagonal' draw z3{u,spread}...{right}z2; % lower diagonal pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness; if vair#>.8curve#: pickup rule.nib; autorounded; fi lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; bot y11=bot y13; top y12=top y14; top y12-bot y11=spread''; y3-y14=spread'; draw z11{up}...z12{right}..{right}z13...{up}z14; x.c=w/2; y.c=.5[y12,y13]; x.t=3/8[x.c,x14]; y.t=2/3[y12,y3]; char_negate(c,t,b); penlabels(1,2,3,11,12,13,14); endchar; cmchar "Less than or not similar to sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(.54x_height#,.55x_height#); spread#'':=spread#; spread'':=spread; compute_spread(5/4 x_height#,3/2 x_height#); beginchar(oct"022",14u#,v_center(spread#'+spread#+spread#'')); 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; draw z1--z2--z3; pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness; if vair#>.8curve#: pickup rule.nib; autorounded; fi lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; bot y11=bot y13; top y12=top y14; top y12-bot y11=spread''; y3-y14=spread'; draw z11{up}...z12{right}..{right}z13...{up}z14; x.c=w/2; y.c=.5[y12,y13]; x.t=3/8[x.c,x14]; y.t=2/3[y12,y3]; char_negate(c,t,b); penlabels(1,2,3,4,11,12,13,14); endchar; cmchar "Greater than or not similar to sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(.54x_height#,.66x_height#); spread#'':=spread#; spread'':=spread; compute_spread(5/4 x_height#,3/2 x_height#); beginchar(oct"023",14u#,v_center(spread#'+spread#+spread#'')); adjust_fit(0,0); pickup rule.nib; autorounded; lft x1=hround 1.5u-eps; x1=x3; x2=w-x1; y1-y3=spread; y2=.5[y1,y3]; top y1=h; draw z1--z2--z3; pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness; if vair#>.8curve#: pickup rule.nib; autorounded; fi lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; bot y11=bot y13; top y12=top y14; top y12-bot y11=spread''; y3-y14=spread'; draw z11{up}...z12{right}..{right}z13...{up}z14; z.c=.5[z12,z13]; x.t=3/8[x.c,x14]; y.t=2/3[y12,y3]; char_negate(c,t,b); penlabels(1,2,3,4,11,12,13,14); endchar; cmchar "Negated less than or (double) equals sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"024",14u#,v_center(2spread#'+spread#+2rule_thickness#+6u#)); 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-3u; x2=x9=x7; x1=x8=x6; y7=y6; y8=y9; y7-y9=spread'; top y3-bot y6=spread'; draw z1--z2--z3; % diagonals draw z6--z7; draw z8--z9; % equal sign char_center(c); x.t=w-3u; y.t=y1+3u; char_negate(c,t,b); penlabels(1,2,3,6,7,8,9); endchar; cmchar "Negated greater than or (double) equals sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"025",14u#,v_center(2spread#'+spread#+2rule_thickness#+6u#)); italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib; rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread; x2=x7=x9; x1=x6=x8; y6=y7; y8=y9; y2=.5[y1,y3]; top y3-bot y6=spread'; top y1=h-3u; y7-y9=spread'; draw z1--z2--z3; % diagonals draw z6--z7; draw z8--z9; char_center(c); x.t=w-3u; y.t=y1+3u; char_negate(c,t,b); penlabels(1,2,3,6,7,8,9); endchar; cmchar "Precedes or slanted not (double) equals sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"026",14u#,v_center(2spread#'+spread#+2rule_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; x2=x9=x7; x1=x8=x6; y7=y6; y8=y9; y7-y9=spread'; top y3-bot y6=spread'; draw z1{-u,-spread}..{left}z2; % diagonals draw z3{-u, spread}..{left}z2; draw z6--z7; draw z8--z9; % equal sign z.c=.5[z7,z8]; x.t=2/3[x.c, x3]; y.t=2/3[y6,y3]; char_negate(c,t,b); penlabels(1,2,3,6,7,8,9); endchar; cmchar "Follows or slanted not (double) equals sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"027",14u#,v_center(2spread#'+spread#+2rule_thickness#)); italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib; rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread; x2=x7=x9; x1=x6=x8; y6=y7; y8=y9; y2=.5[y1,y3]; top y3-bot y6=spread'; top y1=h; y7-y9=spread'; draw z1{u,-spread}..{right}z2; % diagonals draw z3{u,spread}..{right}z2; draw z6--z7; draw z8--z9; z.c=.5[z7,z8]; x.t=2/3[x.c, w-x3]; y.t=2/3[y6,y3]; char_negate(c,t,b); penlabels(1,2,3,6,7,8,9); endchar; cmchar "Precedes with not approximate equality sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of $=$' compute_spread(.54 x_height#,.66 x_height#); spread#'':=spread#; spread'':=spread; % the spread of $=$' compute_spread(1.111 x_height#,1.333 x_height#); beginchar(oct"030",14u#,v_center(2spread#''+spread#+2rule_thickness#)); adjust_fit(0,0); % now for precedes sign, using z9 (top), z10 (vertex), & z11 (bot) pickup rule.nib; lft x10= hround 1.5u-eps; x9=x11=w-x10; y9-y11=spread; y10=.5[y9,y11]; top y9=h; draw z9{-u,-spread}...{left}z10; draw z11{-u,spread}...{left}z10; 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; top y3=top y1=bot y11-spread''; top y2=top y4=bot y1+spread'; z1-z5=z2-z6=z3-z7=z4-z8=(0,spread''); draw z1{up}...z2{right}..{right}z3...{up}z4; % upper stroke draw z5{up}...z6{right}..{right}z7...{up}z8; % lower stroke z.c=.5[z2,z7]; x.t=3/8[x.c,x4]; y.t=1/3[y2,y11]; char_negate(c,t,b); labels(1,2,3,4,5,6,7,8,9,10,11); endchar; cmchar "Follows with not approximate equality sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of $=$' compute_spread(.54 x_height#,.66 x_height#); spread#'':=spread#; spread'':=spread; % the spread of $=$' compute_spread(1.111 x_height#,1.333 x_height#); beginchar(oct"031",14u#,v_center(2spread#''+spread#+2rule_thickness#)); adjust_fit(0,0); % now for follow sign, using z9 (top), z10 (vertex), & z11 (bot) pickup rule.nib; lft x9 = hround 1.5u-eps; x10=w-x9; x11=x9; y9-y11=spread; y10=.5[y9,y11]; top y9=h; draw z9{u,-spread}...{right}z10; draw z11{u,spread}...{right}z10; 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; top y3=top y1=bot y11-spread''; top y2=top y4=bot y1+spread'; z1-z5=z2-z6=z3-z7=z4-z8=(0,spread''); draw z1{up}...z2{right}..{right}z3...{up}z4; % upper stroke draw z5{up}...z6{right}..{right}z7...{up}z8; % lower stroke z.c=.5[z2,z7]; x.t=3/8[x.c,x4]; y.t=1/3[y2,y11]; char_negate(c,t,b); labels(1,2,3,4,5,6,7,8,9,10,11); endchar; cmchar "Less than or not approximately equal to sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(.54 x_height#,.66 x_height#); spread#'':=spread#; spread'':=spread; % the spread of $=$' compute_spread(1.111 x_height#,1.333 x_height#); beginchar(oct"032",14u#,v_center(2spread#''+spread#+2rule_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; draw z1--z2--z3; pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness; if vair#>.8curve#: pickup rule.nib; autorounded; fi lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; top y13=top y11=bot y3-spread''; top y12=top y14=bot y11+spread'; path p; p=z11{up}...z12{right}..{right}z13...{up}z14; draw p; draw p shifted (0,-spread''); x.c=w/2; y.c=.5[y12, y13-spread'']; x.t=3/8[x.c,x14]; y.t=2/3[y12,y3]; char_negate(c,t,b); penlabels(1,2,3,4,11,12,13,14); endchar; cmchar "Greater than or not approximately equal to sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; compute_spread(.54 x_height#,.66 x_height#); spread#'':=spread#; spread'':=spread; % the spread of $=$' compute_spread(1.111 x_height#,1.333 x_height#); beginchar(oct"033",14u#,v_center(2spread#''+spread#+2rule_thickness#)); adjust_fit(0,0); pickup rule.nib; autorounded; lft x1=hround 1.5u-eps; x1=x3; x2=w-x1; y1-y3=spread; y2=.5[y1,y3]; top y1=h; draw z1--z2--z3; pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness; if vair#>.8curve#: pickup rule.nib; autorounded; fi lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; bot y11=bot y13; top y12=top y14; top y12-bot y11=spread'; bot y3- spread''=top y11; path p; p=z11{up}...z12{right}..{right}z13...{up}z14; draw p; draw p shifted (0,-spread''); x.c=w/2; y.c=.5[y12,y13-spread'']; x.t=3/8[x.c,x14]; y.t=2/3[y12,y3]; char_negate(c,t,b); penlabels(1,2,3,4,11,12,13,14); endchar; cmchar "Thick not similar to sign"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"034",14u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup pencircle xscaled .8rule_thickness yscaled 1.87rule_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 char_center(100); x101=w-4u; y101=y1+5u; char_negate(100,101,102); labels(1,2,3,4,99,100); endchar; cmchar "Not approximately equal to sign"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"035",14u#,v_center(3spread#+2rule_thickness#+8u#)); adjust_fit(0,0); pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness; if vair#>.8curve#: pickup rule.nib; autorounded; fi % lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1; y1=y3; top y2=top y4=h-4u; top y2-bot y1=spread; draw z1{up}...z2{right}..{right}z3...{up}z4; % stroke pickup rule.nib; lft x5=lft x7=hround u-eps; x6=x8=w-x5; y5=y6=y1-spread; y7=y8=y5-spread; draw z5--z6; draw z7--z8; % double equal sign char_center(100); x101=w-3u; y101=y1+4u; char_negate(100,101,102); labels(1,2,3,4,5,6,7,8,99,100); endchar; cmchar "45 degree angle line"; beginchar(oct"036",16u#,asc_height#,asc_depth#); adjust_fit(0,0); pickup rule.nib; bot y1 =-d-eps; .5[y1,y2]=math_axis; lft x1 = 0+eps =x0; % rt x2=; z0-z1=(z2-z1) rotated 45; draw z1--z2; labels(0,1,2); endchar; cmchar "135 degree angle line"; beginchar(oct"037",16u#,body_height#,asc_depth#); adjust_fit(0,0); pickup rule.nib; bot y1 =-d-eps; .5[y1,y2]=math_axis; lft x2 = 0+eps= x0; % rt x2=; z0-z2=(z1-z2) rotated -45; draw z1--z2; labels(0,1,2); endchar; cmchar "Negated 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"040",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 x100=w/2; y100=.5[y3,y8]; x101=x3-2u; y101=y3+2u; char_negate(100,101,102); labels(1,2,3,4,5,8,9); endchar; cmchar "Negated 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"041",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 x100=x3+2.5u; y100=.5[y8,y3]; x101=x100+2.5u; y101=y3+2u; y101-y100=y100-y102; x101-x100=x100-x102; draw z101--z102; labels(1,2,3,4,5,8,9); endchar; cmchar "Negated subset or (double) 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"042",14u#,v_center(2spread#'+spread#+2rule_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; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % lower bar x9'=x9; x8'=x8; y9'=y8'; y9-y9'=spread'; draw z8'--z9'; char_center(c); x.t=w-2.5u; y.t=h+u; char_negate(c,t,b); penlabels(1,2,3,4,5,8,9,8',9'); endchar; cmchar "Negated superset or (double) 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"043",14u#,v_center(2spread#'+spread#+2rule_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; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % lower bar x9'=x9; x8'=x8; y9'=y8'; y9-y9'=spread'; draw z8'--z9'; char_center(c); x.t=w-2.5u; y.t=h+u; char_negate(c,t,b); labels(1,2,3,4,5,8,9); endchar; cmchar "Subset or not (double) 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"044",14u#,v_center(2.33spread#'+spread#+2rule_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; x9=x2; y8=y9; y3-y9=1.33spread'; draw z8--z9; % lower bar x9'=x9; x8'=x8; y9'=y8'; y9-y9'=spread'; draw z8'--z9'; x.c=w/2; y.c=.5[y9,y9']; x.t=1/2[x.c,w]; y.t=.5[y8,y3]; char_negate(c,t,b); penlabels(1,2,3,4,5,8,9,8',9'); endchar; cmchar "Superset or not (double) 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"045",14u#,v_center(2.33spread#'+spread#+2rule_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; x9=x2; y8=y9; y3-y9=1.33spread'; draw z8--z9; % lower bar x9'=x9; x8'=x8; y9'=y8'; y9-y9'=spread'; draw z8'--z9'; x.c=w/2; y.c=.5[y9,y9']; x.t=1/2[x.c,w]; y.t=.5[y8,y3]; char_negate(c,t,b); labels(1,2,3,4,5,8,9); endchar; cmchar "Another not subset or (double) 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"046",14u#,v_center(2spread#'+spread#+2rule_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; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % lower bar x9'=x9; x8'=x8; y9'=y8'; y9-y9'=spread'; draw z8'--z9'; x.t=w-2.5u; y.t=y3+2u; x.b=.5[x2,x5]; y.b=y9'-2u; z.c=.5[z.b,z.t]; draw z.b--z.t; labels(c,b,t); penlabels(1,2,3,4,5,8,9,8',9'); endchar; cmchar "Another superset or (double) 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"047",14u#,v_center(2spread#'+spread#+2rule_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; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % lower bar x9'=x9; x8'=x8; y9'=y8'; y9-y9'=spread'; draw z8'--z9'; x.t=x5; y.t=y3+2u; x.b=2.5u; y.b=y9'-2u; z.c=.5[z.b,z.t]; draw z.b--z.t; labels(c,b,t); labels(1,2,3,4,5,8,9); endchar; cmchar "Subset or not 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"050",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 z100=.5[z8,z9]; y101=.5[y8,y3];x101-x100=y101-y100; char_negate(100,101,102); labels(1,2,3,4,5,8,9); endchar; cmchar "Superset or not 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"051",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 z100=.5[z8,z9]; y101=.5[y8,y3];x101-x100=y101-y100; char_negate(100,101,102); labels(1,2,3,4,5,8,9); endchar; cmchar "Not 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"052",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); 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-3u; 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 char_center(100); y101=y1+3u; x101=w-3u; char_negate(100,101,102); labels(1,2,3,4,5,8,9); endchar; cmchar "Not 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"053",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); 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-3u; 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 char_center(100); y101=y1+3u; x101=w-3u; char_negate(100,101,102); labels(1,2,3,4,5,8,9); endchar; cmchar "Negated double vertical line (norm or cardinality)"; beginchar(oct"054",9u#,body_height#,paren_depth#); adjust_fit(0,0); pickup rule.nib; x1=x2; top y1=h; .5[y1,y2]=math_axis; x3=x4=w-x1; y3=y1; y4=y2; compute_spread(.45x_height#,.55x_height#); x3-x1=spread; draw z1--z2; draw z3--z4; % stems char_center(c); x.t=w; y.t=2/3h; char_negate(c,t,b); labels(1,2,3,4); endchar; cmchar "Negated vertical line"; beginchar(oct"055",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 x.t=w; x.b=w-x.t; y.t=2/3h; y.b=1/3h; draw z.b--z.t; labels(1,2,b,t); endchar; cmchar "Negated cute vertical bar"; beginchar(oct"056",4u#,6u#+math_axis#,6u#-math_axis#); italcorr math_axis#*slant - .5u#; adjust_fit(0,0); pickup rule.nib; x1=x2=hround(w/2); top y1=x_height; bot y2=-o; draw z1--z2; char_center(c); x.t=w; y.t=5/8h; char_negate(c,t,b); labels(1,2); endchar; cmchar "Negated pair of cute vertical bars"; beginchar(oct"057",7u#,6u#+math_axis#,6u#-math_axis#); italcorr math_axis#*slant - .5u#; adjust_fit(0,0); pickup rule.nib; lft x1=u; x2=x1; top y1=x_height; bot y2=-o; x3=w-x1; x4=x3; y3=y1; y4=y2; draw z1--z2; draw z3--z4; char_center(c); x.t=w; y.t=5/8h; char_negate(c,t,b); labels(1,2,3,4); endchar; cmchar "Negated left turnstile"; beginchar(oct"060",11u#,asc_height#,0); adjust_fit(0,0); pickup rule.nib; .5[y1,y2]=y3=y4; x1=x2=x3; lft x3=hround u; x4=w-x3; top y1=h; bot y2=0; draw z1--z2; % stem draw z3--z4; % bar top rt z.t=(w-u,h); bot lft z.b=(-u,0); draw z.t--z.b; labels(1,2,3,4,b,t); endchar; cmchar "Negated forces symbol"; beginchar(oct"061",13u#,asc_height#,0); adjust_fit(0,0); pickup rule.nib; top y1=h; bot y2=0; y3=y4=good.y .5h; y5=y1; y6=y2; lft x5=hround u; x4=w-x5; compute_spread(.45x_height#,.55x_height#); x1=x5+spread; x1=x2=x3; x6=x5; draw z6--z5; draw z2--z1; draw z3--z4; top rt z.t=(w-u,h); bot lft z.b=(-u,0); draw z.t--z.b; penlabels(1,2,3,4,5,6,b,t); endchar; cmchar "Negated satisfies symbol"; beginchar(oct"062",11u#,asc_height#,0); adjust_fit(0,0); pickup rule.nib; compute_spread(.45x_height#,.55x_height#); top y1=h; bot y2=0; y0=good.y .5[y1,y2]; y3=vround y0+.5spread; y5=vround y0- .5spread; y4=y3; y6=y5; lft x1=hround u; x4=w-x1; x1=x2=x3=x5; x4=x6; x0=x1; draw z1--z2; % vertical line draw z3--z4; % draw top horizontal piece draw z5--z6; % draw bottom horizontal piece top rt z.t=(w-u,h); bot lft z.b=(-u,0); draw z.t--z.b; penlabels(0,1,2,3,4,5,6,b,t); endchar; cmchar "Negated forces symbol with extra bar"; beginchar(oct"063",13u#,asc_height#,0); adjust_fit(0,0); pickup rule.nib; top y1=h; bot y2=0; y3=y4=good.y .5h; y5=y1; y6=y2; lft x5=hround u; x4=w-x5; compute_spread(.45x_height#,.55x_height#); x1=x5+spread; x1=x2=x3; x6=x5; x3'=x3; x4'=x4; y3:=y3+.5spread; y4:=y3; y3'=y4'=y3-spread; draw z6--z5; draw z2--z1; draw z3--z4; draw z3'--z4'; % extra bar top rt z.t=(w-u,h); bot lft z.b=(-u,0); draw z.t--z.b; penlabels(1,2,3,4,5,6,b,t); endchar; cmchar "Negated rightward isosceles triangle with lower bar"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of $=$' compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"064",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); adjust_fit(0,0); pickup rule.nib; lft x2=hround(1.5u); x3=x2; x1=hround(w-x2); top y2=h-3u; y2-y3=spread; y1=.5[y2,y3]; x4=x2; x5=x1; y3-y4=spread'; y5=y4; draw z1--z2--z3--cycle; draw z4--z5; char_center(c); x.t=1/2[x.c,w]; y.t=y2+3u; char_negate(c,t,b); penlabels(1,2,3,4,5); endchar; cmchar "Negated leftward isosceles triangle with lower bar"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of $=$' compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"065",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); adjust_fit(0,0); pickup rule.nib; rt x2=hround(w-1.5u-eps); x3=x2; x1=hround(w-x2); top y2=h-3u; y2-y3=spread; y1=.5[y2,y3]; x4=x2; x5=x1; y3-y4=spread'; y5=y4; draw z1--z2--z3--cycle; draw z4--z5; char_center(c); x.t=1/2[x.c,w]; y.t=y2+3u; char_negate(c,t,b); penlabels(1,2,3,4,5); endchar; cmchar "Negated leftward pointing isosceles triangle"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of $=$' compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"066",14u#,v_center(spread#+rule_thickness#+6u#)); adjust_fit(0,0); pickup rule.nib; rt x2=hround(w-1.5u-eps); x3=x2; x1=hround(w-x2); top y2=h-3u; y2-y3=spread; y1=.5[y2,y3]; draw z1--z2--z3--cycle; char_center(c); x.t=1/2[x.c,w]; y.t=y2+3u; char_negate(c,t,b); penlabels(1,2,3); endchar; cmchar "Negated rightward pointing isosceles triangle"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of $=$' compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"067",14u#,v_center(spread#+rule_thickness#+6u#)); adjust_fit(0,0); pickup rule.nib; lft x2=hround(1.5u); x3=x2; x1=hround(w-x2); top y2=h-3u; y2-y3=spread; y1=.5[y2,y3]; draw z1--z2--z3--cycle; char_center(c); x.t=1/2[x.c,w]; y.t=y2+3u; char_negate(c,t,b); penlabels(1,2,3); endchar; cmchar "Negated leftward arrow"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"070",18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(min(bar,rule_thickness),0); pos4(min(bar,rule_thickness),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(min(bar,rule_thickness),angle(z4-z0)); z5l=z0; pos6(min(bar,rule_thickness),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 char_center(100); top y101=top y3; x101=x100+2u; char_negate(100,101,102); penlabels(0,1,2,3,4,5,6,9); endchar; cmchar "Negated rightward arrow"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"071",18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(min(bar,rule_thickness),0); pos4(min(bar,rule_thickness),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(min(bar,rule_thickness),angle(z4-z0)); z5l=z0; pos6(min(bar,rule_thickness),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 char_center(100); top y101=top y3; x101=x100+2u; char_negate(100,101,102); penlabels(0,1,2,3,4,5,6,9); endchar; cmchar "Negated left-and-right arrow"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"075",18u#, v_center(if monospace:.6asc_height#+fi spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(min(bar,rule_thickness),0); pos4(min(bar,rule_thickness),0); y0=y1=y2=math_axis if monospace:+vround.3asc_height fi; lft x0=hround u; if monospace: x1+.5rule_thickness=hround(w-u) else: x1=.5w fi; y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; pos5(min(bar,rule_thickness),angle(z4-z0)); z5l=z0; pos6(min(bar,rule_thickness),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; % left arrowhead and stem pos11(rule_thickness,90); pos12(rule_thickness,90); pos13(min(bar,rule_thickness),0); pos14(min(bar,rule_thickness),0); y10=y11=y12=math_axis if monospace:-vround.3asc_height fi; rt x10=hround(w-u); if monospace: x11-.5rule_thickness=hround u else: x11=.5w fi; y13-y10=y10-y14=.24asc_height+eps; x13=x14=x10-3u-eps; pos15(min(bar,rule_thickness),angle(z14-z10)); z15l=z10; pos16(min(bar,rule_thickness),angle(z13-z10)); z16l=z10; z19=.381966[.5[z13,z14],z10]; numeric t; path p; p=z14l{z19-z14}..z16r; t=xpart(p intersectiontimes((0,y12l)--(w,y12l))); x12=xpart point t of p; filldraw z10..{z14-z19}z14r--subpath (0,t) of\\(z14l{z19-z14}..z16r) --z12l---z11l..z11r---z12r--subpath (t,0) of\\(z13l{z19-z13}..z15r) --z13r{z19-z13}..z10 & cycle; % right arrowhead and stem char_center(100); top y101=top y3; x101=x100+2u; char_negate(100,101,102); penlabels(0,1,2,3,4,5,6,9,10,11,12,13,14,15,16,19); endchar; cmchar "Negated double leftward arrow"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"072",18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup rule.nib; lft x7=hround u-eps; x8=x7; x1=x2=w-x7; y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis; draw z1--z7; draw z2--z8; % bars pickup crisp.nib; lft x0=hround u-eps; y0=good.y math_axis; pos3(rule_thickness,0); pos4(rule_thickness,0); y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0+6u+eps; pos5(rule_thickness,angle(z4-z0)); z5l=z0; pos6(rule_thickness,angle(z3-z0)); z6l=z0; z9=.381966[.5[z3,z4],z0]; erase filldraw z0..{z3-z9}z3--(0,y3) --(0,y4)--z4{z9-z4}..z0 & cycle; % erase excess numeric t; path p; p=z4r{z9-z4}..z6r; t=xpart(p intersectiontimes((0,y0)--(w,y0))); filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r) --subpath (t,0) of\\(z3r{z9-z3}..z5r)--z3l{z9-z3}..z0 & cycle; % arrowhead pickup rule.nib; x100=.5[x9,x1]; y100=y9; x101=x100+2u; top y101=top y3; y101-y100=y100-y102; x101-x100=x100-x102; draw z101--z102; penlabels(0,1,2,3,4,5,6,7,8,9); endchar; cmchar "Negated double rightward arrow"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"073",18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup rule.nib; lft x1=hround u-eps; x2=x1; x7=x8=w-x1; y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis; draw z1--z7; draw z2--z8; % bars pickup crisp.nib; rt x0=hround(w-u)+eps; y0=good.y math_axis; pos3(rule_thickness,0); pos4(rule_thickness,0); y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0-6u-eps; pos5(rule_thickness,angle(z4-z0)); z5l=z0; pos6(rule_thickness,angle(z3-z0)); z6l=z0; z9=.381966[.5[z3,z4],z0]; erase filldraw z0..{z3-z9}z3--(w,y3) --(w,y4)--z4{z9-z4}..z0 & cycle; % erase excess numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes((0,y0)--(w,y0))); filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r) --subpath (t,0) of\\(z3l{z9-z3}..z5r)--z3r{z9-z3}..z0 & cycle; % arrowhead pickup rule.nib; x100=.5[x9,x1]; y100=y9; x101=x100+2u; top y101=top y3; y101-y100=y100-y102; x101-x100=x100-x102; draw z101--z102; penlabels(0,1,2,3,4,5,6,7,8,9); endchar; cmchar "Negated double left-and-right arrow"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"074",18u#,v_center(spread#+rule_thickness#)); adjust_fit(if monospace: -u#,-u# else: 0,0 fi); pickup rule.nib; lft x7=hround u-eps; x8=x7; x1=x2=w-x7; y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis; draw z1--z7; draw z2--z8; % bars pickup crisp.nib; lft x0=hround u-o; y0=good.y math_axis; pos3(rule_thickness,0); pos4(rule_thickness,0); y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0+5u+eps; pos5(rule_thickness,angle(z4-z0)); z5l=z0; pos6(rule_thickness,angle(z3-z0)); z6l=z0; z9=.381966[.5[z3,z4],z0]; erase filldraw z0..{z3-z9}z3--(0,y3) --(0,y4)--z4{z9-z4}..z0 & cycle; % erase excess at left numeric t; path p; p=z4r{z9-z4}..z6r; t=xpart(p intersectiontimes((0,y0)--(w,y0))); filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r) --subpath (t,0) of\\(z3r{z9-z3}..z5r) --z3l{z9-z3}..z0 & cycle; % left arrowhead rt x10=hround(w-u)+o; y10=good.y math_axis; pos13(rule_thickness,0); pos14(rule_thickness,0); y13=y3; y14=y4; x13=x14=x10-5u-eps; pos15(rule_thickness,angle(z14-z10)); z15l=z10; pos16(rule_thickness,angle(z13-z10)); z16l=z10; z19=.381966[.5[z13,z14],z10]; erase filldraw z10..{z13-z19}z13--(w,y13) --(w,y14)--z14{z19-z14}..z10 & cycle; % erase excess at right numeric t; path p; p=z14l{z19-z14}..z16r; t=xpart(p intersectiontimes((0,y10)--(w,y10))); filldraw z10..{z14-z19}z14r--subpath (0,t) of\\(z14l{z19-z14}..z16r) --subpath (t,0) of\\(z13l{z19-z13}..z15r) --z13r{z19-z13}..z10 & cycle; % right arrowhead char_center(100); top y101=top y13; x101=x100+1.5u; char_negate(100,101,102); penlabels(0,1,2,3,4,5,6,7,8,9,10,13,14,15,16,19); endchar; cmchar "Times-division symbol"; beginarithchar(oct"076"); pickup rule.nib; x11=good.x(1/sqrt2)[.5w,rt u]; y11=good.y(1/sqrt2)[math_axis,bot h]; x12=x13=w-x11; x14=x11; .5[y11,y12]=.5[y13,y14]=math_axis; y12=y14; draw z11--z12; draw z13--z14; % diagonals x3-.5dot_size=hround(.5w-.5dot_size); %center_on(x3); 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,11,12,13,14); endchar; cmchar "Null set symbol"; beginarithchar(oct"077"); pickup rule.nib; z0=(w/2,h/2); % center of circle rt x1-lft x0=hround(h/2 + o); y1=y0; numeric theta; theta=45; for i=2 upto 8: z[i]-z0=(z1-z0) rotated ((i-1)*theta); endfor draw z8...z1 for i=2 upto 8: ...z[i] endfor; lft x9=u; x10=w-x9; bot y9=bot y7; top y10=top y3; draw z9--z10; labels(range 0 thru 10); endchar; cmchar "Negated existential quantifier"; beginchar(oct"100",10u#,asc_height#,0); italcorr asc_height#*slant; adjust_fit(0,0); pickup rule.nib; lft x1=hround u-eps; x2=x3=x5=w-x1; x4=x6-.25u=x1; top y1=h; bot y4=0; y2=y1; y5=y6=.5[y1,y3]; y3=y4; draw z1--z2--z3--z4; % upper bar, stem, lower bar draw z5--z6; % middle bar char_center(100); x101=w-3u; y101=y1+3u; char_negate(100,101,102); labels(1,2,3,4,5,6); endchar; charlist oct"133": oct"134"; charlist oct"135": oct"136"; cmchar"Wider than widest circumflex (hat) accent"; beginchar(oct"133",34u#,1.1body_height#,0); adjust_fit(0,0); pickup crisp.nib; pos2(.7[vair,curve],90); top y2r=h+o; x2=.5w; x1=w-x3=good.x-eps; y1=y3=.45[x_height,y2]; pos1(1.2min(hair,rule_thickness),angle(z2-z1)+90); pos3(1.2min(hair,rule_thickness),angle(z3-z2)+90); filldraw stroke z1e--z2e--z3e; penlabels(1,2,3); %big_hat; endchar; cmchar"Very Widest circumflex (hat) accent"; beginchar(oct"134",42u#,1.1body_height#,0); adjust_fit(0,0); pickup crisp.nib; pos2(.7[vair,curve],90); top y2r=h+o; x2=.5w; x1=w-x3=good.x-eps; y1=y3=.45[x_height,y2]; pos1(1.2min(hair,rule_thickness),angle(z2-z1)+90); pos3(1.2min(hair,rule_thickness),angle(z3-z2)+90); filldraw stroke z1e--z2e--z3e; penlabels(1,2,3); %big_hat; endchar; cmchar"Even wider tilde (squiggle) accent"; beginchar(oct"135",34u#,1.1body_height#,0); %big_tilde; adjust_fit(0,0); pickup crisp.nib; numeric theta; theta=angle(1/6(w-vair),1/4(h-x_height)); numeric mid_width; mid_width=.4[vair,stem]; pos1(1.5min(vair,rule_thickness),theta+80); pos2(2min(vair,rule_thickness),theta+80); pos3(2min(vair,rule_thickness),theta+80); pos4(1.5min(vair,rule_thickness),theta+80); z2-z1=z4-z3 = (mid_width-crisp)*dir theta; lft x1r=w-rt x4l=0; top y4r=h; bot y1l=vround(bot y1l+min(.6[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; penlabels(1,2,3,4); endchar; cmchar"Very widest tilde (squiggle) accent"; beginchar(oct"136",42u#,1.2body_height#,0); %big_tilde; adjust_fit(0,0); pickup crisp.nib; numeric theta; theta=angle(1/6(w-vair),1/4(h-x_height)); numeric mid_width; mid_width=.4[vair,stem]; pos1(1.5min(vair,rule_thickness),theta+80); pos2(2min(vair,rule_thickness),theta+80); pos3(2min(vair,rule_thickness),theta+80); pos4(1.5min(vair,rule_thickness),theta+80); z2-z1=z4-z3 = (mid_width-crisp)*dir theta; lft x1r=w-rt x4l=0; top y4r=h; bot y1l=vround(bot y1l+min(.6[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; penlabels(1,2,3,4); endchar; cmchar "Reversed turned F"; beginchar(oct"140",10u#,asc_height#,0); italcorr asc_height#*slant; adjust_fit(0,0); pickup rule.nib; lft x4=hround u-eps; x2=x3=x5=w-x4; x6=x4+.27w; top y2=h; bot y4=0; y5=y6=.5[y2,y3]; y3=y4; draw z2--z3--z4; % upper bar, stem, lower bar draw z5--z6; % middle bar labels(2,3,4,5,6); endchar; cmchar "The Reversed inverted letter G"; beginchar(oct"141",12u#,cap_height#,0); italcorr cap_height#*slant-.5u#; adjust_fit(0,0); pickup rule.nib; rt x1=hround(w-1.35u); x2=x4=.5w+u; lft x3=hround max(u,2u-.5cap_curve); rt x5=hround(w-1.2u); top y1=vround .93h+o; top y2=h+o; y3=.5h; bot y4=-o; bot y5=vround .07h-o; draw z1...{left}z2...{down}z3{down}...{right}z4...{up}z5; z7=z5; x0=x7; top y0=1+vround .35[bar_height,x_height]; draw z0--z7; % stem z0=z9; y8=y9; lft x8=hround x4; draw z8--z9; % bar math_fit(-.3cap_height#*slant-.5u#,.5ic#); picture rvchar; rvchar=currentpicture reflectedabout((.5w,0),(.5w,h)); currentpicture:= rvchar; penlabels(0,1,1',2,3,4,5,6,7,8,9); endchar; cmchar "Upsidedown, uppercase Greek Omega"; beginchar(oct"146",13u#,cap_height#,0); italcorr .75cap_height#*slant-.5u#; adjust_fit(0,0); pickup tiny.nib; pos1(vair,90); pos2(cap_curve,180); pos3(vair,180); pos4(cap_curve,0); pos5(vair,0); x1=.5w; top y1r=h+o; lft x2r=hround u; y2=y4=2/3h; x4=w-x2; rt x3l=hround(1/3(w+.5u)+.5hair); bot y3=bot y5=0; x5=w-x3; filldraw stroke z3e{up}...{up}z2e & pulled_super_arc.e(2,1)(.5superpull) & pulled_super_arc.e(1,4)(.5superpull) & z4e{down}...{down}z5e; % bowl numeric arm_thickness; path p; p=z3{up}...{up}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,-180); bot y6r=0; x6=x3; lft x7r=hround .8u; y7=good.y(y6l+.5beak)+eps; (x,y)=p intersectionpoint((0,y6l)--(w,y6l)); x6l:=x; arm(6,7,a,.5beak_darkness,-1.2beak_jut); % left arm and beak pos8(arm_thickness,-90); pos9(fudged.hair,0); y8=y6; y9=y7; x8+x6=x9+x7=w; x8l:=w-x6l; arm(8,9,b,.5beak_darkness,1.2beak_jut); % right arm and beak %math_fit(0,.5ic#); picture v; v:=currentpicture; numeric t; t=h-d; v:=v reflectedabout((0,0),(w,0)); currentpicture:=v shifted(0,aspect_ratio*cap_height); penlabels(1,2,3,4,5,6,7,8,9); endchar; cmchar "The letter Edh (Old English rune, like thorn)"; % adapted from cm partial differential sign, vol E, p 233. beginchar(oct"147",10u#,asc_height#,0); italcorr .7asc_height#*slant+.5curve#-1.5u#; adjust_fit(0,0); numeric top_thickness,bot_thickness,side_thickness,pull; top_thickness=max(fine.breadth,vround(slab-2vair_corr)); bot_thickness=max(fine.breadth,vround(slab-vair_corr)); side_thickness=max(fine.breadth,hround 1/3[curve,cap_curve]); pull=min(.25,1.5superpull); pickup fine.nib; pos2(top_thickness,90); pos3(side_thickness,0); pos4(bot_thickness,-90); pos5(side_thickness,-180); pos6(vair,-270); lft x5r=w-rt x3r=hround max(.75u,1.5u-.5side_thickness); x4=x6+.1u=x2+u=.5w; top y2r=h+o; y3=.5[y2,y4]; bot y4r=-o; y5=.5[y4,y6]; top y6=vround 5/8h+o; path p; p=pulled_super_arc.l(3,4)(pull); numeric t; t=xpart(p intersectiontimes((x3r,y5)--(x4,y5))); pos7(thin_join,0); z7l=point t of p; (x,y6r)=whatever[z7l,z6l]; x6r:=max(x,.5[x5r,x6]); x2:=x5; x2l:=x2r:=x2; filldraw stroke pulled_super_arc.e(2,3)(pull) & {{interim superness:=more_super; pulled_super_arc.e(3,4)(pull)}} & {{less_tense; pulled_super_arc.e(4,5)(pull) & pulled_super_arc.e(5,6)(pull)}} & z6e{right}...{direction t of p}z7e; % arc and bowl %pos1(hair,180); pos0(flare,180); % commenting out the arc and bulb %lft x0r=min(lft x2-eps,hround 1.2u); %y0=vround min(.85h-.5flare,.8h+.5flare)+o; %{{less_tense; bulb(2,1,0)}}; % arc and bulb %math_fit(-.3x_height#*slant+.5curve#-u#,ic#-u#); pickup pencircle xscaled 1.4rule_thickness yscaled .5rule_thickness; x10=x11=x5; x12=x13=w-x10; y10=y13; y10-y11=y12-y13=cap_stem; .5[y11,y10]=.5[y6,y2]; draw z10--z11--z12--z13; % cross piece penlabels(2,3,4,5,6,7,10,11,12,,13); endchar; cmchar "Equal or similar symbol"; compute_spread(.45x_height#,.55x_height#); beginchar(oct"150",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=-d; top y2=top y4=y1+spread; draw z1{up}...z2{right}..{right}z3...{up}z4; % stroke pickup rule.nib; lft x5=hround u-eps; x6=w-x5; top y5=top y6=h; draw z5--z6; labels(1,2,3,4,5,6); endchar; %% parameters for Hebrew letters Beth, Gimel, Dalet numeric theta; theta=45; cmchar "Hebrew letter Beth"; beginchar(oct"151", 12u#, asc_height#, 0); %currenttransform:=identity rotated -45 shifted (.75h, 0); adjust_fit(0,0); pickup rule.nib; top y0=1.1h; lft x0=u; pos1(cap_curve,90); x1=2.5u; y1r=h; pos2(cap_curve,90); x2=w-x1; y2r=y1r; rt x3=w-u; y2l-y3=y0-y1r; x4=x3; % now for the base. pos12(cap_curve/cosd theta, theta); pos11(cap_curve/cosd theta, theta); y11r=y12r=y4; y11l=0; x12=u; x11=w-x12; filldraw z0{down}..tension.8..z1l{right}..{right}z2l..{down}z3& z3{up}..tension.8..z2r{left}..{left}z1r..z0..cycle; % top pickup rule.nib; draw z3..z4; % down stroke at right of letter filldraw stroke z11e{left}..{left}z12e; penlabels(0,1,2,3,4,11,12); endchar; cmchar "Hebrew letter Gimel"; beginchar(oct"152", 8u#, asc_height#, 0); %currenttransform:=identity rotated -45 shifted (.75h, 0); adjust_fit(0,0); pickup rule.nib; top y0=1.1h; lft x0=u; pos1(cap_curve,90); x1=2.5u; y1r=h; pos2(cap_curve,90); x2=w-x1+.5u; y2r=y1r; filldraw z0{down}..tension.8..z1l{right}..{right}z2l..tension.8..{left}z2r ..{left}z1r..z0..cycle; % top slab z3=z2l;x4=x3+.2stem; y4=-o; x5=x4+.3stem; y5=y3c; x3a=x3b=x3c=x3; y3a=.8h; y3b=.5h; y3c=cap_curve; y5:=.5y5; % reset y5 path p, q; p=(z3---z3c..z4); q=(z4{1,1}..z5..{-.005,1}z3); % vertical filldraw p&q&cycle; % now for the base. pos12(cap_curve/cosd theta, theta); pos11(cap_curve/cosd theta, theta); pos13(cap_curve/cosd theta, theta); y13=y12; x13=w; % z13 is a dummy point for getting intersection y11r=y12r; y11l=0; x12=u; z10=p intersectionpoint (z12r--z13r); z11r=z10; filldraw stroke z11e{left}..{left}z12e; penlabels(0,1,2,3,3c,4,5,11,12); endchar; cmchar "Hebrew letter Daleth"; beginchar(oct"153", 12u#, asc_height#, 0); %currenttransform:=identity rotated -45 shifted (.75h, 0); adjust_fit(0,0); pickup rule.nib; top y0=1.1h; lft x0=u; pos1(cap_curve,90); x1=2.5u; y1r=h; pos2(cap_curve,90); x2=w-x1+.5u; y2r=y1r; filldraw z0{down}..tension.8..z1l{right}..{right}z2l..tension.8..{left}z2r ..{left}z1r..z0..cycle; % top slab z3=z2l;x4=x3+.2stem; y4=-o; x5=x4+.3stem; y5=y3c; x3a=x3b=x3c=x3; y3a=.8h; y3b=.5h; y3c=cap_curve; y5:=.5y5; % reset y5 path p, q; p=(z3---z3c..z4); q=(z4{1,1}..z5..{-.005,1}z3); % vertical filldraw p&q&cycle; penlabels(0,1,2,3,3c,4,5); endchar; cmchar "Dotted less than sign"; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"154",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 y4=y2; x4=.75[x2, x1]; z5=z4; pos4(dot_size,0); pos5(dot_size,90); dot(4,5); labels(1,2,3,4,5); endchar; cmchar "Dotted greater than sign"; compute_spread(5/4x_height#,3/2x_height#); beginchar(oct"155",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 y4=y2; x4=.75[x2, x1]; z5=z4; pos4(dot_size,0); pos5(dot_size,90); dot(4,5); labels(1,2,3,4,5); endchar; cmchar "Times operator with left vertical"; beginarithchar(oct"156"); 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 draw z1--z4; labels(1,2,3,4); endchar; cmchar "Times operator with right vertical"; beginarithchar(oct"157"); 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 draw z2--z3; labels(1,2,3,4); endchar; cmchar "Cute vertical bar"; beginchar(oct"160",4u#,6u#+math_axis#,6u#-math_axis#); italcorr math_axis#*slant - .5u#; adjust_fit(0,0); pickup rule.nib; x1=x2=hround(w/2); top y1=x_height; bot y2=-o; draw z1--z2; labels(1,2); endchar; cmchar "Two cute vertical bars"; beginchar(oct"161",7u#,6u#+math_axis#,6u#-math_axis#); italcorr math_axis#*slant - .5u#; adjust_fit(0,0); pickup rule.nib; lft x1=u; x2=x1; top y1=x_height; bot y2=-o; x3=w-x1; x4=x3; y3=y1; y4=y2; draw z1--z2; draw z3--z4; labels(1,2,3,4); endchar; cmchar "Integer division (reverse quotient) symbol"; beginarithchar(oct"162"); pickup rule.nib; x1=2u; top y1=x_height;% x2=x3=w-x1; x4=x1; bot y2=-o; draw z1--z2; % diagonal labels(1,2,3,4); endchar; cmchar "Thick similarity sign";% taken from symbol.mf compute_spread(.45x_height#,.55x_height#); beginchar(oct"163",14u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup pencircle xscaled .8rule_thickness yscaled 1.87rule_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; cmchar "Approximate equality sign"; % taken fron symbol.mf compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of $=$' compute_spread(.54x_height#,.66x_height#); beginchar(oct"164",14u#,v_center(spread#'+spread#+rule_thickness#)); adjust_fit(0,0); pickup pencircle xscaled .8rule_thickness yscaled 1.87rule_thickness; if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1; y1=y3; top y2=top y4=h; top y2-bot y1=spread'; draw z1{up}...z2{right}..{right}z3...{up}z4; % upper stroke z1-z5=z2-z6=z3-z7=z4-z8=(0,spread); draw z5{up}...z6{right}..{right}z7...{up}z8; % lower stroke labels(1,2,3,4,5,6,7,8); endchar; cmchar "Approximate equality plus lower bar sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of $=$' compute_spread(.54x_height#,.66x_height#); beginchar(oct"165",14u#,v_center(2spread#'+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; y1=y3; top y2=top y4=h; top y2-bot y1=spread'; draw z1{up}...z2{right}..{right}z3...{up}z4; % upper stroke z1-z5=z2-z6=z3-z7=z4-z8=(0,spread); draw z5{up}...z6{right}..{right}z7...{up}z8; % lower stroke y9=y10; x9=x1; x10=x8; y5-y9=spread'; pickup rule.nib; draw z9--z10; labels(1,2,3,4,5,6,7,8,9,10); endchar; cmchar "Follows with approximate equality sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of $=$' compute_spread(.54 x_height#,.66 x_height#); spread#'':=spread#; spread'':=spread; % the spread of $=$' compute_spread(1.111 x_height#,1.333 x_height#); beginchar(oct"166",14u#,v_center(2spread#''+spread#+2rule_thickness#)); adjust_fit(0,0); % now for follow sign, using z9 (top), z10 (vertex), & z11 (bot) pickup rule.nib; lft x9 = hround 1.5u-eps; x10=w-x9; x11=x9; y9-y11=spread; top y9=h; y10=.5[y11, y9]; draw z9{u,-spread}...{right}z10; draw z11{u,spread}...{right}z10; 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; top y1=top y3=bot y11-spread''; top y2=top y4=bot y1+spread'; z1-z5=z2-z6=z3-z7=z4-z8=(0,spread''); draw z1{up}...z2{right}..{right}z3...{up}z4; % upper stroke draw z5{up}...z6{right}..{right}z7...{up}z8; % lower stroke labels(1,2,3,4,5,6,7,8,9,10,11); endchar; cmchar "Precedes with approximate equality sign"; compute_spread(.45x_height#,.55x_height#); spread#':=spread#; spread':=spread; % the spread of $=$' compute_spread(.54x_height#,.66x_height#); spread#'':=spread#; spread'':=spread; % the spread of $=$' compute_spread(1.111 x_height#,1.333 x_height#); beginchar(oct"167",14u#,v_center(spread#+2spread#''+2rule_thickness#)); adjust_fit(0,0); % now for precedes sign, using z9 (top), z10 (vertex), & z11 (bot) pickup rule.nib; x9=x11=w-x10; lft x10=hround 1.5u-eps; y9-y11=spread; top y9=h; y10=.5[y11, y9]; draw z9{-u,-spread}...{left}z10; draw z11{-u,spread}...{left}z10; 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; top y3=top y1=bot y11-spread''; top y2=top y4=bot y1+spread'; z1-z5=z2-z6=z3-z7=z4-z8=(0,spread''); draw z1{up}...z2{right}..{right}z3...{up}z4; % upper stroke draw z5{up}...z6{right}..{right}z7...{up}z8; % lower stroke labels(1,2,3,4,5,6,7,8,9,10,11); endchar; cmchar "Arch with left downward arrowhead"; beginchar(oct"170",18u#,x_height#,0); adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(min(bar,rule_thickness),90); pos4(min(bar,rule_thickness),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(min(bar,rule_thickness),angle(z4-z0)); z5l=z0; pos6(min(bar,rule_thickness),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; for i=0 upto 6: x[i]:=x[i]-5.5u; x[i]l:=x[i]l-5.5u; x[i]r:=x[i]r-5.5u; endfor x9:=x9-5.5u; filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r) --z2r---z2l--subpath (t,0) of\\(z3r{z9-z3}..z5r) --z3l{z9-z3}..z0 & cycle; % arrowhead % arch represented by z2, z11 (top) z12 rt x12=w-1u; bot y12=y0; top y11=h+o; x11=.5[x2, x12]; pickup rule.nib; draw z2{up}...{right}z11...{down}z12; penlabels(0,1,2,3,4,5,6,9,11,12); endchar; cmchar "Arch with right downward arrowhead"; beginchar(oct"171",18u#,x_height#,0); adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(min(bar,rule_thickness),90); pos4(min(bar,rule_thickness),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(min(bar,rule_thickness),angle(z4-z0)); z5l=z0; pos6(min(bar,rule_thickness),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; for i=0 upto 6: x[i]:=x[i]+5.5u; x[i]l:=x[i]l+5.5u; x[i]r:=x[i]r+5.5u; endfor x9:=x9+5.5u; filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r) --z2r---z2l--subpath (t,0) of\\(z3r{z9-z3}..z5r) --z3l{z9-z3}..z0 & cycle; % arrowhead % arch represented by z2, z11 (top) z12 (right) lft x12=u; bot y12=y0; top y11=h+o; x11=.5[x2, x12]; pickup rule.nib; draw z2{up}...{left}z11...{down}z12; penlabels(0,1,2,3,4,5,6,9,11,12); endchar; cmchar "Stylized F"; beginarithchar(oct"172"); pickup pencircle xscaled 2.5rule_thickness yscaled .5rule_thickness; bot y1=-d; top y2=top y3=h+o; y4=y5=.5[y1, y2]; lft x1=u; x3=w-x1; numeric t; t=4; % t=slope of thick stem y2-y1=t*(x2-x1); z4=whatever[z1, z2]; x5-x4=.6(x3-x2); draw z1--z2--z3; draw z4--z5; penlabels(1,2,3,4,5); endchar; transform tt; tt:=currenttransform; currenttransform:=tt slanted 1/4; cmchar "Lowercase variation of Greek kappa"; % will use same dimensions as standard Greek lowercase kappa % see vol E, p 155. beginchar(oct"173", 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'(min(hair,rule_thickness),0); y4'=y3; if hefty: x4l = x4'l; else: x4'=1/4[x1,x2]; fi 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'(min(hair,rule_thickness),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',7'); endchar; cmchar "H-bar symbol, slanted bar"; beginchar(oct"175",if serifs: 9u# else: 10u# fi,asc_height#,0); if serifs: italcorr 1/3x_height#*slant+.5hair#+.5u#; adjust_fit(0,0); pickup tiny.nib; pos1(stem,0); pos2(stem,0); x1=x2; lft x1l=hround(1.5u-.5stem); top y1=h; y2-.5stem=-oo; filldraw circ_stroke z2e--z1e; % left stem sloped_serif.l(1,2,a,1/3,jut,serif_drop); % serif pickup fine.nib; x4+.5stem=hround(w-2.5u+.5stem); x5=x4-.25u; ital_arch(2,3,4); % arch x7=w; hook_out(5,6,7)(skewed); % closing hook filldraw stroke z4e{down}..{-u,-x_height}z5e; % right stem else: 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 fi pickup light_rule.nib; if serifs: x8=x.a2; else: x8 = x1l; fi y8=.7h; x9=x4l; y9=7/8h; draw z8--z9; math_fit(0,ic#); penlabels(1,2,3,4,5,6,7,8,9); endchar; cmchar "H-bar symbol, vertical bar"; beginchar(oct"176",if serifs: 9u# else: 10u# fi,asc_height#,0); if serifs: italcorr 1/3x_height#*slant+.5hair#+.5u#; adjust_fit(0,0); pickup tiny.nib; pos1(stem,0); pos2(stem,0); x1=x2; lft x1l=hround(1.5u-.5stem); top y1=h; y2-.5stem=-oo; filldraw circ_stroke z2e--z1e; % left stem sloped_serif.l(1,2,a,1/3,jut,serif_drop); % serif pickup fine.nib; x4+.5stem=hround(w-2.5u+.5stem); x5=x4-.25u; ital_arch(2,3,4); % arch x7=w; hook_out(5,6,7)(skewed); % closing hook filldraw stroke z4e{down}..{-u,-x_height}z5e; % right stem else: 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 fi pickup light_rule.nib; if serifs: x8=x.a2; else: x8 = x1l; fi y8=y9=.81h; rt x9=x4l; draw z8--z9; math_fit(0,ic#); penlabels(1,2,3,4,5,6,7,8,9); endchar; cmchar "Reversed, reflected, lowercase Greek epsilon"; beginchar(oct"177",8u#,x_height#,0); italcorr x_height#*slant+.5hair#-2u#; adjust_fit(0,0); pickup fine.nib; if serifs: pos0(bar,90); pos4(hair,300); x0=x1+u; x6=x0; x3=.5[x0,x1]; top y0r=top y1r=h; else: pos0(bar,75); pos4(if hefty: vair else: hair fi,310); x6=x1+u; x3=.5[x6,x1]; x0=x6+bar/2; top y1r=h; y0 = 0.3[y1,y1l]; fi pos1(bar,90); pos2(curve,180); pos3(vair,270); pos6(bar,90); pos7(bar,90); x1=.5w+.5u; lft x2r=hround(1.5u-.5curve); x4r=good.x(w-u); x5=w+.5u; z7=z2l; 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 sans_circ_stroke z0e..pulled_arc.e(1,2) & pulled_arc.e(2,3) ...z4e{direction t of p}; % arc filldraw sans_circ_stroke z6e--z7e; % bar math_fit(-.3x_height#*slant+.5curve#-u#,ic#); % Identical to \epsilon up to here picture v; v:=currentpicture; v:=v reflectedabout((0,h*aspect_ratio/2),(w,h*aspect_ratio/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; currenttransform:=tt; %restore currenttrnasform