%% filename: bsymbols.mf
%% version: 2.2
%% date: 1995/01/04
%%
%% American Mathematical Society
%% Technical Support
%% Publications Technical Group
%% 201 Charles Street
%% Providence, RI 02904
%% USA
%% tel: (401) 455-4080
%%      (800) 321-4267 (USA and Canada only)
%% fax: (401) 331-3842
%% email: tech-support@ams.org
%%
%% Copyright 1995, 2009 American Mathematical Society.
%%
%% This Font Software is licensed under the SIL Open Font License,
%% Version 1.1.  This license is in the accompanying file OFL.txt, and
%% is also available with a FAQ at: http://scripts.sil.org/OFL.
%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This file defines the symbols of AMS special MSB font. 

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(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
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(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
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(bar,0); pos4(bar,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(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;  % left arrowhead and stem
pos11(rule_thickness,90); pos12(rule_thickness,90); pos13(bar,0); pos14(bar,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(bar,angle(z14-z10)); z15l=z10; pos16(bar,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.2hair,angle(z2-z1)+90); pos3(1.2hair,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.2hair,angle(z2-z1)+90); pos3(1.2hair,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.5vair,theta+80); pos2(2vair,theta+80);
pos3(2vair,theta+80); pos4(1.5vair,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.5vair,theta+80); pos2(2vair,theta+80);
pos3(2vair,theta+80); pos4(1.5vair,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(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;
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(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;
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 thck 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'(hair,0); y4'=y3; x4'=1/4[x1,x2];
pos5(hair,90); z5=z1; 
filldraw super_arc.r(3,4)&super_arc.r(4,4')...{z1-z2}z5&z5{z2-z1}
...super_arc.l(4',4)&super_arc.l(4,3)---cycle; % left arm
pos8(hair,-90); pos6(hair,0);                     
z8=z2; pos7(stem, -90); bot y7r-.15stem=-oo; x6-x7=x4-x3;
x6=w-x3; 
pos7'(hair,180); y7'=y6; x7'=w-x4';
y6=h-y3;
filldraw super_arc.r(6,7)&super_arc.r(7,7')...{z2-z1}z8&z8{z1-z2}
...super_arc.l(7',7)&super_arc.l(7,6)---cycle; % right arm
%filldraw z8{z1-z2}..z7l...{up}z6r---z6l{-u,-2u}...z7r..{z2-z1}z8---cycle; %right arm
penlabels(range 1 thru 8,4'); endchar;

cmchar "H-bar symbol, slanted bar";
beginchar(oct"175",9u#,asc_height#,0);
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
pickup light_rule.nib;
x8=x.a2; 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",9u#,asc_height#,0);
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
pickup light_rule.nib;
x8=x.a2; 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;
pos0(bar,90); pos1(bar,90); pos2(curve,180);
pos3(vair,270); pos4(hair,300); pos6(bar,90); pos7(bar,90);
x1=.5w+.5u; x0=x1+u; lft x2r=hround(1.5u-.5curve); x3=.5[x0,x1];
x4r=good.x(w-u); x5=w+.5u; x6=x0; z7=z2l;
top y0r=top y1r=h; y2=y5=y6=bar_height; bot y3r=-oo;
path p; p=z3r{right}...{up}z5;
numeric t; t=ypart(((x4r,y3r)--(x4r,y5))intersectiontimes p);
y4r=ypart point t of p;
filldraw circ_stroke z0e..pulled_arc.e(1,2) & pulled_arc.e(2,3)
 ...z4e{direction t of p};  % arc
filldraw circ_stroke z6e--z7e;  % bar
math_fit(-.3x_height#*slant+.5curve#-u#,ic#);
picture v;
v:=currentpicture; 
v:=v reflectedabout((0,h*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

