home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / unixtex-6.1b-bin4.lha / lib / texmf / fonts / ams / symbols / src / bsymbols.mf < prev    next >
Text File  |  1996-10-12  |  66KB  |  1,641 lines

  1. %% @metafontfile{
  2. %%     filename="bsymbols.mf",
  3. %%     version="2.1",
  4. %%     date="30-MAY-1991",
  5. %%     filetype="Metafont: driver",
  6. %%     copyright="Copyright (C) American Mathematical Society,
  7. %%            all rights reserved.  Copying of this file is
  8. %%            authorized only if either:
  9. %%            (1) you make absolutely no changes to your copy
  10. %%                including name; OR
  11. %%            (2) if you do make changes, you first rename it to some
  12. %%                other name.",
  13. %%     author="American Mathematical Society",
  14. %%     address="American Mathematical Society,
  15. %%            Technical Support Department,
  16. %%            P. O. Box 6248,
  17. %%            Providence, RI 02940,
  18. %%            USA",
  19. %%     telephone="401-455-4080 or (in the USA) 800-321-4AMS",
  20. %%     email="Internet: Tech-Support@Math.AMS.org",
  21. %%     codetable="ISO/ASCII",
  22. %%     checksumtype="line count",
  23. %%     checksum="1641",
  24. %%     keywords="amsfonts, tex, metafont , AMSSymbols ",
  25. %%     abstract="This is the driver file for use with 
  26. %%            MSBM, the second extra symbol font in AMSFonts 2.1."
  27. %%     }
  28. %
  29. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  30. % This file defines the symbols of AMS special MSB font. 
  31.  
  32. def char_negate(suffix c,t,b) = %c is center point; t is top point; b is bottom
  33. pickup rule.nib;
  34. w-x.t=x.b; y.t-y.c=y.c-y.b; draw z.t--z.b;
  35. penlabels(t,c,b); enddef;
  36. def char_center(suffix c) = % find center of type character
  37. x.c=w/2; y.c=.5[-d,h]; enddef;
  38.  
  39. cmchar "Less than or not (double) equals sign";  
  40. compute_spread(.45x_height#,.55x_height#); 
  41. spread#':=spread#; spread':=spread; 
  42. compute_spread(5/4x_height#,3/2x_height#);  
  43. beginchar(oct"000",14u#,v_center(2spread#'+spread#+2rule_thickness#)); 
  44. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  45. lft x2=hround 1.5u-eps; x1=x3=w-x2; y1-y3=spread; 
  46. y2=.5[y1,y3]; top y1=h; 
  47. x2=x9=x7; x1=x8=x6; y7=y6; y8=y9; 
  48. y7-y9=spread'; top y3-bot y6=spread'; 
  49. draw z1--z2--z3;  % diagonals  
  50. draw z6--z7; draw z8--z9; % equal sign 
  51. z.c=.5[z7,z8]; x.t=x.c; y.t=2/3[y6,y3];
  52. char_negate(c,t,b);
  53. penlabels(1,2,3,6,7,8,9); endchar; 
  54.  
  55. cmchar "Greater than or not (double) equals sign"; 
  56. compute_spread(.45x_height#,.55x_height#); 
  57. spread#':=spread#; spread':=spread; 
  58. compute_spread(5/4x_height#,3/2x_height#); 
  59. beginchar(oct"001",14u#,v_center(2spread#'+spread#+2rule_thickness#)); 
  60. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  61. rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread;  
  62. x2=x7=x9; x1=x6=x8; y6=y7; y8=y9; 
  63. y2=.5[y1,y3]; top y3-bot y6=spread'; top y1=h; 
  64. y7-y9=spread'; 
  65. draw z1--z2--z3;  % diagonals 
  66. draw z6--z7; draw z8--z9; 
  67. z.c=.5[z7,z8]; x.t=x.c; y.t=2/3[y6,y3];
  68. char_negate(c,t,b);
  69. penlabels(1,2,3,6,7,8,9); endchar;  
  70.  
  71. cmchar "Not less than or equal to sign";
  72. compute_spread(.45x_height#,.55x_height#);
  73. spread#':=spread#; spread':=spread; % the spread of `$=$'
  74. compute_spread(5/4x_height#,3/2x_height#);
  75. beginchar(oct"002",14u#,v_center(spread#'+spread#+rule_thickness#+6u#));
  76. italcorr h#*slant-u#;
  77. adjust_fit(0,0); pickup rule.nib;
  78. lft x2=hround 1.5u-eps; x1=x3=w-x2;
  79. y1-y3=spread; y2=.5[y1,y3]; top y1=h-3u;
  80. draw z1--z2--z3;  % diagonals
  81. x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9;  % bar
  82. char_center(100); x101=w-3u; y101=y1+3u;
  83. char_negate(100,101,102);
  84. labels(1,2,3,8,9,99,100); endchar;
  85.  
  86. cmchar "Not greater than or equal to sign";
  87. compute_spread(.45x_height#,.55x_height#);
  88. spread#':=spread#; spread':=spread; % the spread of `$=$'
  89. compute_spread(5/4x_height#,3/2x_height#);
  90. beginchar(oct"003",14u#,v_center(spread#'+spread#+rule_thickness#+6u#));
  91. italcorr h#*slant-u#;
  92. adjust_fit(0,0); pickup rule.nib;
  93. lft x1=hround 1.5u-eps; x2=w-x1; x3=x1;
  94. y1-y3=spread; y2=.5[y1,y3]; top y1=h-3u;
  95. draw z1--z2--z3;  % diagonals
  96. x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9;  % bar
  97. char_center(100); x101=w-3u; y101=y1+3u;
  98. char_negate(100,101,102);
  99. labels(1,2,3,8,9,99,100); endchar; 
  100.  
  101. cmchar "Not less than sign";
  102. compute_spread(5/4x_height#,3/2x_height#);
  103. beginchar(oct"004",14u#,v_center(spread#+rule_thickness#+6u#));
  104. italcorr h#*slant-u#;
  105. adjust_fit(0,0); pickup rule.nib;
  106. lft x2=hround 1.5u-eps; x1=x3=w-x2;
  107. y1-y3=spread; y2=.5[y1,y3]=math_axis;
  108. draw z1--z2--z3;  % diagonals
  109. char_center(100); x101=w-3u; y101=y1+3u;
  110. char_negate(100,101,102);
  111. labels(1,2,3); endchar; 
  112.  
  113. cmchar "Not greater than sign";
  114. compute_spread(5/4x_height#,3/2x_height#);
  115. beginchar(oct"005",14u#,v_center(spread#+rule_thickness#+6u#));
  116. italcorr math_axis#*slant-u#;
  117. adjust_fit(0,0); pickup rule.nib;
  118. rt x2=hround(w-1.5u)+eps; x1=x3=w-x2;
  119. y1-y3=spread; y2=.5[y1,y3]=math_axis;
  120. draw z1--z2--z3;  % diagonals
  121. char_center(100); x101=w-3u; y101=y1+3u;
  122. char_negate(100,101,102);
  123. labels(1,2,3,99,100); endchar;
  124.  
  125. cmchar "Not precedes sign";
  126. compute_spread(5/4x_height#,3/2x_height#);
  127. beginchar(oct"006",14u#,v_center(spread#+rule_thickness#+6u#));
  128. adjust_fit(0,0); pickup rule.nib; autorounded;
  129. lft x2=hround 1.5u-epsilon; x1=x3=w-x2;
  130. y1-y3=spread; y2=.5[y1,y3]; top y1=h-3u;
  131. draw z1{-u,-spread}...{left}z2;  % upper diagonal
  132. draw z3{-u,spread}...{left}z2;  % lower diagonal
  133. char_center(100); x101=w-3u; y101=y1+3u;
  134. char_negate(100,101,102);
  135. labels(1,2,3,99,100); endchar;
  136.  
  137. cmchar "Not follows sign";
  138. compute_spread(5/4x_height#,3/2x_height#);
  139. beginchar(oct"007",14u#,v_center(spread#+rule_thickness#+6u#));
  140. adjust_fit(0,0); pickup rule.nib; autorounded;
  141. lft x1=hround 1.5u-epsilon; x2=w-x1; x3=x1;
  142. y1-y3=spread; y2=.5[y1,y3]; top y1=h-3u;
  143. draw z1{u,-spread}...{right}z2;  % upper diagonal
  144. draw z3{u,spread}...{right}z2;  % lower diagonal
  145. char_center(100); x101=w-3u; y101=y1+3u;
  146. char_negate(100,101,102);
  147. labels(1,2,3,99,100); endchar;
  148.  
  149. cmchar "Less than or slanted not (double) equals sign";  
  150. compute_spread(.45x_height#,.55x_height#); 
  151. spread#':=spread#; spread':=spread; 
  152. compute_spread(5/4x_height#,3/2x_height#);  
  153. beginchar(oct"010",14u#,v_center(2spread#'+spread#+2rule_thickness#)); 
  154. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  155. lft x2=hround 1.5u-eps; x1=x3=w-x2; y1-y3=spread; 
  156. y2=.5[y1,y3]; top y1=h; 
  157. x2=x9=x7; x1=x8=x6; y7=y6; y8=y9; 
  158. y7-y9=spread'; top y3-bot y6=spread'; 
  159. draw z1--z2--z3;  % diagonals  
  160. draw z6--z7; draw z8--z9; % equal sign 
  161. z.c=.5[z7,z8]; x.t=2/3[x.c, x3]; y.t=2/3[y6,y3];
  162. char_negate(c,t,b);
  163. penlabels(1,2,3,6,7,8,9); endchar; 
  164.  
  165. cmchar "Greater than or slanted not  (double) equals sign"; 
  166. compute_spread(.45x_height#,.55x_height#); 
  167. spread#':=spread#; spread':=spread; 
  168. compute_spread(5/4x_height#,3/2x_height#); 
  169. beginchar(oct"011",14u#,v_center(2spread#'+spread#+2rule_thickness#)); 
  170. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  171. rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread;  
  172. x2=x7=x9; x1=x6=x8; y6=y7; y8=y9; 
  173. y2=.5[y1,y3]; top y3-bot y6=spread'; top y1=h; 
  174. y7-y9=spread'; 
  175. draw z1--z2--z3;  % diagonals 
  176. draw z6--z7; draw z8--z9; 
  177. z.c=.5[z7,z8]; x.t=2/3[x.c, w-x3]; y.t=2/3[y6,y3];
  178. char_negate(c,t,b);
  179. penlabels(1,2,3,6,7,8,9); endchar;  
  180.  
  181. cmchar "Not less than or (slanted) equal sign";  
  182. compute_spread(.45x_height#,.55x_height#); 
  183. spread#':=spread#; spread':=spread; 
  184. compute_spread(5/4x_height#,3/2x_height#);  
  185. beginchar(oct"012",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); 
  186. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  187. lft x2=hround 1.5u-eps; x1=x3=w-x2; y1-y3=spread; 
  188. y2=.5[y1,y3]; y3-y8=y2-y9=spread'; top y1=h-3u; 
  189. x2=x9; x1=x8; 
  190. draw z1--z2--z3;  % diagonals  
  191. draw z8--z9; % equal sign 
  192. char_center(c); x.t=w-3u; y.t=y1+3u;
  193. char_negate(c,t,b);
  194. penlabels(1,2,3,8,9); endchar; 
  195.  
  196. cmchar "Not greater than or (slanted) equal sign"; 
  197. compute_spread(.45x_height#,.55x_height#); 
  198. spread#':=spread#; spread':=spread; 
  199. compute_spread(5/4x_height#,3/2x_height#); 
  200. beginchar(oct"13",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); 
  201. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  202. rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread;  
  203. x2=x9; x1=x8; 
  204. y2=.5[y1,y3]; y3-y8=y2-y9=spread'; top y1=h-3u; 
  205. draw z1--z2--z3;  % diagonals 
  206. draw z8--z9; 
  207. char_center(c); x.t=w-3u; y.t=y1+3u;
  208. char_negate(c,t,b);
  209. penlabels(1,2,3,8,9); endchar;  
  210.  
  211. cmchar "Less than or not equal to sign"; 
  212. compute_spread(.45x_height#,.55x_height#); 
  213. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  214. compute_spread(5/4x_height#,3/2x_height#); 
  215. beginchar(oct"014",14u#,v_center(spread#'+spread#+rule_thickness#)); 
  216. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib; lft 
  217. x2=hround 1.5u-eps; x1=x3=w-x2; y1-y3=spread; y2=.5[y1,y3]; 
  218. top y1=h; draw z1--z2--z3;  % diagonals 
  219. x8=x1; x9=x2; y8=y9; 
  220. y3-y9=spread'; draw z8--z9;  % bar
  221. x100=w/2; y100=y8; % center point
  222. y101=.5[y8,y3]; x101-x100=y101-y100;
  223. char_negate(100,101,102);
  224. labels(1,2,3,8,9); endchar; 
  225.  
  226. cmchar "Greater than or not equal to sign"; 
  227. compute_spread(.45x_height#,.55x_height#); 
  228. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  229. compute_spread(5/4x_height#,3/2x_height#); 
  230. beginchar(oct"015",14u#,v_center(spread#'+spread#+rule_thickness#)); 
  231. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib; lft 
  232. x1=hround 1.5u-eps; x2=w-x1; x3=x1; y1-y3=spread; 
  233. y2=.5[y1,y3]; top y1=h; draw z1--z2--z3;  % diagonals 
  234. x8=x1; 
  235. x9=x2; y8=y9; y3-y9=spread'; draw z8--z9;  % bar 
  236. x100=w/2; y100=y8; % center point
  237. y101=.5[y8,y3]; x101-x100=y101-y100;
  238. char_negate(100,101,102);
  239. labels(1,2,3,8,9); endchar; 
  240.  
  241. cmchar "Not precedes or equals sign"; 
  242. compute_spread(.45x_height#,.55x_height#); 
  243. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  244. compute_spread(5/4x_height#,3/2x_height#); 
  245. beginchar(oct"016",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); 
  246. adjust_fit(0,0); pickup rule.nib; autorounded; lft x2=hround 
  247. 1.5u-eps; x1=x3=w-x2; y1-y3=spread; y2=.5[y1,y3]; top y1=h-3u; 
  248. draw z1{-u,-spread}...{left}z2;  % upper diagonal 
  249. draw z3{-u,spread}...{left}z2;  % lower diagonal 
  250. x8=x1; x9=x2; 
  251. y8=y9; y3-y9=spread'; draw z8--z9;  % bar 
  252. char_center(100); x101=w-3u; y101=y1+3u;
  253. char_negate(100,101,102);
  254. labels(1,2,3,8,9,99,100); endchar; 
  255.  
  256. cmchar "Not follows or equals sign"; 
  257. compute_spread(.45x_height#,.55x_height#); 
  258. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  259. compute_spread(5/4x_height#,3/2x_height#); 
  260. beginchar(oct"017",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); 
  261. adjust_fit(0,0); pickup rule.nib; autorounded; lft x1=hround 
  262. 1.5u-eps; x2=w-x1; x3=x1; y1-y3=spread; y2=.5[y1,y3]; top 
  263. y1=h-3u; draw z1{u,-spread}...{right}z2;  % upper diagonal 
  264. draw z3{u,spread}...{right}z2;  % lower diagonal 
  265. x8=x1; x9=x2; 
  266. y8=y9; y3-y9=spread'; draw z8--z9;  % bar 
  267. char_center(100); x101=w-3u; y101=y1+3u;
  268. char_negate(100,101,102);
  269. labels(1,2,3,8,9,99,100); endchar; 
  270.  
  271. cmchar "Precedes or not approximately equals sign";  
  272. compute_spread(.45x_height#,.55x_height#);  
  273. spread#':=spread#; spread':=spread; 
  274. compute_spread(.54x_height#,.55x_height#);
  275. spread#'':=spread#; spread'':=spread;
  276. compute_spread(5/4 x_height#,3/2 x_height#); 
  277. beginchar(oct"020",14u#,v_center(spread#'+spread#+spread#'')); 
  278. adjust_fit(0,0); pickup rule.nib; autorounded; 
  279. lft x2=hround 1.5u-eps; x1=x3=w-x2;  
  280. y1-y3=spread; y2=.5[y1,y3]; top y1=h; 
  281. draw z1{-u,-spread}...{left}z2; %upper `diagonal' 
  282. draw z3{-u,spread}...{left}z2; % lower diagonal 
  283. pickup pencircle xscaled .7rule_thickness yscaled 
  284. 1.4rule_thickness; 
  285. if vair#>.8curve#: pickup rule.nib; autorounded; fi 
  286. lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; 
  287. bot y11=bot y13; top y12=top y14;  
  288. top y12-bot y11=spread'';  
  289.  y3-y14=spread'; 
  290. draw z11{up}...z12{right}..{right}z13...{up}z14; 
  291. x.c=w/2; y.c=.5[y12,y13]; x.t=3/8[x.c,x14]; y.t=2/3[y12,y3];
  292. char_negate(c,t,b);
  293. penlabels(1,2,3,11,12,13,14); endchar; 
  294.  
  295. cmchar "Follows or not equals sign";  
  296. compute_spread(.45x_height#,.55x_height#);  
  297. spread#':=spread#; spread':=spread;         % spread of similarity sign 
  298. compute_spread(.54 x_height#,.66 x_height#); 
  299. spread#'':=spread#; spread'':=spread;       % spread between symbols
  300. compute_spread(5/4 x_height#,3/2 x_height#); % spread of follows sign
  301. beginchar(oct"021",14u#,v_center(spread#'+spread#+spread#'')); 
  302. adjust_fit(0,0); pickup rule.nib; autorounded; 
  303. lft x1=hround 1.5u-eps; x1=x3; x2=w-x1; 
  304. y1-y3=spread; y2=.5[y1,y3]; top y1=h; 
  305. draw z1{u,-spread}...{right}z2; %upper `diagonal' 
  306. draw z3{u,spread}...{right}z2; % lower diagonal 
  307. pickup pencircle xscaled .7rule_thickness yscaled 
  308. 1.4rule_thickness; 
  309. if vair#>.8curve#: pickup rule.nib; autorounded; fi 
  310. lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; 
  311. bot y11=bot y13; top y12=top y14;  
  312. top y12-bot y11=spread'';  
  313. y3-y14=spread'; 
  314. draw z11{up}...z12{right}..{right}z13...{up}z14; 
  315. x.c=w/2; y.c=.5[y12,y13]; x.t=3/8[x.c,x14]; y.t=2/3[y12,y3];
  316. char_negate(c,t,b);
  317. penlabels(1,2,3,11,12,13,14); endchar; 
  318.  
  319.  
  320.  
  321. cmchar "Less than or not similar to sign";  
  322. compute_spread(.45x_height#,.55x_height#);  
  323. spread#':=spread#; spread':=spread; 
  324. compute_spread(.54x_height#,.55x_height#);
  325. spread#'':=spread#; spread'':=spread;
  326. compute_spread(5/4 x_height#,3/2 x_height#); 
  327. beginchar(oct"022",14u#,v_center(spread#'+spread#+spread#'')); 
  328. adjust_fit(0,0); pickup rule.nib; autorounded; 
  329. lft x2=hround 1.5u-eps; x1=x3=w-x2; 
  330. y1-y3=spread; y2=.5[y1,y3]; top y1=h; 
  331. draw z1--z2--z3; 
  332. pickup pencircle xscaled .7rule_thickness yscaled 
  333. 1.4rule_thickness; 
  334. if vair#>.8curve#: pickup rule.nib; autorounded; fi 
  335. lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; 
  336. bot y11=bot y13; top y12=top y14;  
  337. top y12-bot y11=spread'';  
  338.  y3-y14=spread'; 
  339. draw z11{up}...z12{right}..{right}z13...{up}z14; 
  340. x.c=w/2; y.c=.5[y12,y13]; x.t=3/8[x.c,x14]; y.t=2/3[y12,y3];
  341. char_negate(c,t,b);
  342. penlabels(1,2,3,4,11,12,13,14); endchar; 
  343.  
  344.  
  345.  
  346. cmchar "Greater than or not similar to sign";  
  347. compute_spread(.45x_height#,.55x_height#);  
  348. spread#':=spread#; spread':=spread; 
  349. compute_spread(.54x_height#,.66x_height#);
  350. spread#'':=spread#; spread'':=spread;
  351. compute_spread(5/4 x_height#,3/2 x_height#); 
  352. beginchar(oct"023",14u#,v_center(spread#'+spread#+spread#'')); 
  353. adjust_fit(0,0); pickup rule.nib; autorounded; 
  354. lft x1=hround 1.5u-eps; x1=x3; x2=w-x1; 
  355. y1-y3=spread; y2=.5[y1,y3]; top y1=h; 
  356. draw z1--z2--z3; 
  357. pickup pencircle xscaled .7rule_thickness yscaled 
  358. 1.4rule_thickness; 
  359. if vair#>.8curve#: pickup rule.nib; autorounded; fi 
  360. lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; 
  361. bot y11=bot y13; top y12=top y14;  
  362. top y12-bot y11=spread'';
  363.  y3-y14=spread'; 
  364. draw z11{up}...z12{right}..{right}z13...{up}z14; 
  365. z.c=.5[z12,z13]; x.t=3/8[x.c,x14]; y.t=2/3[y12,y3];
  366. char_negate(c,t,b);
  367. penlabels(1,2,3,4,11,12,13,14); endchar; 
  368.   
  369.  
  370. cmchar "Negated less than or (double) equals sign";  
  371. compute_spread(.45x_height#,.55x_height#); 
  372. spread#':=spread#; spread':=spread; 
  373. compute_spread(5/4x_height#,3/2x_height#);  
  374. beginchar(oct"024",14u#,v_center(2spread#'+spread#+2rule_thickness#+6u#)); 
  375. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  376. lft x2=hround 1.5u-eps; x1=x3=w-x2; y1-y3=spread; 
  377. y2=.5[y1,y3]; top y1=h-3u; 
  378. x2=x9=x7; x1=x8=x6; y7=y6; y8=y9; 
  379. y7-y9=spread'; top y3-bot y6=spread'; 
  380. draw z1--z2--z3;  % diagonals  
  381. draw z6--z7; draw z8--z9; % equal sign 
  382. char_center(c); x.t=w-3u; y.t=y1+3u;
  383. char_negate(c,t,b);
  384. penlabels(1,2,3,6,7,8,9); endchar; 
  385.  
  386. cmchar "Negated greater than or (double) equals sign"; 
  387. compute_spread(.45x_height#,.55x_height#); 
  388. spread#':=spread#; spread':=spread; 
  389. compute_spread(5/4x_height#,3/2x_height#); 
  390. beginchar(oct"025",14u#,v_center(2spread#'+spread#+2rule_thickness#+6u#)); 
  391. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  392. rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread;  
  393. x2=x7=x9; x1=x6=x8; y6=y7; y8=y9; 
  394. y2=.5[y1,y3]; top y3-bot y6=spread'; top y1=h-3u; 
  395. y7-y9=spread'; 
  396. draw z1--z2--z3;  % diagonals 
  397. draw z6--z7; draw z8--z9; 
  398. char_center(c); x.t=w-3u; y.t=y1+3u;
  399. char_negate(c,t,b);
  400. penlabels(1,2,3,6,7,8,9); endchar;  
  401.  
  402. cmchar "Precedes or slanted not (double) equals sign";  
  403. compute_spread(.45x_height#,.55x_height#); 
  404. spread#':=spread#; spread':=spread; 
  405. compute_spread(5/4x_height#,3/2x_height#);  
  406. beginchar(oct"026",14u#,v_center(2spread#'+spread#+2rule_thickness#)); 
  407. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  408. lft x2=hround 1.5u-eps; x1=x3=w-x2; y1-y3=spread; 
  409. y2=.5[y1,y3]; top y1=h; 
  410. x2=x9=x7; x1=x8=x6; y7=y6; y8=y9; 
  411. y7-y9=spread'; top y3-bot y6=spread'; 
  412. draw z1{-u,-spread}..{left}z2;  % diagonals  
  413. draw z3{-u, spread}..{left}z2;
  414. draw z6--z7; draw z8--z9; % equal sign 
  415. z.c=.5[z7,z8]; x.t=2/3[x.c, x3]; y.t=2/3[y6,y3];
  416. char_negate(c,t,b);
  417. penlabels(1,2,3,6,7,8,9); endchar; 
  418.  
  419. cmchar "Follows or slanted not  (double) equals sign"; 
  420. compute_spread(.45x_height#,.55x_height#); 
  421. spread#':=spread#; spread':=spread; 
  422. compute_spread(5/4x_height#,3/2x_height#); 
  423. beginchar(oct"027",14u#,v_center(2spread#'+spread#+2rule_thickness#)); 
  424. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  425. rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread;  
  426. x2=x7=x9; x1=x6=x8; y6=y7; y8=y9; 
  427. y2=.5[y1,y3]; top y3-bot y6=spread'; top y1=h; 
  428. y7-y9=spread'; 
  429. draw z1{u,-spread}..{right}z2;  % diagonals 
  430. draw z3{u,spread}..{right}z2;
  431. draw z6--z7; draw z8--z9; 
  432. z.c=.5[z7,z8]; x.t=2/3[x.c, w-x3]; y.t=2/3[y6,y3];
  433. char_negate(c,t,b);
  434. penlabels(1,2,3,6,7,8,9); endchar;  
  435.  
  436. cmchar "Precedes with not approximate equality sign";
  437. compute_spread(.45x_height#,.55x_height#);
  438. spread#':=spread#; spread':=spread; % the spread of `$=$'
  439. compute_spread(.54 x_height#,.66 x_height#);
  440. spread#'':=spread#; spread'':=spread; % the spread of `$=$'
  441. compute_spread(1.111 x_height#,1.333 x_height#);
  442. beginchar(oct"030",14u#,v_center(2spread#''+spread#+2rule_thickness#));
  443. adjust_fit(0,0);
  444. % now for precedes sign, using z9 (top), z10 (vertex), & z11 (bot)
  445. pickup rule.nib; 
  446. lft x10= hround 1.5u-eps; x9=x11=w-x10; 
  447. y9-y11=spread; y10=.5[y9,y11]; top y9=h;
  448. draw z9{-u,-spread}...{left}z10; 
  449. draw z11{-u,spread}...{left}z10;
  450. pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness;
  451. if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
  452. lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1;
  453. top y3=top y1=bot y11-spread''; top y2=top y4=bot y1+spread';
  454. z1-z5=z2-z6=z3-z7=z4-z8=(0,spread'');
  455. draw z1{up}...z2{right}..{right}z3...{up}z4;  % upper stroke
  456. draw z5{up}...z6{right}..{right}z7...{up}z8;  % lower stroke
  457. z.c=.5[z2,z7]; x.t=3/8[x.c,x4]; y.t=1/3[y2,y11];
  458. char_negate(c,t,b);
  459. labels(1,2,3,4,5,6,7,8,9,10,11); endchar;
  460.  
  461.  
  462. cmchar "Follows with not approximate equality sign";
  463. compute_spread(.45x_height#,.55x_height#);
  464. spread#':=spread#; spread':=spread; % the spread of `$=$'
  465. compute_spread(.54 x_height#,.66 x_height#);
  466. spread#'':=spread#; spread'':=spread; % the spread of `$=$'
  467. compute_spread(1.111 x_height#,1.333 x_height#);
  468. beginchar(oct"031",14u#,v_center(2spread#''+spread#+2rule_thickness#));
  469. adjust_fit(0,0);
  470. % now for follow sign, using z9 (top), z10 (vertex), & z11 (bot)
  471. pickup rule.nib;
  472. lft x9 = hround 1.5u-eps; x10=w-x9; x11=x9;
  473. y9-y11=spread; y10=.5[y9,y11]; top y9=h;
  474. draw z9{u,-spread}...{right}z10;
  475. draw z11{u,spread}...{right}z10;
  476. pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness;
  477. if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
  478. lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1;
  479. top y3=top y1=bot y11-spread''; top y2=top y4=bot y1+spread';
  480. z1-z5=z2-z6=z3-z7=z4-z8=(0,spread'');
  481. draw z1{up}...z2{right}..{right}z3...{up}z4;  % upper stroke
  482. draw z5{up}...z6{right}..{right}z7...{up}z8;  % lower stroke
  483. z.c=.5[z2,z7]; x.t=3/8[x.c,x4]; y.t=1/3[y2,y11];
  484. char_negate(c,t,b);
  485. labels(1,2,3,4,5,6,7,8,9,10,11); endchar;
  486.  
  487.  
  488. cmchar "Less than or not approximately equal to sign";  
  489. compute_spread(.45x_height#,.55x_height#);  
  490. spread#':=spread#; spread':=spread; 
  491. compute_spread(.54 x_height#,.66 x_height#);
  492. spread#'':=spread#; spread'':=spread; % the spread of `$=$'
  493. compute_spread(1.111 x_height#,1.333 x_height#); 
  494. beginchar(oct"032",14u#,v_center(2spread#''+spread#+2rule_thickness#)); 
  495. adjust_fit(0,0); pickup rule.nib; autorounded; 
  496. lft x2=hround 1.5u-eps; x1=x3=w-x2; 
  497. y1-y3=spread; y2=.5[y1,y3]; top y1=h; 
  498. draw z1--z2--z3; 
  499. pickup pencircle xscaled .7rule_thickness yscaled 
  500. 1.4rule_thickness; 
  501. if vair#>.8curve#: pickup rule.nib; autorounded; fi 
  502. lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; 
  503. top y13=top y11=bot y3-spread''; top y12=top y14=bot y11+spread';
  504. path p; p=z11{up}...z12{right}..{right}z13...{up}z14; 
  505. draw p; draw p shifted (0,-spread''); 
  506. x.c=w/2; y.c=.5[y12, y13-spread'']; x.t=3/8[x.c,x14]; y.t=2/3[y12,y3];
  507. char_negate(c,t,b);
  508. penlabels(1,2,3,4,11,12,13,14); endchar;   
  509.  
  510. cmchar "Greater than or not approximately equal to sign";  
  511. compute_spread(.45x_height#,.55x_height#);  
  512. spread#':=spread#; spread':=spread; 
  513. compute_spread(.54 x_height#,.66 x_height#);
  514. spread#'':=spread#; spread'':=spread; % the spread of `$=$'
  515. compute_spread(1.111 x_height#,1.333 x_height#); 
  516. beginchar(oct"033",14u#,v_center(2spread#''+spread#+2rule_thickness#)); 
  517. adjust_fit(0,0); pickup rule.nib; autorounded; 
  518. lft x1=hround 1.5u-eps; x1=x3; x2=w-x1; 
  519. y1-y3=spread; y2=.5[y1,y3]; top y1=h;
  520. draw z1--z2--z3; 
  521. pickup pencircle xscaled .7rule_thickness yscaled 
  522. 1.4rule_thickness; 
  523. if vair#>.8curve#: pickup rule.nib; autorounded; fi 
  524. lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; 
  525. bot y11=bot y13; top y12=top y14;  
  526. top y12-bot y11=spread';  
  527. bot y3- spread''=top y11;
  528. path p; p=z11{up}...z12{right}..{right}z13...{up}z14; 
  529. draw p; draw p shifted (0,-spread''); 
  530. x.c=w/2; y.c=.5[y12,y13-spread'']; x.t=3/8[x.c,x14]; y.t=2/3[y12,y3];
  531. char_negate(c,t,b);
  532. penlabels(1,2,3,4,11,12,13,14); endchar; 
  533.     
  534. cmchar "Thick not similar to sign"; 
  535. compute_spread(.45x_height#,.55x_height#); 
  536. beginchar(oct"034",14u#,v_center(spread#+rule_thickness#)); 
  537. adjust_fit(0,0); pickup pencircle xscaled .8rule_thickness 
  538. yscaled 1.87rule_thickness; if vair#>.8curve#: pickup 
  539. rule.nib; autorounded; fi % monoline 
  540. lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1; 
  541. bot y1=bot y3=-d; top y2=top y4=h; 
  542. draw z1{up}...z2{right}..{right}z3...{up}z4;  % stroke 
  543. char_center(100); x101=w-4u; y101=y1+5u;
  544. char_negate(100,101,102);
  545. labels(1,2,3,4,99,100); endchar; 
  546.  
  547.   
  548. cmchar "Not approximately equal to sign"; 
  549. compute_spread(.45x_height#,.55x_height#); 
  550. beginchar(oct"035",14u#,v_center(3spread#+2rule_thickness#+8u#)); 
  551. adjust_fit(0,0); 
  552. pickup pencircle xscaled .7rule_thickness yscaled 
  553. 1.4rule_thickness; 
  554. if vair#>.8curve#: pickup rule.nib; autorounded; fi % 
  555. lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1; 
  556. y1=y3; top y2=top y4=h-4u; top y2-bot y1=spread; 
  557. draw z1{up}...z2{right}..{right}z3...{up}z4;  % stroke 
  558. pickup rule.nib;
  559. lft x5=lft x7=hround u-eps; x6=x8=w-x5;
  560. y5=y6=y1-spread; y7=y8=y5-spread;
  561. draw z5--z6; draw z7--z8; % double equal sign
  562. char_center(100); x101=w-3u; y101=y1+4u;
  563. char_negate(100,101,102);
  564. labels(1,2,3,4,5,6,7,8,99,100); endchar; 
  565.  
  566. cmchar "45 degree angle line";
  567. beginchar(oct"036",16u#,asc_height#,asc_depth#);
  568. adjust_fit(0,0); pickup rule.nib;
  569. bot y1 =-d-eps;  .5[y1,y2]=math_axis;
  570. lft x1 = 0+eps =x0; %  rt x2=;
  571. z0-z1=(z2-z1) rotated 45;
  572. draw z1--z2; 
  573. labels(0,1,2); endchar;
  574.  
  575. cmchar "135 degree angle line";
  576. beginchar(oct"037",16u#,body_height#,asc_depth#);
  577. adjust_fit(0,0); pickup rule.nib;
  578. bot y1 =-d-eps; .5[y1,y2]=math_axis;
  579. lft x2 = 0+eps= x0; %  rt x2=;
  580. z0-z2=(z1-z2) rotated -45;
  581. draw z1--z2; 
  582. labels(0,1,2); endchar;
  583.  
  584. cmchar "Negated subset or equal to sign";
  585. compute_spread(.45x_height#,.55x_height#);
  586. spread#':=spread#; spread':=spread; % the spread of `$=$'
  587. compute_spread(5/4x_height#,3/2x_height#);
  588. beginchar(oct"040",14u#,v_center(spread#'+spread#+rule_thickness#));
  589. adjust_fit(0,0); pickup rule.nib; autorounded;
  590. lft x2=hround 1.5u-eps; x1=x3=w-x2;
  591. y1-y3=spread; y2=.5[y1,y3]; top y1=h;
  592. x4=x5=.5w; y4=y1; y5=y3;
  593. draw z1---z4...z2{down}...z5---z3;  % arc and bars
  594. x8=x1; lft x9=x2; y8=y9; y3-y9=spread'; draw z8--z9;  % lower bar
  595. x100=w/2; y100=.5[y3,y8]; x101=x3-2u; y101=y3+2u;
  596. char_negate(100,101,102);
  597. labels(1,2,3,4,5,8,9); endchar;
  598.  
  599. cmchar "Negated superset or equal to sign";
  600. compute_spread(.45x_height#,.55x_height#);
  601. spread#':=spread#; spread':=spread; % the spread of `$=$'
  602. compute_spread(5/4x_height#,3/2x_height#);
  603. beginchar(oct"041",14u#,v_center(spread#'+spread#+rule_thickness#));
  604. adjust_fit(0,0); pickup rule.nib; autorounded;
  605. lft x1=hround 1.5u-eps; x2=w-x1; x3=x1;
  606. y1-y3=spread; y2=.5[y1,y3]; top y1=h;
  607. x4=x5=.5w; y4=y1; y5=y3;
  608. draw z1---z4...z2{down}...z5---z3;  % arc and bars
  609. x8=x1; rt x9=x2; y8=y9; y3-y9=spread'; draw z8--z9;  % lower bar
  610. x100=x3+2.5u; y100=.5[y8,y3]; x101=x100+2.5u; y101=y3+2u;
  611. y101-y100=y100-y102; x101-x100=x100-x102; draw z101--z102;
  612. labels(1,2,3,4,5,8,9); endchar;
  613.  
  614. cmchar "Negated subset or (double) equal to sign"; 
  615. compute_spread(.45x_height#,.55x_height#); 
  616. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  617. compute_spread(5/4x_height#,3/2x_height#); 
  618. beginchar(oct"042",14u#,v_center(2spread#'+spread#+2rule_thickness#)); 
  619. adjust_fit(0,0); pickup rule.nib; autorounded; lft x2=hround 
  620. 1.5u-eps; x1=x3=w-x2; y1-y3=spread; y2=.5[y1,y3]; top y1=h; 
  621. x4=x5=.5w; y4=y1; y5=y3; draw z1---z4...z2{down}...z5---z3;  
  622. % arc and bars 
  623. x8=x1; x9=x2;  
  624. y8=y9; y3-y9=spread'; draw z8--z9;  % lower bar  
  625. x9'=x9; x8'=x8; y9'=y8'; y9-y9'=spread'; draw z8'--z9'; 
  626. char_center(c); x.t=w-2.5u; y.t=h+u; char_negate(c,t,b);
  627. penlabels(1,2,3,4,5,8,9,8',9'); endchar; 
  628.  
  629. cmchar "Negated superset or (double) equal to sign"; 
  630. compute_spread(.45x_height#,.55x_height#); 
  631. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  632. compute_spread(5/4x_height#,3/2x_height#); 
  633. beginchar(oct"043",14u#,v_center(2spread#'+spread#+2rule_thickness#)); 
  634. adjust_fit(0,0); pickup rule.nib; autorounded; lft x1=hround 
  635. 1.5u-eps; x2=w-x1; x3=x1; y1-y3=spread; y2=.5[y1,y3]; top 
  636. y1=h; x4=x5=.5w; y4=y1; y5=y3; draw 
  637. z1---z4...z2{down}...z5---z3;  % arc and bars 
  638. x8=x1; 
  639. x9=x2;  
  640. y8=y9; y3-y9=spread'; draw z8--z9;  % lower bar  
  641. x9'=x9; x8'=x8; y9'=y8'; y9-y9'=spread'; draw z8'--z9'; 
  642. char_center(c); x.t=w-2.5u; y.t=h+u; char_negate(c,t,b);
  643. labels(1,2,3,4,5,8,9); endchar; 
  644.  
  645. cmchar "Subset or not (double) equal to sign"; 
  646. compute_spread(.45x_height#,.55x_height#); 
  647. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  648. compute_spread(5/4x_height#,3/2x_height#); 
  649. beginchar(oct"044",14u#,v_center(2.33spread#'+spread#+2rule_thickness#)); 
  650. adjust_fit(0,0); pickup rule.nib; autorounded; lft x2=hround 
  651. 1.5u-eps; x1=x3=w-x2; y1-y3=spread; y2=.5[y1,y3]; top y1=h; 
  652. x4=x5=.5w; y4=y1; y5=y3; draw z1---z4...z2{down}...z5---z3;  
  653. % arc and bars 
  654. x8=x1; x9=x2;  
  655. y8=y9; y3-y9=1.33spread'; draw z8--z9;  % lower bar  
  656. x9'=x9; x8'=x8; y9'=y8'; y9-y9'=spread'; draw z8'--z9'; 
  657. x.c=w/2; y.c=.5[y9,y9']; x.t=1/2[x.c,w]; y.t=.5[y8,y3];
  658. char_negate(c,t,b);
  659. penlabels(1,2,3,4,5,8,9,8',9'); endchar; 
  660.  
  661. cmchar "Superset or not (double) equal to sign"; 
  662. compute_spread(.45x_height#,.55x_height#); 
  663. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  664. compute_spread(5/4x_height#,3/2x_height#); 
  665. beginchar(oct"045",14u#,v_center(2.33spread#'+spread#+2rule_thickness#)); 
  666. adjust_fit(0,0); pickup rule.nib; autorounded; lft x1=hround 
  667. 1.5u-eps; x2=w-x1; x3=x1; y1-y3=spread; y2=.5[y1,y3]; top 
  668. y1=h; x4=x5=.5w; y4=y1; y5=y3; draw 
  669. z1---z4...z2{down}...z5---z3;  % arc and bars 
  670. x8=x1; 
  671. x9=x2;  
  672. y8=y9; y3-y9=1.33spread'; draw z8--z9;  % lower bar  
  673. x9'=x9; x8'=x8; y9'=y8'; y9-y9'=spread'; draw z8'--z9'; 
  674. x.c=w/2; y.c=.5[y9,y9']; x.t=1/2[x.c,w]; y.t=.5[y8,y3];
  675. char_negate(c,t,b);
  676. labels(1,2,3,4,5,8,9); endchar; 
  677.  
  678. cmchar "Another not subset or (double) equal to sign"; 
  679. compute_spread(.45x_height#,.55x_height#); 
  680. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  681. compute_spread(5/4x_height#,3/2x_height#); 
  682. beginchar(oct"046",14u#,v_center(2spread#'+spread#+2rule_thickness#)); 
  683. adjust_fit(0,0); pickup rule.nib; autorounded; lft x2=hround 
  684. 1.5u-eps; x1=x3=w-x2; y1-y3=spread; y2=.5[y1,y3]; top y1=h; 
  685. x4=x5=.5w; y4=y1; y5=y3; draw z1---z4...z2{down}...z5---z3;  
  686. % arc and bars 
  687. x8=x1; x9=x2;  
  688. y8=y9; y3-y9=spread'; draw z8--z9;  % lower bar  
  689. x9'=x9; x8'=x8; y9'=y8'; y9-y9'=spread'; draw z8'--z9'; 
  690. 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];
  691. draw z.b--z.t; labels(c,b,t);
  692. penlabels(1,2,3,4,5,8,9,8',9'); endchar; 
  693.  
  694. cmchar "Another superset or (double) equal to sign"; 
  695. compute_spread(.45x_height#,.55x_height#); 
  696. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  697. compute_spread(5/4x_height#,3/2x_height#); 
  698. beginchar(oct"047",14u#,v_center(2spread#'+spread#+2rule_thickness#)); 
  699. adjust_fit(0,0); pickup rule.nib; autorounded; lft x1=hround 
  700. 1.5u-eps; x2=w-x1; x3=x1; y1-y3=spread; y2=.5[y1,y3]; top 
  701. y1=h; x4=x5=.5w; y4=y1; y5=y3; draw 
  702. z1---z4...z2{down}...z5---z3;  % arc and bars 
  703. x8=x1; 
  704. x9=x2;  
  705. y8=y9; y3-y9=spread'; draw z8--z9;  % lower bar  
  706. x9'=x9; x8'=x8; y9'=y8'; y9-y9'=spread'; draw z8'--z9'; 
  707. x.t=x5; y.t=y3+2u; x.b=2.5u; y.b=y9'-2u; z.c=.5[z.b,z.t];
  708. draw z.b--z.t; labels(c,b,t);
  709. labels(1,2,3,4,5,8,9); endchar; 
  710.  
  711. cmchar "Subset or not equal to sign";
  712. compute_spread(.45x_height#,.55x_height#);
  713. spread#':=spread#; spread':=spread; % the spread of `$=$'
  714. compute_spread(5/4x_height#,3/2x_height#);
  715. beginchar(oct"050",14u#,v_center(spread#'+spread#+rule_thickness#));
  716. adjust_fit(0,0); pickup rule.nib; autorounded;
  717. lft x2=hround 1.5u-eps; x1=x3=w-x2;
  718. y1-y3=spread; y2=.5[y1,y3]; top y1=h;
  719. x4=x5=.5w; y4=y1; y5=y3;
  720. draw z1---z4...z2{down}...z5---z3;  % arc and bars
  721. x8=x1; lft x9=x2; y8=y9; y3-y9=spread'; draw z8--z9;  % lower bar
  722. z100=.5[z8,z9]; y101=.5[y8,y3];x101-x100=y101-y100;
  723. char_negate(100,101,102);
  724. labels(1,2,3,4,5,8,9); endchar;
  725.  
  726. cmchar "Superset or not equal to sign";
  727. compute_spread(.45x_height#,.55x_height#);
  728. spread#':=spread#; spread':=spread; % the spread of `$=$'
  729. compute_spread(5/4x_height#,3/2x_height#);
  730. beginchar(oct"051",14u#,v_center(spread#'+spread#+rule_thickness#));
  731. adjust_fit(0,0); pickup rule.nib; autorounded;
  732. lft x1=hround 1.5u-eps; x2=w-x1; x3=x1;
  733. y1-y3=spread; y2=.5[y1,y3]; top y1=h;
  734. x4=x5=.5w; y4=y1; y5=y3;
  735. draw z1---z4...z2{down}...z5---z3;  % arc and bars
  736. x8=x1; rt x9=x2; y8=y9; y3-y9=spread'; draw z8--z9;  % lower bar
  737. z100=.5[z8,z9]; y101=.5[y8,y3];x101-x100=y101-y100;
  738. char_negate(100,101,102);
  739. labels(1,2,3,4,5,8,9); endchar;
  740.  
  741. cmchar "Not subset or equal to sign";
  742. compute_spread(.45x_height#,.55x_height#);
  743. spread#':=spread#; spread':=spread; % the spread of `$=$'
  744. compute_spread(5/4x_height#,3/2x_height#);
  745. beginchar(oct"052",14u#,v_center(spread#'+spread#+rule_thickness#+6u#));
  746. adjust_fit(0,0); pickup rule.nib; autorounded;
  747. lft x2=hround 1.5u-eps; x1=x3=w-x2;
  748. y1-y3=spread; y2=.5[y1,y3]; top y1=h-3u;
  749. x4=x5=.5w; y4=y1; y5=y3;
  750. draw z1---z4...z2{down}...z5---z3;  % arc and bars
  751. x8=x1; lft x9=x2; y8=y9; y3-y9=spread'; draw z8--z9;  % lower bar
  752. char_center(100); y101=y1+3u; x101=w-3u;
  753. char_negate(100,101,102);
  754. labels(1,2,3,4,5,8,9); endchar;
  755.  
  756. cmchar "Not superset or equal to sign";
  757. compute_spread(.45x_height#,.55x_height#);
  758. spread#':=spread#; spread':=spread; % the spread of `$=$'
  759. compute_spread(5/4x_height#,3/2x_height#);
  760. beginchar(oct"053",14u#,v_center(spread#'+spread#+rule_thickness#+6u#));
  761. adjust_fit(0,0); pickup rule.nib; autorounded;
  762. lft x1=hround 1.5u-eps; x2=w-x1; x3=x1;
  763. y1-y3=spread; y2=.5[y1,y3]; top y1=h-3u;
  764. x4=x5=.5w; y4=y1; y5=y3;
  765. draw z1---z4...z2{down}...z5---z3;  % arc and bars
  766. x8=x1; rt x9=x2; y8=y9; y3-y9=spread'; draw z8--z9;  % lower bar
  767. char_center(100); y101=y1+3u; x101=w-3u;
  768. char_negate(100,101,102);
  769. labels(1,2,3,4,5,8,9); endchar;
  770.  
  771. cmchar "Negated double vertical line (norm or cardinality)";
  772. beginchar(oct"054",9u#,body_height#,paren_depth#);
  773. adjust_fit(0,0); pickup rule.nib;
  774. x1=x2; top y1=h; .5[y1,y2]=math_axis;
  775. x3=x4=w-x1; y3=y1; y4=y2;
  776. compute_spread(.45x_height#,.55x_height#); x3-x1=spread;
  777. draw z1--z2; draw z3--z4;  % stems
  778. char_center(c); x.t=w; y.t=2/3h;
  779. char_negate(c,t,b);
  780. labels(1,2,3,4); endchar;
  781.  
  782. cmchar "Negated vertical line";
  783. beginchar(oct"055",5u#,body_height#,paren_depth#);
  784. italcorr body_height#*slant+.5rule_thickness#-2u#;
  785. adjust_fit(0,0); pickup rule.nib;
  786. x1=x2=good.x .5w; top y1=h+eps; bot y2=-d-eps;
  787. draw z1--z2;  % stem
  788. x.t=w; x.b=w-x.t; y.t=2/3h; y.b=1/3h;
  789. draw z.b--z.t;
  790. labels(1,2,b,t); endchar;
  791.  
  792. cmchar "Negated cute vertical bar";
  793. beginchar(oct"056",4u#,6u#+math_axis#,6u#-math_axis#);
  794. italcorr math_axis#*slant - .5u#;
  795. adjust_fit(0,0); pickup rule.nib;
  796. x1=x2=hround(w/2); top y1=x_height; bot y2=-o;
  797. draw z1--z2;
  798. char_center(c); x.t=w; y.t=5/8h; 
  799. char_negate(c,t,b);
  800. labels(1,2); endchar;
  801.  
  802. cmchar "Negated pair of cute vertical bars";
  803. beginchar(oct"057",7u#,6u#+math_axis#,6u#-math_axis#);
  804. italcorr math_axis#*slant - .5u#;
  805. adjust_fit(0,0); pickup rule.nib;
  806. lft x1=u; x2=x1; top y1=x_height; bot y2=-o;
  807. x3=w-x1; x4=x3; y3=y1; y4=y2;
  808. draw z1--z2; draw z3--z4;
  809. char_center(c); x.t=w; y.t=5/8h; 
  810. char_negate(c,t,b);
  811. labels(1,2,3,4); endchar;
  812.  
  813. cmchar "Negated left turnstile";
  814. beginchar(oct"060",11u#,asc_height#,0);
  815. adjust_fit(0,0); pickup rule.nib;
  816. .5[y1,y2]=y3=y4; x1=x2=x3;
  817. lft x3=hround u; x4=w-x3; top y1=h; bot y2=0;
  818. draw z1--z2;  % stem
  819. draw z3--z4;  % bar
  820. top rt z.t=(w-u,h); bot lft z.b=(-u,0); draw z.t--z.b;
  821. labels(1,2,3,4,b,t); endchar;
  822.  
  823. cmchar "Negated forces symbol"; 
  824. beginchar(oct"061",13u#,asc_height#,0); 
  825. adjust_fit(0,0); pickup rule.nib; 
  826. top y1=h; bot y2=0; y3=y4=good.y .5h; y5=y1; y6=y2; 
  827. lft x5=hround u; x4=w-x5;  
  828. compute_spread(.45x_height#,.55x_height#); 
  829. x1=x5+spread; x1=x2=x3; x6=x5; 
  830. draw z6--z5; draw z2--z1; draw z3--z4; 
  831. top rt z.t=(w-u,h); bot lft z.b=(-u,0); draw z.t--z.b;
  832. penlabels(1,2,3,4,5,6,b,t); endchar; 
  833.  
  834. cmchar "Negated satisfies symbol"; 
  835. beginchar(oct"062",11u#,asc_height#,0); 
  836. adjust_fit(0,0); pickup rule.nib; 
  837. compute_spread(.45x_height#,.55x_height#); 
  838. top y1=h; bot y2=0; y0=good.y .5[y1,y2];  
  839. y3=vround y0+.5spread; 
  840. y5=vround y0- .5spread; y4=y3; y6=y5;  
  841. lft x1=hround u; x4=w-x1; 
  842. x1=x2=x3=x5; x4=x6; x0=x1; 
  843. draw z1--z2; % vertical line 
  844. draw z3--z4; % draw top horizontal piece 
  845. draw z5--z6; % draw bottom horizontal piece 
  846. top rt z.t=(w-u,h); bot lft z.b=(-u,0); draw z.t--z.b;
  847. penlabels(0,1,2,3,4,5,6,b,t); endchar; 
  848.  
  849. cmchar "Negated forces symbol with extra bar"; 
  850. beginchar(oct"063",13u#,asc_height#,0); 
  851. adjust_fit(0,0); pickup rule.nib; 
  852. top y1=h; bot y2=0; y3=y4=good.y .5h; y5=y1; y6=y2; 
  853. lft x5=hround u; x4=w-x5;  
  854. compute_spread(.45x_height#,.55x_height#); 
  855. x1=x5+spread; x1=x2=x3; x6=x5; 
  856. x3'=x3; x4'=x4; y3:=y3+.5spread; y4:=y3;
  857. y3'=y4'=y3-spread; 
  858. draw z6--z5; draw z2--z1; draw z3--z4; 
  859. draw z3'--z4'; % extra bar
  860. top rt z.t=(w-u,h); bot lft z.b=(-u,0); draw z.t--z.b;
  861. penlabels(1,2,3,4,5,6,b,t); endchar; 
  862.  
  863.  
  864. cmchar "Negated rightward isosceles triangle with lower bar"; 
  865. compute_spread(.45x_height#,.55x_height#); 
  866. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  867. compute_spread(5/4x_height#,3/2x_height#); 
  868. beginchar(oct"064",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); 
  869. adjust_fit(0,0); pickup rule.nib; lft x2=hround(1.5u); 
  870. x3=x2; x1=hround(w-x2);   
  871. top y2=h-3u; y2-y3=spread; y1=.5[y2,y3]; 
  872. x4=x2; x5=x1; y3-y4=spread'; y5=y4; 
  873. draw z1--z2--z3--cycle; draw z4--z5; 
  874. char_center(c); x.t=1/2[x.c,w]; y.t=y2+3u;
  875. char_negate(c,t,b);
  876. penlabels(1,2,3,4,5); endchar;  
  877.  
  878. cmchar "Negated leftward isosceles triangle with lower bar"; 
  879. compute_spread(.45x_height#,.55x_height#); 
  880. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  881. compute_spread(5/4x_height#,3/2x_height#); 
  882. beginchar(oct"065",14u#,v_center(spread#'+spread#+rule_thickness#+6u#)); 
  883. adjust_fit(0,0); pickup rule.nib; rt x2=hround(w-1.5u-eps); 
  884. x3=x2; x1=hround(w-x2);   
  885. top y2=h-3u; y2-y3=spread; y1=.5[y2,y3]; 
  886. x4=x2; x5=x1; y3-y4=spread'; y5=y4; 
  887. draw z1--z2--z3--cycle; draw z4--z5; 
  888. char_center(c); x.t=1/2[x.c,w]; y.t=y2+3u;
  889. char_negate(c,t,b);
  890. penlabels(1,2,3,4,5); endchar;  
  891.  
  892. cmchar "Negated leftward pointing isosceles triangle"; 
  893. compute_spread(.45x_height#,.55x_height#); 
  894. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  895. compute_spread(5/4x_height#,3/2x_height#); 
  896. beginchar(oct"066",14u#,v_center(spread#+rule_thickness#+6u#)); 
  897. adjust_fit(0,0); pickup rule.nib; rt x2=hround(w-1.5u-eps); 
  898. x3=x2; x1=hround(w-x2);   
  899. top y2=h-3u; y2-y3=spread; y1=.5[y2,y3]; 
  900. draw z1--z2--z3--cycle;  
  901. char_center(c); x.t=1/2[x.c,w]; y.t=y2+3u;
  902. char_negate(c,t,b);
  903. penlabels(1,2,3); endchar;  
  904.  
  905. cmchar "Negated rightward pointing isosceles triangle"; 
  906. compute_spread(.45x_height#,.55x_height#); 
  907. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  908. compute_spread(5/4x_height#,3/2x_height#); 
  909. beginchar(oct"067",14u#,v_center(spread#+rule_thickness#+6u#)); 
  910. adjust_fit(0,0); pickup rule.nib; lft x2=hround(1.5u); 
  911. x3=x2; x1=hround(w-x2);   
  912. top y2=h-3u; y2-y3=spread; y1=.5[y2,y3]; 
  913. draw z1--z2--z3--cycle;  
  914. char_center(c); x.t=1/2[x.c,w]; y.t=y2+3u;
  915. char_negate(c,t,b);
  916. penlabels(1,2,3); endchar;  
  917.  
  918. cmchar "Negated leftward arrow";
  919. compute_spread(.45x_height#,.55x_height#);
  920. beginchar(oct"070",18u#,v_center(spread#+rule_thickness#));
  921. adjust_fit(0,0); pickup crisp.nib;
  922. pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0);
  923. y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u;
  924. y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps;
  925. pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
  926. z9=.381966[.5[z3,z4],z0];
  927. numeric t; path p; p=z4r{z9-z4}..z6r;
  928. t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
  929. filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
  930.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r)
  931.  --z3l{z9-z3}..z0 & cycle;  % arrowhead and stem
  932. char_center(100); top y101=top y3; x101=x100+2u;
  933. char_negate(100,101,102);
  934. penlabels(0,1,2,3,4,5,6,9); endchar;
  935.  
  936. cmchar "Negated rightward arrow";
  937. compute_spread(.45x_height#,.55x_height#);
  938. beginchar(oct"071",18u#,v_center(spread#+rule_thickness#));
  939. adjust_fit(0,0); pickup crisp.nib;
  940. pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0);
  941. y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u);
  942. y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps;
  943. pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
  944. z9=.381966[.5[z3,z4],z0];
  945. numeric t; path p; p=z4l{z9-z4}..z6r;
  946. t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
  947. filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
  948.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
  949.  --z3r{z9-z3}..z0 & cycle;  % arrowhead and stem
  950. char_center(100); top y101=top y3; x101=x100+2u;
  951. char_negate(100,101,102);
  952. penlabels(0,1,2,3,4,5,6,9); endchar;
  953.  
  954. cmchar "Negated left-and-right arrow";
  955. compute_spread(.45x_height#,.55x_height#);
  956. beginchar(oct"075",18u#,
  957.  v_center(if monospace:.6asc_height#+fi spread#+rule_thickness#));
  958. adjust_fit(0,0); pickup crisp.nib;
  959. pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0);
  960. y0=y1=y2=math_axis if monospace:+vround.3asc_height fi; lft x0=hround u;
  961. if monospace: x1+.5rule_thickness=hround(w-u) else: x1=.5w fi;
  962. y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps;
  963. pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
  964. z9=.381966[.5[z3,z4],z0];
  965. numeric t; path p; p=z4r{z9-z4}..z6r;
  966. t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
  967. filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
  968.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r)
  969.  --z3l{z9-z3}..z0 & cycle;  % left arrowhead and stem
  970. pos11(rule_thickness,90); pos12(rule_thickness,90); pos13(bar,0); pos14(bar,0);
  971. y10=y11=y12=math_axis if monospace:-vround.3asc_height fi;
  972. rt x10=hround(w-u);
  973. if monospace: x11-.5rule_thickness=hround u else: x11=.5w fi;
  974. y13-y10=y10-y14=.24asc_height+eps; x13=x14=x10-3u-eps;
  975. pos15(bar,angle(z14-z10)); z15l=z10; pos16(bar,angle(z13-z10)); z16l=z10;
  976. z19=.381966[.5[z13,z14],z10];
  977. numeric t; path p; p=z14l{z19-z14}..z16r;
  978. t=xpart(p intersectiontimes((0,y12l)--(w,y12l))); x12=xpart point t of p;
  979. filldraw z10..{z14-z19}z14r--subpath (0,t) of\\(z14l{z19-z14}..z16r)
  980.  --z12l---z11l..z11r---z12r--subpath (t,0) of\\(z13l{z19-z13}..z15r)
  981.  --z13r{z19-z13}..z10 & cycle;  % right arrowhead and stem
  982. char_center(100); top y101=top y3; x101=x100+2u;
  983. char_negate(100,101,102);
  984. penlabels(0,1,2,3,4,5,6,9,10,11,12,13,14,15,16,19); endchar;
  985.  
  986. cmchar "Negated double leftward arrow";
  987. compute_spread(.45x_height#,.55x_height#);
  988. beginchar(oct"072",18u#,v_center(spread#+rule_thickness#));
  989. adjust_fit(0,0); pickup rule.nib;
  990. lft x7=hround u-eps; x8=x7; x1=x2=w-x7;
  991. y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
  992. draw z1--z7; draw z2--z8;  % bars
  993. pickup crisp.nib; lft x0=hround u-eps; y0=good.y math_axis;
  994. pos3(rule_thickness,0); pos4(rule_thickness,0);
  995. y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0+6u+eps;
  996. pos5(rule_thickness,angle(z4-z0)); z5l=z0;
  997. pos6(rule_thickness,angle(z3-z0)); z6l=z0;
  998. z9=.381966[.5[z3,z4],z0];
  999. erase filldraw z0..{z3-z9}z3--(0,y3)
  1000.  --(0,y4)--z4{z9-z4}..z0 & cycle;  % erase excess
  1001. numeric t; path p; p=z4r{z9-z4}..z6r;
  1002. t=xpart(p intersectiontimes((0,y0)--(w,y0)));
  1003. filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
  1004.  --subpath (t,0) of\\(z3r{z9-z3}..z5r)--z3l{z9-z3}..z0 & cycle;  % arrowhead
  1005. pickup rule.nib; x100=.5[x9,x1]; y100=y9; x101=x100+2u; top y101=top y3;
  1006. y101-y100=y100-y102; x101-x100=x100-x102; draw z101--z102;
  1007. penlabels(0,1,2,3,4,5,6,7,8,9); endchar;
  1008.  
  1009. cmchar "Negated double rightward arrow";
  1010. compute_spread(.45x_height#,.55x_height#);
  1011. beginchar(oct"073",18u#,v_center(spread#+rule_thickness#));
  1012. adjust_fit(0,0); pickup rule.nib;
  1013. lft x1=hround u-eps; x2=x1; x7=x8=w-x1;
  1014. y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
  1015. draw z1--z7; draw z2--z8;  % bars
  1016. pickup crisp.nib; rt x0=hround(w-u)+eps; y0=good.y math_axis;
  1017. pos3(rule_thickness,0); pos4(rule_thickness,0);
  1018. y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0-6u-eps;
  1019. pos5(rule_thickness,angle(z4-z0)); z5l=z0;
  1020. pos6(rule_thickness,angle(z3-z0)); z6l=z0;
  1021. z9=.381966[.5[z3,z4],z0];
  1022. erase filldraw z0..{z3-z9}z3--(w,y3)
  1023.  --(w,y4)--z4{z9-z4}..z0 & cycle;  % erase excess
  1024. numeric t; path p; p=z4l{z9-z4}..z6r;
  1025. t=xpart(p intersectiontimes((0,y0)--(w,y0)));
  1026. filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
  1027.  --subpath (t,0) of\\(z3l{z9-z3}..z5r)--z3r{z9-z3}..z0 & cycle;  % arrowhead
  1028. pickup rule.nib; x100=.5[x9,x1]; y100=y9; x101=x100+2u; top y101=top y3;
  1029. y101-y100=y100-y102; x101-x100=x100-x102; draw z101--z102;
  1030. penlabels(0,1,2,3,4,5,6,7,8,9); endchar;
  1031.  
  1032. cmchar "Negated double left-and-right arrow";
  1033. compute_spread(.45x_height#,.55x_height#);
  1034. beginchar(oct"074",18u#,v_center(spread#+rule_thickness#));
  1035. adjust_fit(if monospace: -u#,-u# else: 0,0 fi); pickup rule.nib;
  1036. lft x7=hround u-eps; x8=x7; x1=x2=w-x7;
  1037. y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
  1038. draw z1--z7; draw z2--z8;  % bars
  1039. pickup crisp.nib; lft x0=hround u-o; y0=good.y math_axis;
  1040. pos3(rule_thickness,0); pos4(rule_thickness,0);
  1041. y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0+5u+eps;
  1042. pos5(rule_thickness,angle(z4-z0)); z5l=z0;
  1043. pos6(rule_thickness,angle(z3-z0)); z6l=z0;
  1044. z9=.381966[.5[z3,z4],z0];
  1045. erase filldraw z0..{z3-z9}z3--(0,y3)
  1046.  --(0,y4)--z4{z9-z4}..z0 & cycle;  % erase excess at left
  1047. numeric t; path p; p=z4r{z9-z4}..z6r;
  1048. t=xpart(p intersectiontimes((0,y0)--(w,y0)));
  1049. filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
  1050.  --subpath (t,0) of\\(z3r{z9-z3}..z5r)
  1051.  --z3l{z9-z3}..z0 & cycle;  % left arrowhead
  1052. rt x10=hround(w-u)+o; y10=good.y math_axis;
  1053. pos13(rule_thickness,0); pos14(rule_thickness,0);
  1054. y13=y3; y14=y4; x13=x14=x10-5u-eps;
  1055. pos15(rule_thickness,angle(z14-z10)); z15l=z10;
  1056. pos16(rule_thickness,angle(z13-z10)); z16l=z10;
  1057. z19=.381966[.5[z13,z14],z10];
  1058. erase filldraw z10..{z13-z19}z13--(w,y13)
  1059.  --(w,y14)--z14{z19-z14}..z10 & cycle;  % erase excess at right
  1060. numeric t; path p; p=z14l{z19-z14}..z16r;
  1061. t=xpart(p intersectiontimes((0,y10)--(w,y10)));
  1062. filldraw z10..{z14-z19}z14r--subpath (0,t) of\\(z14l{z19-z14}..z16r)
  1063.  --subpath (t,0) of\\(z13l{z19-z13}..z15r)
  1064.  --z13r{z19-z13}..z10 & cycle; % right arrowhead
  1065. char_center(100); top y101=top y13; x101=x100+1.5u; char_negate(100,101,102);
  1066. penlabels(0,1,2,3,4,5,6,7,8,9,10,13,14,15,16,19); endchar;
  1067.  
  1068. cmchar "Times-division symbol";
  1069. beginarithchar(oct"076");
  1070. pickup rule.nib;
  1071. x11=good.x(1/sqrt2)[.5w,rt u]; y11=good.y(1/sqrt2)[math_axis,bot h];
  1072. x12=x13=w-x11; x14=x11; .5[y11,y12]=.5[y13,y14]=math_axis; y12=y14;
  1073. draw z11--z12; draw z13--z14;  % diagonals
  1074. x3-.5dot_size=hround(.5w-.5dot_size); %center_on(x3);
  1075. y3+.5dot_size=vround(math_axis+math_spread[.5x_height,.6x_height]+.5dot_size);
  1076. lft x1=hround u-eps; x2=w-x1; y1=y2=math_axis;
  1077. draw z1--z2;  % bar
  1078. pos3(dot_size,0); pos4(dot_size,90); z3=z4;
  1079. pos5(dot_size,0); pos6(dot_size,90); z5=z6; x5=x3; .5[y3,y5]=math_axis;
  1080. dot(3,4); dot(5,6);  % dots
  1081. penlabels(1,2,3,4,5,6,11,12,13,14); endchar;
  1082.  
  1083. cmchar "Null set symbol";
  1084. beginarithchar(oct"077");
  1085. pickup rule.nib;
  1086. z0=(w/2,h/2); % center of circle
  1087. rt x1-lft x0=hround(h/2 + o);  y1=y0;
  1088. numeric theta; theta=45;
  1089. for i=2 upto 8: z[i]-z0=(z1-z0) rotated ((i-1)*theta); endfor
  1090. draw z8...z1 for i=2 upto 8: ...z[i] endfor;
  1091. lft x9=u; x10=w-x9;  bot y9=bot y7; top y10=top y3; draw z9--z10;
  1092. labels(range 0 thru 10); endchar;
  1093.  
  1094. cmchar "Negated existential quantifier";
  1095. beginchar(oct"100",10u#,asc_height#,0);
  1096. italcorr asc_height#*slant;
  1097. adjust_fit(0,0); pickup rule.nib;
  1098. lft x1=hround u-eps; x2=x3=x5=w-x1; x4=x6-.25u=x1;
  1099. top y1=h; bot y4=0; y2=y1; y5=y6=.5[y1,y3]; y3=y4;
  1100. draw z1--z2--z3--z4;  % upper bar, stem, lower bar
  1101. draw z5--z6;  % middle bar
  1102. char_center(100); x101=w-3u; y101=y1+3u;
  1103. char_negate(100,101,102);
  1104. labels(1,2,3,4,5,6); endchar;
  1105.  
  1106. charlist oct"133": oct"134";
  1107. charlist oct"135": oct"136";
  1108.  
  1109. cmchar"Wider than widest circumflex (hat) accent";
  1110. beginchar(oct"133",34u#,1.1body_height#,0);
  1111. adjust_fit(0,0);
  1112. pickup crisp.nib;
  1113. pos2(.7[vair,curve],90); top y2r=h+o; x2=.5w;
  1114. x1=w-x3=good.x-eps; y1=y3=.45[x_height,y2];
  1115. pos1(1.2hair,angle(z2-z1)+90); pos3(1.2hair,angle(z3-z2)+90);
  1116. filldraw stroke z1e--z2e--z3e;
  1117. penlabels(1,2,3);
  1118. %big_hat; 
  1119. endchar;
  1120.  
  1121. cmchar"Very Widest circumflex (hat) accent";
  1122. beginchar(oct"134",42u#,1.1body_height#,0);
  1123. adjust_fit(0,0);
  1124. pickup crisp.nib;
  1125. pos2(.7[vair,curve],90); top y2r=h+o; x2=.5w;
  1126. x1=w-x3=good.x-eps; y1=y3=.45[x_height,y2];
  1127. pos1(1.2hair,angle(z2-z1)+90); pos3(1.2hair,angle(z3-z2)+90);
  1128. filldraw stroke z1e--z2e--z3e;
  1129. penlabels(1,2,3);
  1130. %big_hat; 
  1131. endchar;
  1132.  
  1133. cmchar"Even wider tilde (squiggle) accent";
  1134. beginchar(oct"135",34u#,1.1body_height#,0);
  1135. %big_tilde; 
  1136. adjust_fit(0,0); pickup crisp.nib;
  1137. numeric theta; theta=angle(1/6(w-vair),1/4(h-x_height));
  1138. numeric mid_width; mid_width=.4[vair,stem];
  1139. pos1(1.5vair,theta+80); pos2(2vair,theta+80);
  1140. pos3(2vair,theta+80); pos4(1.5vair,theta+80);
  1141. z2-z1=z4-z3 = (mid_width-crisp)*dir theta;
  1142. lft x1r=w-rt x4l=0; top y4r=h;
  1143. bot y1l=vround(bot y1l+min(.6[x_height,h],y3l-.25vair)-top y1r);
  1144. pair delta; ypart delta=3(y3l-y1l); delta=whatever*dir theta;
  1145. filldraw z1l..controls(z1l+delta)and(z3l-delta)..z3l..z4l
  1146. --z4r..controls(z4r-delta)and(z2r+delta)..z2r..z1r--cycle;
  1147. penlabels(1,2,3,4);
  1148. endchar;
  1149.  
  1150. cmchar"Very widest tilde (squiggle) accent";
  1151. beginchar(oct"136",42u#,1.2body_height#,0);
  1152. %big_tilde; 
  1153. adjust_fit(0,0); pickup crisp.nib;
  1154. numeric theta; theta=angle(1/6(w-vair),1/4(h-x_height));
  1155. numeric mid_width; mid_width=.4[vair,stem];
  1156. pos1(1.5vair,theta+80); pos2(2vair,theta+80);
  1157. pos3(2vair,theta+80); pos4(1.5vair,theta+80);
  1158. z2-z1=z4-z3 = (mid_width-crisp)*dir theta;
  1159. lft x1r=w-rt x4l=0; top y4r=h;
  1160. bot y1l=vround(bot y1l+min(.6[x_height,h],y3l-.25vair)-top y1r);
  1161. pair delta; ypart delta=3(y3l-y1l); delta=whatever*dir theta;
  1162. filldraw z1l..controls(z1l+delta)and(z3l-delta)..z3l..z4l
  1163. --z4r..controls(z4r-delta)and(z2r+delta)..z2r..z1r--cycle;
  1164. penlabels(1,2,3,4);
  1165. endchar;
  1166.  
  1167. cmchar "Reversed turned F";
  1168. beginchar(oct"140",10u#,asc_height#,0);
  1169. italcorr asc_height#*slant;
  1170. adjust_fit(0,0); pickup rule.nib;
  1171. lft x4=hround u-eps; x2=x3=x5=w-x4; x6=x4+.27w;
  1172. top y2=h; bot y4=0;  y5=y6=.5[y2,y3]; y3=y4;
  1173. draw z2--z3--z4;     % upper bar, stem, lower bar
  1174. draw z5--z6;     % middle bar
  1175. labels(2,3,4,5,6); endchar;
  1176.  
  1177. cmchar "The Reversed inverted letter G";
  1178. beginchar(oct"141",12u#,cap_height#,0);
  1179.  italcorr cap_height#*slant-.5u#; adjust_fit(0,0);
  1180.  pickup rule.nib; 
  1181.  rt x1=hround(w-1.35u); x2=x4=.5w+u;
  1182.  lft x3=hround max(u,2u-.5cap_curve); rt x5=hround(w-1.2u);
  1183.  top y1=vround .93h+o; top y2=h+o; y3=.5h;
  1184.  bot y4=-o; bot y5=vround .07h-o;
  1185.  draw z1...{left}z2...{down}z3{down}...{right}z4...{up}z5;
  1186.  z7=z5; x0=x7; top y0=1+vround .35[bar_height,x_height];
  1187.  draw z0--z7;     % stem
  1188.  z0=z9; y8=y9; lft x8=hround x4;
  1189.  draw z8--z9;     % bar
  1190.  math_fit(-.3cap_height#*slant-.5u#,.5ic#); 
  1191. picture rvchar;
  1192.  rvchar=currentpicture  reflectedabout((.5w,0),(.5w,h));
  1193. currentpicture:= rvchar; 
  1194. penlabels(0,1,1',2,3,4,5,6,7,8,9); endchar;
  1195.  
  1196. cmchar "Upsidedown, uppercase Greek Omega";
  1197. beginchar(oct"146",13u#,cap_height#,0);
  1198. italcorr .75cap_height#*slant-.5u#;
  1199. adjust_fit(0,0);
  1200. pickup tiny.nib; pos1(vair,90); pos2(cap_curve,180);
  1201. pos3(vair,180); pos4(cap_curve,0); pos5(vair,0);
  1202. x1=.5w; top y1r=h+o; lft x2r=hround u; y2=y4=2/3h; x4=w-x2;
  1203. rt x3l=hround(1/3(w+.5u)+.5hair); bot y3=bot y5=0; x5=w-x3;
  1204. filldraw stroke z3e{up}...{up}z2e
  1205.  & pulled_super_arc.e(2,1)(.5superpull)
  1206.  & pulled_super_arc.e(1,4)(.5superpull)
  1207.  & z4e{down}...{down}z5e;  % bowl
  1208. numeric arm_thickness; path p; p=z3{up}...{up}z2;
  1209. arm_thickness=Vround(if hefty:slab+2stem_corr else:.75[slab,cap_vstem] fi);
  1210. pickup crisp.nib; pos6(arm_thickness,-90); pos7(fudged.hair,-180);
  1211. bot y6r=0; x6=x3; lft x7r=hround .8u; y7=good.y(y6l+.5beak)+eps;
  1212. (x,y)=p intersectionpoint((0,y6l)--(w,y6l)); x6l:=x;
  1213. arm(6,7,a,.5beak_darkness,-1.2beak_jut);  % left arm and beak
  1214. pos8(arm_thickness,-90); pos9(fudged.hair,0);
  1215. y8=y6; y9=y7; x8+x6=x9+x7=w; x8l:=w-x6l;
  1216. arm(8,9,b,.5beak_darkness,1.2beak_jut);  % right arm and beak
  1217. %math_fit(0,.5ic#);
  1218. picture v; v:=currentpicture; 
  1219. numeric t; t=h-d;
  1220. v:=v reflectedabout((0,0),(w,0));
  1221. currentpicture:=v shifted(0,cap_height);
  1222. penlabels(1,2,3,4,5,6,7,8,9); endchar;
  1223.  
  1224. cmchar "The letter Edh (Old English rune, like thorn)";
  1225. % adapted from cm partial differential sign, vol E, p 233.
  1226. beginchar(oct"147",10u#,asc_height#,0);
  1227. italcorr .7asc_height#*slant+.5curve#-1.5u#;
  1228. adjust_fit(0,0);
  1229. numeric top_thickness,bot_thickness,side_thickness,pull;
  1230. top_thickness=max(fine.breadth,vround(slab-2vair_corr));
  1231. bot_thickness=max(fine.breadth,vround(slab-vair_corr));
  1232. side_thickness=max(fine.breadth,hround 1/3[curve,cap_curve]);
  1233. pull=min(.25,1.5superpull);
  1234. pickup fine.nib; pos2(top_thickness,90);
  1235. pos3(side_thickness,0); pos4(bot_thickness,-90);
  1236. pos5(side_thickness,-180); pos6(vair,-270);
  1237. lft x5r=w-rt x3r=hround max(.75u,1.5u-.5side_thickness);
  1238. x4=x6+.1u=x2+u=.5w;
  1239. top y2r=h+o; y3=.5[y2,y4]; bot y4r=-o;
  1240. y5=.5[y4,y6]; top y6=vround 5/8h+o;
  1241. path p; p=pulled_super_arc.l(3,4)(pull);
  1242. numeric t; t=xpart(p intersectiontimes((x3r,y5)--(x4,y5)));
  1243. pos7(thin_join,0); z7l=point t of p;
  1244. (x,y6r)=whatever[z7l,z6l]; x6r:=max(x,.5[x5r,x6]);
  1245. x2:=x5; x2l:=x2r:=x2;
  1246. filldraw stroke pulled_super_arc.e(2,3)(pull)
  1247.  & {{interim superness:=more_super; pulled_super_arc.e(3,4)(pull)}}
  1248.  & {{less_tense; pulled_super_arc.e(4,5)(pull) & pulled_super_arc.e(5,6)(pull)}}
  1249.  & z6e{right}...{direction t of p}z7e;  % arc and bowl
  1250. %pos1(hair,180); pos0(flare,180); % commenting out the arc and bulb
  1251. %lft x0r=min(lft x2-eps,hround 1.2u);
  1252. %y0=vround min(.85h-.5flare,.8h+.5flare)+o;
  1253. %{{less_tense; bulb(2,1,0)}};  % arc and bulb
  1254. %math_fit(-.3x_height#*slant+.5curve#-u#,ic#-u#);
  1255. pickup pencircle xscaled 1.4rule_thickness yscaled .5rule_thickness;
  1256. x10=x11=x5; x12=x13=w-x10; y10=y13;
  1257. y10-y11=y12-y13=cap_stem; .5[y11,y10]=.5[y6,y2];
  1258. draw z10--z11--z12--z13; % cross piece
  1259. penlabels(2,3,4,5,6,7,10,11,12,,13); endchar;
  1260.  
  1261. cmchar "Equal or similar symbol";
  1262. compute_spread(.45x_height#,.55x_height#);
  1263. beginchar(oct"150",14u#,v_center(2spread#+rule_thickness#));
  1264. adjust_fit(0,0);
  1265. pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness;
  1266. if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
  1267. lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1;
  1268. bot y1=bot y3=-d; top y2=top y4=y1+spread;
  1269. draw z1{up}...z2{right}..{right}z3...{up}z4;  % stroke
  1270. pickup rule.nib;
  1271. lft x5=hround u-eps; x6=w-x5; top y5=top y6=h;
  1272. draw z5--z6;
  1273. labels(1,2,3,4,5,6); endchar;
  1274.  
  1275.  
  1276. %% parameters for Hebrew letters Beth, Gimel, Dalet
  1277. numeric theta; theta=45;
  1278. cmchar "Hebrew letter Beth";
  1279. beginchar(oct"151", 12u#, asc_height#, 0);
  1280. %currenttransform:=identity rotated -45 shifted (.75h, 0); 
  1281. adjust_fit(0,0); 
  1282. pickup rule.nib; 
  1283. top y0=1.1h; lft x0=u; 
  1284. pos1(cap_curve,90); x1=2.5u; y1r=h;
  1285. pos2(cap_curve,90); x2=w-x1; y2r=y1r;
  1286. rt x3=w-u; y2l-y3=y0-y1r;
  1287. x4=x3;
  1288. % now for the base.
  1289. pos12(cap_curve/cosd theta, theta); pos11(cap_curve/cosd theta, theta);
  1290. y11r=y12r=y4; y11l=0;
  1291. x12=u; x11=w-x12;
  1292. filldraw z0{down}..tension.8..z1l{right}..{right}z2l..{down}z3&
  1293. z3{up}..tension.8..z2r{left}..{left}z1r..z0..cycle; % top
  1294. pickup rule.nib; draw z3..z4; % down stroke at right of letter
  1295. filldraw stroke z11e{left}..{left}z12e;
  1296. penlabels(0,1,2,3,4,11,12);
  1297. endchar;
  1298.  
  1299. cmchar "Hebrew letter Gimel";
  1300. beginchar(oct"152", 8u#, asc_height#, 0);
  1301. %currenttransform:=identity rotated -45 shifted (.75h, 0); 
  1302. adjust_fit(0,0); 
  1303. pickup rule.nib; 
  1304. top y0=1.1h; lft x0=u; 
  1305. pos1(cap_curve,90); x1=2.5u; y1r=h;
  1306. pos2(cap_curve,90); x2=w-x1+.5u; y2r=y1r;
  1307. filldraw z0{down}..tension.8..z1l{right}..{right}z2l..tension.8..{left}z2r
  1308.   ..{left}z1r..z0..cycle; % top slab
  1309. z3=z2l;x4=x3+.2stem; y4=-o; x5=x4+.3stem; y5=y3c;
  1310. x3a=x3b=x3c=x3; y3a=.8h; y3b=.5h; y3c=cap_curve;
  1311. y5:=.5y5; % reset y5
  1312. path p, q; p=(z3---z3c..z4); q=(z4{1,1}..z5..{-.005,1}z3); % vertical
  1313. filldraw p&q&cycle;
  1314. % now for the base.
  1315. pos12(cap_curve/cosd theta, theta); pos11(cap_curve/cosd theta, theta);
  1316. pos13(cap_curve/cosd theta, theta); y13=y12; x13=w;
  1317.   % z13 is a dummy point for getting intersection
  1318. y11r=y12r; y11l=0;
  1319. x12=u; 
  1320. z10=p intersectionpoint (z12r--z13r); z11r=z10;
  1321. filldraw stroke z11e{left}..{left}z12e;
  1322. penlabels(0,1,2,3,3c,4,5,11,12);
  1323. endchar;
  1324.  
  1325. cmchar "Hebrew letter Daleth";
  1326. beginchar(oct"153", 12u#, asc_height#, 0);
  1327. %currenttransform:=identity rotated -45 shifted (.75h, 0); 
  1328. adjust_fit(0,0); 
  1329. pickup rule.nib; 
  1330. top y0=1.1h; lft x0=u; 
  1331. pos1(cap_curve,90); x1=2.5u; y1r=h;
  1332. pos2(cap_curve,90); x2=w-x1+.5u; y2r=y1r;
  1333. filldraw z0{down}..tension.8..z1l{right}..{right}z2l..tension.8..{left}z2r
  1334.   ..{left}z1r..z0..cycle; % top slab
  1335. z3=z2l;x4=x3+.2stem; y4=-o; x5=x4+.3stem; y5=y3c;
  1336. x3a=x3b=x3c=x3; y3a=.8h; y3b=.5h; y3c=cap_curve;
  1337. y5:=.5y5; % reset y5
  1338. path p, q; p=(z3---z3c..z4); q=(z4{1,1}..z5..{-.005,1}z3); % vertical
  1339. filldraw p&q&cycle;
  1340. penlabels(0,1,2,3,3c,4,5);
  1341. endchar;
  1342.  
  1343. cmchar "Dotted less than sign";
  1344. compute_spread(5/4x_height#,3/2x_height#);
  1345. beginchar(oct"154",14u#,v_center(spread#+rule_thickness#));
  1346. italcorr h#*slant-u#;
  1347. adjust_fit(0,0); pickup rule.nib;
  1348. lft x2=hround 1.5u-eps; x1=x3=w-x2;
  1349. y1-y3=spread; y2=.5[y1,y3]=math_axis;
  1350. draw z1--z2--z3;  % diagonals
  1351. y4=y2; x4=.75[x2, x1]; z5=z4;
  1352. pos4(dot_size,0); pos5(dot_size,90); dot(4,5);
  1353. labels(1,2,3,4,5); endchar;
  1354.  
  1355. cmchar "Dotted greater than sign";
  1356. compute_spread(5/4x_height#,3/2x_height#);
  1357. beginchar(oct"155",14u#,v_center(spread#+rule_thickness#));
  1358. italcorr math_axis#*slant-u#;
  1359. adjust_fit(0,0); pickup rule.nib;
  1360. rt x2=hround(w-1.5u)+eps; x1=x3=w-x2;
  1361. y1-y3=spread; y2=.5[y1,y3]=math_axis;
  1362. draw z1--z2--z3;  % diagonals
  1363. y4=y2; x4=.75[x2, x1]; z5=z4;
  1364. pos4(dot_size,0); pos5(dot_size,90); dot(4,5);
  1365. labels(1,2,3,4,5); endchar;
  1366.               
  1367. cmchar "Times operator with left vertical";
  1368. beginarithchar(oct"156"); pickup rule.nib;
  1369. x1=good.x(1/sqrt2)[.5w,rt u]; y1=good.y(1/sqrt2)[math_axis,bot h];
  1370. x2=x3=w-x1; x4=x1; .5[y1,y2]=.5[y3,y4]=math_axis; y2=y4;
  1371. draw z1--z2; draw z3--z4;  % diagonals
  1372. draw z1--z4;
  1373. labels(1,2,3,4); endchar;
  1374.  
  1375. cmchar "Times operator with right vertical";
  1376. beginarithchar(oct"157"); pickup rule.nib;
  1377. x1=good.x(1/sqrt2)[.5w,rt u]; y1=good.y(1/sqrt2)[math_axis,bot h];
  1378. x2=x3=w-x1; x4=x1; .5[y1,y2]=.5[y3,y4]=math_axis; y2=y4;
  1379. draw z1--z2; draw z3--z4;  % diagonals
  1380. draw z2--z3;
  1381. labels(1,2,3,4); endchar;
  1382.  
  1383. cmchar "Cute vertical bar";
  1384. beginchar(oct"160",4u#,6u#+math_axis#,6u#-math_axis#);
  1385. italcorr math_axis#*slant - .5u#;
  1386. adjust_fit(0,0); pickup rule.nib;
  1387. x1=x2=hround(w/2); top y1=x_height; bot y2=-o;
  1388. draw z1--z2;
  1389. labels(1,2); endchar;
  1390.  
  1391. cmchar "Two cute vertical bars";
  1392. beginchar(oct"161",7u#,6u#+math_axis#,6u#-math_axis#);
  1393. italcorr math_axis#*slant - .5u#;
  1394. adjust_fit(0,0); pickup rule.nib;
  1395. lft x1=u; x2=x1; top y1=x_height; bot y2=-o;
  1396. x3=w-x1; x4=x3; y3=y1; y4=y2;
  1397. draw z1--z2; draw z3--z4;
  1398. labels(1,2,3,4); endchar;
  1399.  
  1400. cmchar "Integer division (reverse quotient) symbol";
  1401. beginarithchar(oct"162"); pickup rule.nib;
  1402. x1=2u; top y1=x_height;%
  1403. x2=x3=w-x1; x4=x1; bot y2=-o;
  1404. draw z1--z2;  % diagonal
  1405. labels(1,2,3,4); endchar;
  1406.  
  1407.  
  1408. cmchar "Thick similarity sign";% taken from symbol.mf
  1409. compute_spread(.45x_height#,.55x_height#);
  1410. beginchar(oct"163",14u#,v_center(spread#+rule_thickness#));
  1411. adjust_fit(0,0);
  1412. pickup pencircle xscaled .8rule_thickness yscaled 1.87rule_thickness;
  1413. if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
  1414. lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1;
  1415. bot y1=bot y3=-d; top y2=top y4=h;
  1416. draw z1{up}...z2{right}..{right}z3...{up}z4;  % stroke
  1417. labels(1,2,3,4); endchar;
  1418.  
  1419.  
  1420. cmchar "Approximate equality sign"; % taken fron symbol.mf
  1421. compute_spread(.45x_height#,.55x_height#);
  1422. spread#':=spread#; spread':=spread; % the spread of `$=$'
  1423. compute_spread(.54x_height#,.66x_height#);
  1424. beginchar(oct"164",14u#,v_center(spread#'+spread#+rule_thickness#));
  1425. adjust_fit(0,0);
  1426. pickup pencircle xscaled .8rule_thickness yscaled 1.87rule_thickness;
  1427. if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
  1428. lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1;
  1429. y1=y3; top y2=top y4=h; top y2-bot y1=spread';
  1430. draw z1{up}...z2{right}..{right}z3...{up}z4;  % upper stroke
  1431. z1-z5=z2-z6=z3-z7=z4-z8=(0,spread);
  1432. draw z5{up}...z6{right}..{right}z7...{up}z8;  % lower stroke
  1433. labels(1,2,3,4,5,6,7,8); endchar;
  1434.  
  1435. cmchar "Approximate equality plus lower bar sign";
  1436. compute_spread(.45x_height#,.55x_height#);
  1437. spread#':=spread#; spread':=spread; % the spread of `$=$'
  1438. compute_spread(.54x_height#,.66x_height#);
  1439. beginchar(oct"165",14u#,v_center(2spread#'+spread#+rule_thickness#));
  1440. adjust_fit(0,0);
  1441. pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness;
  1442. if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
  1443. lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1;
  1444. y1=y3; top y2=top y4=h; top y2-bot y1=spread';
  1445. draw z1{up}...z2{right}..{right}z3...{up}z4;  % upper stroke
  1446. z1-z5=z2-z6=z3-z7=z4-z8=(0,spread);
  1447. draw z5{up}...z6{right}..{right}z7...{up}z8;  % lower stroke
  1448. y9=y10; x9=x1; x10=x8; y5-y9=spread';
  1449. pickup rule.nib; draw z9--z10;
  1450. labels(1,2,3,4,5,6,7,8,9,10); endchar;
  1451.  
  1452.  
  1453. cmchar "Follows with approximate equality sign";
  1454. compute_spread(.45x_height#,.55x_height#);
  1455. spread#':=spread#; spread':=spread; % the spread of `$=$'
  1456. compute_spread(.54 x_height#,.66 x_height#);
  1457. spread#'':=spread#; spread'':=spread; % the spread of `$=$'
  1458. compute_spread(1.111 x_height#,1.333 x_height#);
  1459. beginchar(oct"166",14u#,v_center(2spread#''+spread#+2rule_thickness#));
  1460. adjust_fit(0,0);
  1461. % now for follow sign, using z9 (top), z10 (vertex), & z11 (bot)
  1462. pickup rule.nib;
  1463. lft x9 = hround 1.5u-eps; x10=w-x9; x11=x9;
  1464. y9-y11=spread; top y9=h; y10=.5[y11, y9];
  1465. draw z9{u,-spread}...{right}z10; 
  1466. draw z11{u,spread}...{right}z10;
  1467. pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness;
  1468. if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
  1469. lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1;
  1470. top y1=top y3=bot y11-spread''; top y2=top y4=bot y1+spread';
  1471. z1-z5=z2-z6=z3-z7=z4-z8=(0,spread'');
  1472. draw z1{up}...z2{right}..{right}z3...{up}z4;  % upper stroke
  1473. draw z5{up}...z6{right}..{right}z7...{up}z8;  % lower stroke
  1474. labels(1,2,3,4,5,6,7,8,9,10,11); endchar;
  1475.  
  1476. cmchar "Precedes with approximate equality sign";
  1477. compute_spread(.45x_height#,.55x_height#);
  1478. spread#':=spread#; spread':=spread; % the spread of `$=$'
  1479. compute_spread(.54x_height#,.66x_height#);
  1480. spread#'':=spread#; spread'':=spread; % the spread of `$=$'
  1481. compute_spread(1.111 x_height#,1.333 x_height#);
  1482. beginchar(oct"167",14u#,v_center(spread#+2spread#''+2rule_thickness#));
  1483. adjust_fit(0,0);
  1484. % now for precedes sign, using z9 (top), z10 (vertex), & z11 (bot)
  1485. pickup rule.nib; 
  1486. x9=x11=w-x10; lft x10=hround 1.5u-eps; 
  1487. y9-y11=spread; top y9=h; y10=.5[y11, y9];
  1488. draw z9{-u,-spread}...{left}z10; 
  1489. draw z11{-u,spread}...{left}z10;
  1490. pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness;
  1491. if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
  1492. lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1;
  1493. top y3=top y1=bot y11-spread''; top y2=top y4=bot y1+spread';
  1494. z1-z5=z2-z6=z3-z7=z4-z8=(0,spread'');
  1495. draw z1{up}...z2{right}..{right}z3...{up}z4;  % upper stroke
  1496. draw z5{up}...z6{right}..{right}z7...{up}z8;  % lower stroke
  1497. labels(1,2,3,4,5,6,7,8,9,10,11); endchar;
  1498.  
  1499. cmchar "Arch with left downward arrowhead";
  1500. beginchar(oct"170",18u#,x_height#,0);
  1501. adjust_fit(0,0); pickup crisp.nib;
  1502. pos1(rule_thickness,0); pos2(rule_thickness,0);
  1503. pos3(bar,90); pos4(bar,90);
  1504. lft x1l=hround(.5w-.5rule_thickness); y1+.5rule_thickness=h;
  1505. x0=x1=x2; bot y0=-d; x0-x3=x4-x0=3u+eps;
  1506. y3=y4=y0+.24asc_height+eps;
  1507. pos5(bar,angle(z4-z0)); z5l=z0;
  1508. pos6(bar,angle(z3-z0)); z6l=z0;
  1509. z9=.381966[.5[z3,z4],z0];
  1510. numeric t; path p; p=z4r{z9-z4}..z6r;
  1511. t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p;
  1512. 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
  1513. x9:=x9-5.5u;
  1514. filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
  1515.  --z2r---z2l--subpath (t,0) of\\(z3r{z9-z3}..z5r)
  1516.  --z3l{z9-z3}..z0 & cycle;  % arrowhead
  1517. % arch represented by z2, z11 (top) z12
  1518. rt x12=w-1u; bot y12=y0; top y11=h+o; x11=.5[x2, x12];
  1519. pickup rule.nib; draw z2{up}...{right}z11...{down}z12;
  1520. penlabels(0,1,2,3,4,5,6,9,11,12); endchar;
  1521.  
  1522. cmchar "Arch with right downward arrowhead";
  1523. beginchar(oct"171",18u#,x_height#,0);
  1524. adjust_fit(0,0); pickup crisp.nib;
  1525. pos1(rule_thickness,0); pos2(rule_thickness,0);
  1526. pos3(bar,90); pos4(bar,90);
  1527. lft x1l=hround(.5w-.5rule_thickness); y1+.5rule_thickness=h;
  1528. x0=x1=x2; bot y0=-d; x0-x3=x4-x0=3u+eps;
  1529. y3=y4=y0+.24asc_height+eps;
  1530. pos5(bar,angle(z4-z0)); z5l=z0;
  1531. pos6(bar,angle(z3-z0)); z6l=z0;
  1532. z9=.381966[.5[z3,z4],z0];
  1533. numeric t; path p; p=z4r{z9-z4}..z6r;
  1534. t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p;
  1535. 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
  1536. x9:=x9+5.5u;
  1537. filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
  1538.  --z2r---z2l--subpath (t,0) of\\(z3r{z9-z3}..z5r)
  1539.  --z3l{z9-z3}..z0 & cycle;  % arrowhead
  1540. % arch represented by z2, z11 (top) z12 (right)
  1541. lft x12=u; bot y12=y0; top y11=h+o; x11=.5[x2, x12];
  1542. pickup rule.nib; draw z2{up}...{left}z11...{down}z12;
  1543. penlabels(0,1,2,3,4,5,6,9,11,12); endchar;
  1544.  
  1545. cmchar "Stylized F";
  1546. beginarithchar(oct"172");
  1547. pickup pencircle xscaled 2.5rule_thickness yscaled .5rule_thickness;
  1548. bot y1=-d; top y2=top y3=h+o; y4=y5=.5[y1, y2]; lft x1=u; x3=w-x1;
  1549. numeric t; t=4; % t=slope of thck stem
  1550. y2-y1=t*(x2-x1); 
  1551. z4=whatever[z1, z2]; x5-x4=.6(x3-x2);
  1552. draw z1--z2--z3; draw z4--z5;
  1553. penlabels(1,2,3,4,5); endchar;
  1554.  
  1555. transform tt; tt:=currenttransform;
  1556. currenttransform:=identity slanted 1/4;
  1557. cmchar "Lowercase variation of Greek kappa";
  1558. % will use same dimensions as standard Greek lowercase kappa
  1559. % see vol E, p 155.
  1560. beginchar(oct"173", 12u#, x_height#, 0);
  1561. italcorr 1/3x_height#*slant+.5hair#+.5u#;
  1562. adjust_fit(0,0); pickup rule.nib;
  1563. pos1(stem,0); pos2(stem,0);x1l=hround(2u-.5stem); x2r=w-x1l;
  1564. top y2+.3stem=h+oo; bot y1-.3stem=-oo;
  1565. filldraw z1l---z2l...z2r---z1r...cycle;
  1566. pickup crisp.nib;
  1567. pos3(hair,180); x3=lft x1l; y3=3/4h; pos4(stem,90); 
  1568. top y4r+.15stem=h+oo; x4-x3=.05[x1,x2]; 
  1569. pos4'(hair,0); y4'=y3; x4'=1/4[x1,x2];
  1570. pos5(hair,90); z5=z1; 
  1571. filldraw super_arc.r(3,4)&super_arc.r(4,4')...{z1-z2}z5&z5{z2-z1}
  1572. ...super_arc.l(4',4)&super_arc.l(4,3)---cycle; % left arm
  1573. pos8(hair,-90); pos6(hair,0);                     
  1574. z8=z2; pos7(stem, -90); bot y7r-.15stem=-oo; x6-x7=x4-x3;
  1575. x6=w-x3; 
  1576. pos7'(hair,180); y7'=y6; x7'=w-x4';
  1577. y6=h-y3;
  1578. filldraw super_arc.r(6,7)&super_arc.r(7,7')...{z2-z1}z8&z8{z1-z2}
  1579. ...super_arc.l(7',7)&super_arc.l(7,6)---cycle; % right arm
  1580. %filldraw z8{z1-z2}..z7l...{up}z6r---z6l{-u,-2u}...z7r..{z2-z1}z8---cycle; %right arm
  1581. penlabels(range 1 thru 8,4'); endchar;
  1582.  
  1583. cmchar "H-bar symbol, slanted bar";
  1584. beginchar(oct"175",9u#,asc_height#,0);
  1585. italcorr 1/3x_height#*slant+.5hair#+.5u#;
  1586. adjust_fit(0,0); pickup tiny.nib;
  1587. pos1(stem,0); pos2(stem,0); x1=x2;
  1588. lft x1l=hround(1.5u-.5stem); top y1=h; y2-.5stem=-oo;
  1589. filldraw circ_stroke z2e--z1e;  % left stem
  1590. sloped_serif.l(1,2,a,1/3,jut,serif_drop);  % serif
  1591. pickup fine.nib; x4+.5stem=hround(w-2.5u+.5stem);
  1592. x5=x4-.25u; ital_arch(2,3,4);  % arch
  1593. x7=w; hook_out(5,6,7)(skewed);  % closing hook
  1594. filldraw stroke z4e{down}..{-u,-x_height}z5e;  % right stem
  1595. pickup light_rule.nib;
  1596. x8=x.a2; y8=.7h; x9=x4l; y9=7/8h;
  1597. draw z8--z9;
  1598. math_fit(0,ic#); penlabels(1,2,3,4,5,6,7,8,9); endchar;
  1599.  
  1600. cmchar "H-bar symbol, vertical bar";
  1601. beginchar(oct"176",9u#,asc_height#,0);
  1602. italcorr 1/3x_height#*slant+.5hair#+.5u#;
  1603. adjust_fit(0,0); pickup tiny.nib;
  1604. pos1(stem,0); pos2(stem,0); x1=x2;
  1605. lft x1l=hround(1.5u-.5stem); top y1=h; y2-.5stem=-oo;
  1606. filldraw circ_stroke z2e--z1e;  % left stem
  1607. sloped_serif.l(1,2,a,1/3,jut,serif_drop);  % serif
  1608. pickup fine.nib; x4+.5stem=hround(w-2.5u+.5stem);
  1609. x5=x4-.25u; ital_arch(2,3,4);  % arch
  1610. x7=w; hook_out(5,6,7)(skewed);  % closing hook
  1611. filldraw stroke z4e{down}..{-u,-x_height}z5e;  % right stem
  1612. pickup light_rule.nib;
  1613. x8=x.a2; y8=y9=.81h; rt x9=x4l; draw z8--z9;
  1614. math_fit(0,ic#); penlabels(1,2,3,4,5,6,7,8,9); endchar;
  1615.  
  1616. cmchar "Reversed, reflected, lowercase Greek epsilon";
  1617. beginchar(oct"177",8u#,x_height#,0);
  1618. italcorr x_height#*slant+.5hair#-2u#;
  1619. adjust_fit(0,0); pickup fine.nib;
  1620. pos0(bar,90); pos1(bar,90); pos2(curve,180);
  1621. pos3(vair,270); pos4(hair,300); pos6(bar,90); pos7(bar,90);
  1622. x1=.5w+.5u; x0=x1+u; lft x2r=hround(1.5u-.5curve); x3=.5[x0,x1];
  1623. x4r=good.x(w-u); x5=w+.5u; x6=x0; z7=z2l;
  1624. top y0r=top y1r=h; y2=y5=y6=bar_height; bot y3r=-oo;
  1625. path p; p=z3r{right}...{up}z5;
  1626. numeric t; t=ypart(((x4r,y3r)--(x4r,y5))intersectiontimes p);
  1627. y4r=ypart point t of p;
  1628. filldraw circ_stroke z0e..pulled_arc.e(1,2) & pulled_arc.e(2,3)
  1629.  ...z4e{direction t of p};  % arc
  1630. filldraw circ_stroke z6e--z7e;  % bar
  1631. math_fit(-.3x_height#*slant+.5curve#-u#,ic#);
  1632. picture v;
  1633. v:=currentpicture; 
  1634. v:=v reflectedabout((0,h/2),(w,h/2)); 
  1635. v:=v reflectedabout((w/2,-d),(w/2,h)); 
  1636. currentpicture:=v shifted (2u,0);
  1637. penlabels(0,1,2,3,4,5,6,7); endchar;
  1638.  
  1639. currenttransform:=tt; %restore currenttrnasform
  1640.  
  1641.