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 / asymbols.mf < prev    next >
Text File  |  1996-10-12  |  75KB  |  1,955 lines

  1. %% @metafontfile{
  2. %%     filename="asymbols.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="1960",
  24. %%     keywords="amsfonts, tex, metafont , AMSSymbols ",
  25. %%     abstract="This is the driver file for use with 
  26. %%            MSAM, the first extra symbol font in AMSFonts 2.1."
  27. %%     }
  28. %
  29. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  30.  
  31. % Italic corrections have not been computed for most of these characters,
  32. % since they are generally not slanted.
  33.  
  34. % Changed some assignments for 
  35. %
  36. %   cmchar "Circle-R brand"
  37. %   cmchar "Circle-S brand"
  38. %
  39. % to avoid rounding problems and the differences in TFM files for
  40. % different magnifications
  41. %
  42. % Changed by Stefan Lindner 15.03.1991
  43. %
  44. %   original: radius=.5(6u++cap_height)+3u; radius=radius#*hppp;
  45. %   changed:  radius#=.5(6u#++cap_height#)+3u#; radius:=radius#*hppp;
  46. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  47.  
  48.  
  49.  
  50.  
  51. def makesquare (suffix i,j,k,l) = 
  52. %% z.j, z.k are the lower left and right corners 
  53. %%          assumed on baseline; ie, y.k=y.j=0 
  54. %% z.i, z.l are upper left and right corners 
  55. %% that is, start labeling with upper left corner, and 
  56. %% proceed to the successive corners counter-clockwise. 
  57. y.i-y.j=x.k-x.j; y.i:=good.y y.i+o; y.l=y.i 
  58. %% user must draw the square him/herself. 
  59. enddef; 
  60.  
  61.  
  62. cmchar "Square with dot";
  63. beginchar(oct"000",14u#,12u#,0);
  64. adjust_fit(0,0); pickup rule.nib;
  65. lft x1=hround 1.0u; x2=x1; x4=x5=w-x1;
  66. bot y2=0; y4=y2; 
  67. makesquare (1,2,4,5);  
  68. y3=good.y .5[y1,y2]; x3=good.x .5[x1,x5];
  69. draw z1---z2---z4---z5---cycle;  % square 
  70. fill fullcircle scaled dot_size shifted z3;  % dot 
  71. penlabels(1,2,3,4,5); endchar; 
  72.  
  73. cmchar "Square plus";
  74. beginchar(oct"001",14u#,12u#,0);
  75. adjust_fit(0,0); pickup rule.nib;
  76. lft x1=hround 1.0u; x2=x1; x4=x5=w-x1;
  77. bot y2=0; y4=y2; makesquare(1,2,4,5); 
  78. draw z1---z2---z4---z5---cycle;  % square 
  79. x6=x1; x7=x4; y6=.5[y1,y2]; y7=y6; % cross strut 
  80. y8=y1; y9=y2; x8=.5[x1, x5]; x9=x8; % vertical strut 
  81. draw z6---z7; draw z8---z9; % plus 
  82. penlabels(1,2,4,5,6,7,8,9); endchar; 
  83.  
  84. cmchar "Square times";
  85. beginchar(oct"002",14u#,12u#,0);
  86. adjust_fit(0,0); pickup rule.nib;
  87. lft x1=hround 1.0u; x2=x1; x4=x5=w-x1;
  88. bot y2=0; y4=y2; makesquare(1,2,4,5); 
  89. draw z1---z2---z4---z5---cycle;  % square 
  90. draw z1---z4; draw z2---z5;  % diagonals 
  91. penlabels(1,2,4,5); endchar; 
  92.  
  93. cmchar "Square";  
  94. beginchar(oct"003",14u#,12u#,0); 
  95. adjust_fit(0,0); pickup rule.nib;  
  96. lft x1=hround 1.0u; x2=x1; 
  97. x4=x5=w-x1; 
  98. bot y2=0; y4=y2; makesquare(1,2,4,5); 
  99. draw z1---z2---z4---z5---cycle;  % square 
  100. penlabels(1,2,4,5); endchar; 
  101.  
  102. cmchar "Filled square";
  103. beginchar(oct"004",14u#,12u#,0);
  104. adjust_fit(0,0); pickup rule.nib;
  105. lft x1=hround 1.0u; x2=x1; x4=x5=w-x1;
  106. bot y2=0; y4=y2; makesquare(1,2,4,5); 
  107. filldraw z1---z2---z4---z5---cycle;  % square 
  108. penlabels(1,2,4,5); endchar; 
  109.  
  110. cmchar "Small filled square"; 
  111. beginchar(oct"005",5u#,.8asc_height#,0); 
  112. adjust_fit(0,0); pickup rule.nib; 
  113. lft x1=hround 1.0u; x2=x1; x3=x4=w-x1; 
  114. bot y2=0; y3=y2; makesquare(1,2,3,4); 
  115. filldraw z1---z2---z3---z4---cycle;  % draw and fill square 
  116. penlabels(1,2,3,4); endchar; 
  117.  
  118.  
  119. cmchar "Diamond"; 
  120. beginchar(oct"006",12u#,asc_height#,2u#); 
  121. adjust_fit(0,0); pickup rule.nib; 
  122. %% z1, z2 are left & right vertices 
  123. %% z3, z4 are top and bottom points 
  124. lft x1=hround u; x2=w-x1; y1=y2; 
  125. x3=x4=.5[x1, x2]; bot y4=-d-o; top y3= good.y h+o; 
  126. y1=.5[y4,y3]; 
  127. draw z1---z3---z2---z4---cycle; % draw diamond 
  128. penlabels(1,2,3,4); endchar; 
  129.  
  130. cmchar "Filled Diamond"; 
  131. beginchar(oct"007",12u#,asc_height#,2u#); 
  132. adjust_fit(0,0); pickup rule.nib; 
  133. %% z1, z2 are left & right vertices 
  134. %% z3, z4 are top and bottom points 
  135. lft x1=hround u; x2=w-x1; y1=y2; 
  136. x3=x4=.5[x1, x2]; bot y4=-d-o; top y3= good.y h+o; 
  137. y1=.5[y4,y3]; 
  138. filldraw z1---z3---z2---z4---cycle; % draw diamond 
  139. penlabels(1,2,3,4); endchar; 
  140.  
  141. % do char "011 before char "010. 
  142. cmchar "Counter-clockwise-circle indicator"; 
  143. beginarithchar(oct"011"); pickup light_rule.nib; 
  144. autorounded; lft x6=hround u; x2=w-x6;  
  145. y2=math_axis; top y8=h; 
  146. circle_points; % define points on circumference 
  147. %% see page 487 of vol E 
  148. path p; numeric t; 
  149. p=z8{right}...z1{z2-z8}...z2{down}...z3{z4-z2}...z4{left} 
  150.  ...z5{z6-z4}...z6{up}...z7{z8-z6}...cycle; 
  151. t=xpart(p intersectiontimes ((4.5u,0)--(4.5u,y8))); 
  152. draw subpath (0,t) of p; % circle with gap 
  153. z0=.5[z5,z1]; % the origin of the circle 
  154. %% Now prepare for left arrowhead--see pg E465 
  155. pickup crisp.nib; 
  156. pos12(rule_thickness,90); pos13(bar,0); pos14(bar,0); 
  157. y10=y12=y8; lft x10=hround x8; 
  158. y13-y10=y10-y14=.19asc_height+eps; x13=x14=x10+3u+eps; 
  159. pos15(bar,angle(z14-z10)); z15l=z10; 
  160. pos16(bar,angle(z13-z10)); z16l=z10; 
  161. z19=.38[.5[z13,z14],z10]; 
  162. numeric t; path p; % re-use t, p 
  163. p=z14r{z19-z14}..z16r; 
  164. t=xpart(p intersectiontimes((0,y12l)--(w,y12l)));  
  165. x12=xpart point t of p; 
  166. path p; 
  167. p=z10..{z14-z19}z14l--subpath(0,t) of 
  168. (z14r{z19-z14}..z16r)--z12l--z12r 
  169. --subpath(t,0) of (z13r{z19-z13}..z15r) 
  170. --z13l{z19-z13}..z10&cycle; % arrowhead 
  171. p:=p shifted -z8; % move back to origin 
  172. p:=p rotated -16; % rotate down a bit 
  173. p:=p shifted z8; % move back to tip of circle 
  174. filldraw  p; 
  175. penlabels(0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,19);  
  176. picture v; v:=currentpicture; endchar; 
  177.  
  178. cmchar "Clockwise-circle indicator"; 
  179. beginarithchar(oct"010");  
  180. currentpicture:=v reflectedabout ((w/2,0),(w/2,h)); 
  181. penlabels(0,1,2,3,5,6,7,8,9,10); endchar; 
  182.  
  183. cmchar "Left-Right Harpoons"; 
  184. compute_spread(.45x_height#,.55x_height#); 
  185. beginchar(oct"013",18u#,v_center(spread#+.48asc_height#));  
  186. path topleft; % for top left half arrow (harpoon) 
  187. adjust_fit(0,0);  
  188. pickup crisp.nib;  
  189. pos1(rule_thickness,90); pos2(rule_thickness,90); 
  190. pos3(bar,0); pos4(bar,0); y0=y1=y2=math_axis; 
  191. x1+.5rule_thickness=hround(w-u); lft x0=hround u; 
  192. y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; 
  193. pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); 
  194. z6l=z0; numeric t; path p; p=z4r..{2(x0-x4),y0-y4}z6r; 
  195. t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));  
  196. x2=xpart point t of p;  
  197. topleft=z0--(x0,y2l)---z1l..z1r---z2r 
  198.  ..subpath (t,0) of\\(z3r..{2(x0-x3),y0-y3}z5r) 
  199.  --z3l..{2(x0-x3),y0-y3}cycle;  % arrowhead and stem 
  200. topleft:= 
  201. topleft shifted (0,.5spread); % shift above math_axis 
  202. path botright; % for bottom right half arrow   
  203. botright:=topleft reflectedabout ((w/2,0),(w/2,h)); 
  204. botright:=botright reflectedabout 
  205. ((0,math_axis+eps),(w,math_axis+eps)); 
  206. filldraw topleft; filldraw botright; 
  207. penlabels(0,1,2,3,4,5,6); endchar;  
  208.  
  209. cmchar "Right-Left Harpoons"; 
  210. compute_spread(.45x_height#,.55x_height#); 
  211. beginchar(oct"012",18u#,v_center(spread#+.48asc_height#)); 
  212. path topright, botleft; 
  213. adjust_fit(0,0);  
  214. pickup crisp.nib;  
  215. topright:=topleft reflectedabout((w/2,0),(w/2,h)); 
  216. botleft:=botright reflectedabout((w/2,0),(w/2,h)); 
  217. filldraw topright; filldraw botleft; endchar; 
  218.  
  219. cmchar "Square minus"; 
  220. beginchar(oct"014",14u#,12u#,0); adjust_fit(0,0); 
  221. pickup rule.nib; lft x1=hround 1.0u; x2=x1; x4=x5=w-x1; bot 
  222. y2=0; y4=y2; makesquare(1,2,4,5); 
  223. draw z1---z2---z4---z5---cycle;  % square 
  224. x6=x1; x7=x4; y6=.5[y1,y2]; y7=y6; % cross strut 
  225. draw z6---z7;  % minus 
  226. penlabels(1,2,4,5,6,7); endchar;  
  227.  
  228. cmchar "Forces"; 
  229. beginchar(oct"015",13u#,asc_height#,0); 
  230. adjust_fit(0,0);; pickup rule.nib; 
  231. top y1=h; bot y2=0; y3=y4=good.y .5h; y5=y1; y6=y2; 
  232. lft x5=hround u; x4=w-x5;  
  233. compute_spread(.45x_height#,.55x_height#); 
  234. x1=x5+spread; x1=x2=x3; x6=x5; 
  235. draw z6--z5; draw z2--z1; draw z3--z4; 
  236. penlabels(1,2,3,4,5,6); endchar; 
  237.  
  238. cmchar "Forces with extra bar"; 
  239. beginchar(oct"016",16u#, asc_height#,0);  
  240. adjust_fit(0,0); pickup rule.nib; 
  241. compute_spread(.42x_height#,.52x_height#); 
  242. top y1=h; bot y2=0; y3=y4=good.y .5h; 
  243. y5=y7=y1; y6=y8=y2; lft x7=hround u; x4=w-x7; 
  244. x5=good.x x7+spread; x1=good.x x5+spread; 
  245. x1=x2=x3; x6=x5; x7=x8; 
  246. draw z7--z8; draw z5--z6; draw z1--z2; % verticals 
  247. draw z3--z4; % horizontal piece 
  248. penlabels(1,2,3,4,5,6,7,8); endchar; 
  249.  
  250. cmchar "Satisfies"; 
  251. beginchar(oct"017",11u#,asc_height#,0); 
  252. adjust_fit(0,0); pickup rule.nib; 
  253. compute_spread(.45x_height#,.55x_height#); 
  254. top y1=h; bot y2=0; y0=good.y .5[y1,y2];  
  255. y3=vround y0+.5spread; 
  256. y5=vround y0- .5spread; y4=y3; y6=y5;  
  257. lft x1=hround u; x4=w-x1; 
  258. x1=x2=x3=x5; x4=x6; x0=x1; 
  259. draw z1--z2; % vertical line 
  260. draw z3--z4; % draw top horizontal piece 
  261. draw z5--z6; % draw bottom horizontal piece 
  262. penlabels(0,1,2,3,4,5,6); endchar; 
  263.  
  264. cmchar "Rightward double arrowhead"; 
  265. compute_spread(.45x_height#,.55x_height#); 
  266. beginchar(oct"020",18u#,v_center(spread#+.48asc_height#)); adjust_fit(0,0); 
  267. pickup crisp.nib;  pos1(rule_thickness,90); pos2(rule_thickness,90); 
  268. pos3(bar,0); pos4(bar,0);  y0=y1=y2=math_axis; x1-.5rule_thickness=hround u;  
  269. rt x0=hround(w-u); y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps; 
  270. pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; 
  271. z9=.381966[.5[z3,z4],z0]; numeric t; path p; p=z4l{z9-z4}..z6r;  t=xpart(p 
  272. intersectiontimes((0,y2l)--(w,y2l)));  x2=xpart point t of p;  path p; 
  273. p=z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r) 
  274.  --z2l--z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r) 
  275.  --z3r{z9-z3}..z0 & cycle; 
  276. filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r) 
  277.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r) 
  278.  --z3r{z9-z3}..z0 & cycle;  % arrowhead and stem 
  279. filldraw p shifted (x3l-x0,0); 
  280. penlabels(0,1,2,3,4,5,6,9); endchar; 
  281.  
  282. cmchar "Leftward double arrowhead"; 
  283. compute_spread(.45x_height#,.55x_height#); 
  284. beginchar(oct"021",18u#,v_center(spread#+.48asc_height#)); 
  285. adjust_fit(0,0); pickup crisp.nib;  
  286. pos1(rule_thickness,90); pos2(rule_thickness,90); 
  287. pos3(bar,0); pos4(bar,0); y0=y1=y2=math_axis; 
  288. x1+.5rule_thickness=hround(w-u); lft x0=hround u; 
  289. y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; 
  290. pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); 
  291. z6l=z0; z9=.381966[.5[z3,z4],z0];  
  292. numeric t; path p;  
  293. p=z4r{z9-z4}..z6r;  
  294. t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));  
  295. x2=xpart point t of p;  
  296. path p; p=z0..{z4-z9}z4l--subpath (0,t) 
  297. of\\(z4r{z9-z4}..z6r) 
  298.  --z2l--z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r) 
  299.  --z3l{z9-z3}..z0 & cycle; % second arrowhead 
  300. filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r) 
  301.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r) 
  302.  --z3l{z9-z3}..z0 & cycle;  % arrowhead and stem  
  303. filldraw p shifted (x3r-x0,0); 
  304. penlabels(0,1,2,3,4,5,6,9); endchar;  
  305.  
  306. cmchar "Leftward double arrow"; 
  307. compute_spread(.45x_height#,.55x_height#); 
  308. beginchar(oct"022",18u#,v_center(spread#+.96asc_height#)); 
  309. adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,90); 
  310. pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); 
  311. y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft 
  312. x0=hround u; y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; 
  313. pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); 
  314. z6l=z0; z9=.381966[.5[z3,z4],z0]; numeric t; path p; 
  315. p=z4r{z9-z4}..z6r; t=xpart(p 
  316. intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;  
  317. path p; % re-use p 
  318. p=z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r) 
  319.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r) 
  320.  --z3l{z9-z3}..z0 & cycle;  % arrowhead and stem 
  321. p:=p shifted (0,y2-y4+eps); filldraw p; % top arrow 
  322. p:= p shifted (0,y4-y3-eps); filldraw p; % bottom arrow 
  323. penlabels(0,1,2,3,4,5,6,9); endchar; 
  324.  
  325. cmchar "Rightward double arrow"; 
  326. compute_spread(.45x_height#,.55x_height#); 
  327. beginchar(oct"023",18u#,v_center(spread#+.96asc_height#)); 
  328. adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,90); 
  329. pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); 
  330. y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt 
  331. x0=hround(w-u); y3-y0=y0-y4=.24asc_height+eps; 
  332. x3=x4=x0-3u-eps; pos5(bar,angle(z4-z0)); z5l=z0; 
  333. pos6(bar,angle(z3-z0)); z6l=z0; z9=.381966[.5[z3,z4],z0]; 
  334. numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p 
  335. intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; 
  336. path p; p=z0..{z4-z9}z4r--subpath (0,t) 
  337. of\\(z4l{z9-z4}..z6r) 
  338.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r) 
  339.  --z3r{z9-z3}..z0 & cycle;  % arrowhead and stem 
  340. p:=p shifted (0,y2-y4+eps); filldraw p; % top 
  341. p:=p shifted (0,y4-y3-eps); filldraw p; %bottom 
  342. penlabels(0,1,2,3,4,5,6,9); endchar; 
  343.  
  344. cmchar "Double upward arrow"; 
  345. beginchar(oct"024",15u#,asc_height#,asc_depth#); italcorr 
  346. .76asc_height#*slant+.5crisp#-u#; adjust_fit(0,0); pickup 
  347. crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0); 
  348. pos3(bar,90); pos4(bar,90); lft 
  349. x1l=hround(.5w-.5rule_thickness); y1-.5rule_thickness=-d; 
  350. x0=x1=x2; top y0=h; x0-x3=x4-x0=3u+eps; 
  351. y3=y4=y0-.24asc_height-eps; pos5(bar,angle(z4-z0)); z5l=z0; 
  352. pos6(bar,angle(z3-z0)); z6l=z0; z9=.381966[.5[z3,z4],z0]; 
  353. numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p 
  354. intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of 
  355. p; 
  356. path p; p=z0..{z4-z9}z4r--subpath (0,t) 
  357. of\\(z4l{z9-z4}..z6r) 
  358.  --z2r---z1r..z1l---z2l--subpath (t,0) of\\(z3l{z9-z3}..z5r) 
  359.  --z3r{z9-z3}..z0 & cycle;  % arrowhead and stem 
  360. p:=p shifted (x0-x4-eps,0); filldraw p; % left arrow 
  361. p:=p shifted (x4-x3+eps,0); filldraw p; 
  362. penlabels(0,1,2,3,4,5,6,9); endchar; 
  363.  
  364. cmchar "Double downward arrow"; 
  365. beginchar(oct"025",15u#,asc_height#,asc_depth#); 
  366. adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,0); 
  367. pos2(rule_thickness,0); pos3(bar,90); pos4(bar,90); lft 
  368. x1l=hround(.5w-.5rule_thickness); y1+.5rule_thickness=h; 
  369. x0=x1=x2; bot y0=-d; x0-x3=x4-x0=3u+eps; 
  370. y3=y4=y0+.24asc_height+eps; pos5(bar,angle(z4-z0)); z5l=z0; 
  371. pos6(bar,angle(z3-z0)); z6l=z0; z9=.381966[.5[z3,z4],z0]; 
  372. numeric t; path p; p=z4r{z9-z4}..z6r; t=xpart(p 
  373. intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of 
  374. p; 
  375. path p; p=z0..{z4-z9}z4l--subpath (0,t) 
  376. of\\(z4r{z9-z4}..z6r) 
  377.  --z2r---z1r..z1l---z2l--subpath (t,0) of\\(z3r{z9-z3}..z5r) 
  378.  --z3l{z9-z3}..z0 & cycle;  % arrowhead and stem  
  379. p:=p shifted (x0-x4-eps,0); filldraw p; % left arrow 
  380. p:=p shifted (x4-x3+eps,0); filldraw p; 
  381. penlabels(0,1,2,3,4,5,6,9); endchar; 
  382.  
  383. %%  
  384. cmchar "Upward rightward harpoon"; 
  385. beginchar(oct"026",7.5u#,asc_height#, asc_depth#); 
  386. %% see page E431 
  387. adjust_fit(0,0); pickup crisp.nib;  
  388. x0=x1=x2; lft x1l=hround(.5w-.5rule_thickness); 
  389. y1-.5rule_thickness=-d; pos1(rule_thickness,0); 
  390. pos2(rule_thickness,0); pos3(bar,-90); pos4(bar,-90); 
  391. top y0=vround h; 
  392. x3-x0=x0-x4=.24asc_height+eps; y3=y4=y0-3u-eps; 
  393. pos5(bar,angle(z4-z0)); z5l=z0; 
  394. pos6(bar,angle(z3-z0)); z6l=z0; 
  395. z9=.381966[.5[z3,z4],z0];
  396. numeric t; path p; 
  397. p=z4r..{y0-y4,2(x0-x4)}z6r; 
  398. t=xpart (p intersectiontimes ((x2l,0)--(x2l,h)));  
  399. y2=ypart point t of p; 
  400. filldraw z0--(x2l,y0)---z1l..z1r---z2r 
  401.   ..subpath(t,0) of (z3r..{x0-x3,2(y0-y3)}z5r) 
  402.   --z3l..{x0-x3,2(y0-y3)}cycle; 
  403. picture v; v:=currentpicture; 
  404. penlabels(0,1,2,3,4,5,6,9); endchar;  
  405.  
  406. cmchar "Downward rightward harpoon"; 
  407. beginchar(oct"027",7.5u#,asc_height#,asc_depth#); 
  408. adjust_fit(0,0);  
  409. currentpicture:=v 
  410. reflectedabout((0,.5(h-d)+eps),(w,.5(h-d)+eps)); 
  411. penlabels(0,1,2,3,4,5,6); endchar; 
  412.  
  413. cmchar "Upward leftward harpoon"; 
  414. beginchar(oct"030",7.5u#,asc_height#, asc_depth#); 
  415. adjust_fit(0,0); 
  416. currentpicture:= 
  417. v reflectedabout((w/2+eps,-d),(w/2+eps,h)); 
  418. picture v; v:=currentpicture; 
  419. penlabels(0,1,2,3,4,5,6); endchar; 
  420.  
  421. cmchar "Downward leftward harpoon"; 
  422. beginchar(oct"031",7.5u#,asc_height#,asc_depth#); 
  423. adjust_fit(0,0);  
  424. currentpicture:=v 
  425. reflectedabout((0,.5(h-d)+eps),(w,.5(h-d)+eps)); 
  426. penlabels(0,1,2,3,4,5,6); endchar; 
  427.  
  428. cmchar "Rightward arrow with tail"; 
  429. compute_spread(.45x_height#,.55x_height#); 
  430. beginchar(oct"032",20u#,v_center(spread#+.48asc_height#)); 
  431. adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,90); 
  432. pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); 
  433. y0=y1=y2=math_axis; x1-.5rule_thickness=hround 1.5u; rt 
  434. x0=hround(w-3u); y3-y0=y0-y4=.24asc_height+eps; 
  435. x3=x4=x0-3u-eps; pos5(bar,angle(z4-z0)); z5l=z0; 
  436. pos6(bar,angle(z3-z0)); z6l=z0; z9=.381966[.5[z3,z4],z0]; 
  437. numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p 
  438. intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; 
  439. path p; 
  440. p=z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r) 
  441.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r) 
  442.  --z3r{z9-z3}..z0 & cycle;  % arrowhead and stem 
  443. path arrow; 
  444. arrow=z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r) 
  445.  --z2l---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r) 
  446.  --z3r{z9-z3}..z0 & cycle;  
  447. p:=p shifted (2u,0); filldraw p; 
  448. arrow:=arrow shifted (-13u+bar,0); filldraw arrow; 
  449. penlabels(0,1,2,3,4,5,6,9); endchar; 
  450.  
  451. cmchar "Leftward arrow with tail"; 
  452. beginchar(oct"033",20u#,v_center(spread#+.48asc_height#)); 
  453. adjust_fit(0,0); pickup crisp.nib; 
  454. p:= p reflectedabout ((w/2+eps,-d),(w/2+eps,h)); 
  455. arrow:= arrow reflectedabout ((w/2+eps,-d),(w/2+eps,h)); 
  456. filldraw p; filldraw arrow; 
  457. penlabels(0,1,2,3,4,5,6,9); endchar; 
  458.  
  459. cmchar "Leftward-rightward parallel arrows"; 
  460. compute_spread(.45x_height#,.55x_height#); 
  461. beginchar(oct"034",18u#,v_center(spread#+.96asc_height#)); 
  462. adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,90); 
  463. pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); 
  464. y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft 
  465. x0=hround u; y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; 
  466. pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); 
  467. z6l=z0; z9=.381966[.5[z3,z4],z0]; numeric t; path p; 
  468. p=z4r{z9-z4}..z6r; t=xpart(p 
  469. intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;  
  470. path p, q; % re-use p 
  471. p=z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r) 
  472.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r) 
  473.  --z3l{z9-z3}..z0 & cycle;  % arrowhead and stem 
  474. p:=p shifted (0,.5[y3,y4]+eps); filldraw p; % top arrow 
  475. p:= p shifted (0,y4-y3);  
  476. q:= p reflectedabout ((w/2+eps,-d),(w/2+eps,h)); 
  477. p:=p shifted (0,y3-y4+eps); % restore p's position 
  478. filldraw q; % bottom arrow 
  479. penlabels(0,1,2,3,4,5,6,9); endchar; 
  480.  
  481. cmchar "Rightward-leftward parallel arrow"; 
  482. compute_spread(.45x_height#,.55x_height#); 
  483. beginchar(oct"035",18u#,v_center(spread#+.96asc_height#)); 
  484. adjust_fit(0,0); pickup crisp.nib;  
  485. p:=p reflectedabout ((w/2+eps,-d),(w/2+eps,h)); 
  486. q:=q reflectedabout ((w/2+eps,-d),(w/2+eps,h)); 
  487. filldraw p; filldraw q; 
  488. penlabels(0,1,2,3,4,5,6,9); endchar;  
  489.  
  490. cmchar "Leftward shift";  
  491. beginchar(oct"036",9u#,asc_height#, 0); 
  492. adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,90); 
  493. pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); 
  494. y0=y1=y2=.8h; x1+.5rule_thickness=hround(w-u); lft x0=hround 
  495. u; y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; 
  496. pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); 
  497. z6l=z0; z9=.381966[.5[z3,z4],z0]; 
  498. z10=z1; x11=x10; y11-.5rule_thickness =vround -d;  
  499. pos10(rule_thickness,0); pos11(rule_thickness,0); 
  500. numeric t; path p; p=z4r{z9-z4}..z6r;  
  501. t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));  
  502. x2=xpart point t of p;  
  503. path p;  
  504. p=z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r) 
  505. --z2l---(x10l,y1l)--z11l..z11r---{up}z10r..{left}z1r---z2r--subpath 
  506. (t,0) of\\(z3r{z9-z3}..z5r) 
  507.  --z3l{z9-z3}..z0 & cycle;  % arrowhead and bent stem 
  508. filldraw p; 
  509. penlabels(0,1,2,3,4,5,6,9,10); endchar; 
  510.  
  511. cmchar "Rightward shift";  
  512. beginchar(oct"037",9u#,asc_height#, 0); 
  513. adjust_fit(0,0); pickup crisp.nib;  
  514. p:=p reflectedabout((w/2+eps,-d),(w/2+eps,h)); 
  515. filldraw p; 
  516. penlabels(0,1,2,3,4,5,6,9); endchar; 
  517.  
  518. compute_spread(.45x_height#,.55x_height#); 
  519. cmchar "Rightward squiggly arrow";  
  520. beginchar(oct"040",18u#,v_center(spread# + 
  521. rule_thickness#)); 
  522. adjust_fit(0,0); pickup crisp.nib;  
  523. pos1(rule_thickness,90); pos2(rule_thickness,90); 
  524. pos3(bar,0); pos4(bar,0); y0=y1=y2=math_axis; 
  525. x1-.5rule_thickness=hround 11u; rt x0=hround(w-u); 
  526. y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps; 
  527. pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); 
  528. z6l=z0; z9=.381966[.5[z3,z4],z0];  
  529. numeric t; path p;  
  530. p=z4l{z9-z4}..z6r; t=xpart(p 
  531. intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;  
  532. path p; 
  533. p=z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r) 
  534.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r) 
  535.  --z3r{z9-z3}..z0 & cycle;  % arrowhead and stem 
  536. filldraw p; 
  537. %% now for squiggle              
  538. x12-x11=x13-x12=x14-x13=x15-x14=x16-x15=x1-x16; 
  539. x1-x11=hround (w-2u-x0+x1-.5rule_thickness); 
  540. y11=y13=y15=y0; y12=y16=.5[y0,y3]; 
  541. y14=.5[y4,y0];  
  542. pickup pencircle scaled rule_thickness; 
  543. draw z11---z12---z14---z16---z1; 
  544. penlabels(0,1,2,3,4,5,6,9,11,12,13,14,15,16); endchar; 
  545.  
  546. compute_spread(.45x_height#,.55x_height#); 
  547. cmchar "Leftward rightward squiggly arrow";  
  548. beginchar(oct"041",25u#,v_center(spread# + 
  549. rule_thickness#)); 
  550. adjust_fit(0,0); pickup crisp.nib;  
  551. arrow_length=4.5u+eps; 
  552. pos1(rule_thickness,90); pos2(rule_thickness,90); 
  553. pos3(bar,0); pos4(bar,0); y0=y1=y2=math_axis; 
  554. x1+.5rule_thickness=hround(u+arrow_length);  
  555. lft x0=hround u; y3-y0=y0-y4=.24asc_height+eps; 
  556. x3=x4=x0+3u+eps; pos5(bar,angle(z4-z0)); z5l=z0; 
  557. pos6(bar,angle(z3-z0)); z6l=z0; z9=.381966[.5[z3,z4],z0]; 
  558. numeric t; path p; p=z4r{z9-z4}..z6r; t=xpart(p 
  559. intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;  
  560. path p; p=z0..{z4-z9}z4l--subpath (0,t) 
  561. of\\(z4r{z9-z4}..z6r) 
  562.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r) 
  563.  --z3l{z9-z3}..z0 & cycle;  % arrowhead and stem 
  564. filldraw p; % left arrow 
  565. p:=p reflectedabout ((w/2+eps,-d),(w/2+eps,h)); 
  566. filldraw p; % right arrow  
  567. z10=z1 reflectedabout ((w/2+eps,-d),(w/2+eps,h)); 
  568. y11=y15=y19=.5[y0,y3]; y13=y17=.5[y4,y0]; 
  569. y12=y14=y16=y18=y10; 
  570. x11-x1=x12-x11=x13-x12=x14-x13=x15-x14=x16-x15=x17-x16=x18-x17= 
  571. x19-x18=x10-x19; 
  572. pickup pencircle scaled rule_thickness; 
  573. draw z1---z11---z13---z15---z17---z19---z10; 
  574. penlabels(0,1,2,3,4,5,6,9,10,11,12,13,14,15,16,17,18,19);  
  575. endchar; 
  576.  
  577. cmchar "Leftward curly arrow";  
  578. beginchar(oct"042",18u#,.8asc_height#,0#); 
  579. adjust_fit(0,0); pickup crisp.nib;  
  580. numeric arrow_length; arrow_length=.66*(w-2u+eps); 
  581. pos1(rule_thickness,90); pos2(rule_thickness,90); 
  582. pos3(bar,0); pos4(bar,0); y0=y1=y2=math_axis; 
  583. x1+.5rule_thickness=hround(u+arrow_length);  
  584. lft x0=hround u; y3-y0=y0-y4=.24asc_height+eps; 
  585. x3=x4=x0+3u+eps; pos5(bar,angle(z4-z0)); z5l=z0; 
  586. pos6(bar,angle(z3-z0)); z6l=z0; z9=.381966[.5[z3,z4],z0]; 
  587. numeric t; path p; p=z4r{z9-z4}..z6r; t=xpart(p 
  588. intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;  
  589. path p; p=z0..{z4-z9}z4l--subpath (0,t) 
  590. of\\(z4r{z9-z4}..z6r) 
  591.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r) 
  592.  --z3l{z9-z3}..z0 & cycle;  % arrowhead and stem 
  593. filldraw p; % left arrow 
  594. z10=z1; x13=x14=hround(u+arrow_length+eps); y13=y1; y14=-o; 
  595. x12=.5[x11,x13]; y12=h; rt x11=hround(w-u); y11=.5[y10,y12]; 
  596. pickup pencircle scaled rule_thickness; 
  597. path q; 
  598. q=z10{right}..tension0.8..{up}z11..tension0.8..{left}z12 
  599. ..tension0.8..{down}z13--z14; 
  600. draw q; 
  601. penlabels(0,1,2,3,4,5,6,9,10,11,12,13,14); endchar; 
  602.  
  603. cmchar "Rightward curly arrow";  
  604. beginchar(oct"043",18u#,.8asc_height#,0#); 
  605. adjust_fit(0,0); pickup crisp.nib;  
  606. p:=p reflectedabout ((w/2+eps,-d),(w/2+eps,h)); 
  607. filldraw p; 
  608. pickup pencircle scaled rule_thickness; 
  609. q:=q reflectedabout ((w/2+eps,-d),(w/2+eps,h)); 
  610. draw q; endchar; 
  611.  
  612. numeric circ_diam; % diameter of little circle 
  613. circ_diam=2.5u; 
  614. cmchar "Equals circle sign"; 
  615. compute_spread(.45x_height#,.55x_height#); 
  616. beginchar(oct"044",14u#,v_center(4spread#+rule_thickness#+2.5u#)); 
  617. italcorr h#*slant-.5u#; adjust_fit(0,0); pickup rule.nib; 
  618. lft x1=hround u-eps; x3=x1; x2=x4=w-x1; y1=y2; y3=y4; 
  619. y1-y3=spread; .5[y1,y3]=math_axis; draw z1--z2;  % upper bar 
  620. draw z3--z4;  % lower bar % 
  621. penpos11(rule_thickness,90); penpos13(rule_thickness,-90); 
  622. penpos12(rule_thickness,180); penpos14(rule_thickness,0);  
  623. x12r=hround(.5w-.5circ_diam-rule_thickness); % 
  624. x14r=w-x12r; x11=x13=.5w; y11l=y13l+circ_diam; 
  625. y12=y14=.5[y11,y13]; y13r=vround(y1+.8spread); % 
  626. penstroke pulled_arc.e(11,12) & pulled_arc.e(12,13) 
  627.  & pulled_arc.e(13,14) & pulled_arc.e(14,11) & cycle;  %  
  628. penlabels(1,2,3,4,11,12,13,14); endchar; 
  629.  
  630.  
  631.  
  632. cmchar "Follows or equals sign";  
  633. compute_spread(.45x_height#,.55x_height#);  
  634. spread#':=spread#; spread':=spread;         % spread of similarity sign 
  635. compute_spread(.54 x_height#,.66 x_height#); 
  636. spread#'':=spread#; spread'':=spread;       % spread between symbols
  637. compute_spread(5/4 x_height#,3/2 x_height#); % spread of follows sign
  638. beginchar(oct"045",14u#,v_center(spread#'+spread#+spread#'')); 
  639. adjust_fit(0,0); pickup rule.nib; autorounded; 
  640. lft x1=hround 1.5u-eps; x1=x3; x2=w-x1; 
  641. y1-y3=spread; y2=.5[y1,y3]; top y1=h; 
  642. draw z1{u,-spread}...{right}z2; %upper `diagonal' 
  643. draw z3{u,spread}...{right}z2; % lower diagonal 
  644. pickup pencircle xscaled .7rule_thickness yscaled 
  645. 1.4rule_thickness; 
  646. if vair#>.8curve#: pickup rule.nib; autorounded; fi 
  647. lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; 
  648. bot y11=bot y13; top y12=top y14;  
  649. top y12-bot y11=spread'';  
  650. y3-y14=spread'; 
  651. draw z11{up}...z12{right}..{right}z13...{up}z14; 
  652. penlabels(1,2,3,11,12,13,14); endchar; 
  653.  
  654. cmchar "Greater than or similar to sign";  
  655. compute_spread(.45x_height#,.55x_height#);  
  656. spread#':=spread#; spread':=spread; 
  657. compute_spread(.54x_height#,.66x_height#);
  658. spread#'':=spread#; spread'':=spread;
  659. compute_spread(5/4 x_height#,3/2 x_height#); 
  660. beginchar(oct"046",14u#,v_center(spread#'+spread#+spread#'')); 
  661. adjust_fit(0,0); pickup rule.nib; autorounded; 
  662. lft x1=hround 1.5u-eps; x1=x3; x2=w-x1; 
  663. y1-y3=spread; y2=.5[y1,y3]; top y1=h; 
  664. draw z1--z2--z3; 
  665. pickup pencircle xscaled .7rule_thickness yscaled 
  666. 1.4rule_thickness; 
  667. if vair#>.8curve#: pickup rule.nib; autorounded; fi 
  668. lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; 
  669. bot y11=bot y13; top y12=top y14;  
  670. top y12-bot y11=spread'';
  671.  y3-y14=spread'; 
  672. draw z11{up}...z12{right}..{right}z13...{up}z14; 
  673. penlabels(1,2,3,4,11,12,13,14); endchar; 
  674.   
  675. cmchar "Greater than or approximately equal to sign";  
  676. compute_spread(.45x_height#,.55x_height#);  
  677. spread#':=spread#; spread':=spread; 
  678. compute_spread(.54x_height#,.66x_height#);
  679. spread#'':=spread#; spread'':=spread;    % spread between similarities
  680. compute_spread(1.111 x_height#,1.333 x_height#); 
  681. beginchar(oct"047",14u#,v_center(spread#+2spread#''+2rule_thickness#)); 
  682. adjust_fit(0,0); pickup rule.nib; autorounded; 
  683. lft x1=hround 1.5u-eps; x1=x3; x2=w-x1; 
  684. y1-y3=spread; y2=.5[y1,y3]; top y1=h;
  685. draw z1--z2--z3; 
  686. pickup pencircle xscaled .7rule_thickness yscaled 
  687. 1.4rule_thickness; 
  688. if vair#>.8curve#: pickup rule.nib; autorounded; fi 
  689. lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; 
  690. bot y11=bot y13; top y12=top y14;  
  691. top y12-bot y11=spread'; 
  692. bot y3- top y13 = spread''; 
  693. path p; p=z11{up}...z12{right}..{right}z13...{up}z14; 
  694. draw p; draw p shifted (0,-spread''); 
  695. penlabels(1,2,3,4,11,12,13,14); endchar; 
  696.         
  697. cmchar "Multimap symbol";  
  698. beginchar(oct"050",20u#,.8asc_height#,0#);  
  699. adjust_fit(0,0); pickup rule.nib; autorounded; 
  700. numeric circ_diam; circ_diam=5u; 
  701. y2=math_axis; y8=y2+.5circ_diam; rt x2=w-u;  
  702. x6=x2-circ_diam;  
  703. circle_points; draw_circle; 
  704. x9=u+.5rule_thickness; y9=y10=y2; x10=x6-.5rule_thickness; 
  705. draw z9---z10; 
  706. penlabels(1,2,3,4,5,6,7,8,9,10); endchar; 
  707.  
  708. cmchar "Therefore"; 
  709. beginchar(oct"051",12u#,asc_height#,0); 
  710. adjust_fit(0,0); 
  711. lft x1=hround 1.5u; x2=w-x1; bot y1=-o; y2=y1; 
  712. z3-z1=(z2-z1)rotated60;
  713. fill fullcircle scaled dot_size shifted z1;  
  714. % left bottom dot                   
  715. fill fullcircle scaled dot_size shifted z2;  
  716. % rigth bottom 
  717. fill fullcircle scaled dot_size shifted z3; % top dot 
  718. penlabels(1,2,3); endchar; 
  719.  
  720.  
  721. cmchar "Because"; 
  722. beginchar(oct"052",12u#,asc_height#,0); 
  723. adjust_fit(0,0); 
  724. lft x1=hround 1.5u; x2=w-x1; y2=y1; 
  725. x3=w/2; y3=-o;
  726. z3-z1=(z2-z1)rotated-60;
  727. fill fullcircle scaled dot_size shifted z1; % top left dot 
  728. fill fullcircle scaled dot_size shifted z2;  
  729. % top right dot 
  730. fill fullcircle scaled dot_size shifted z3; % bottom dot 
  731. penlabels(1,2,3); endchar; 
  732.  
  733. cmchar "Equals-and-dots sign";  
  734. beginarithchar(oct"053");  
  735. compute_spread(.45x_height#,.55x_height#); 
  736. pickup rule.nib; 
  737. lft x1=hround u-eps; x3=x1; x2=x4=w-x1; 
  738. y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis; 
  739. draw z1--z2; draw z3--z4; % draw bars 
  740. pickup light_rule.nib; 
  741. x5=x6=x7=x8=hround w/2+eps; z5=z6; z7=z8; 
  742. penpos5(.8dot_size,0); penpos6(.8dot_size,90); 
  743. penpos7(.8dot_size,0); penpos8(.8dot_size,90); 
  744. y5-y1=y3-y7=spread; 
  745. dot(5,6); dot(7,8); % draw dots 
  746. penlabels(1,2,3,4,5,6,7,8); endchar; 
  747.  
  748. cmchar "Equals sign with triangle";  
  749. beginchar(oct"054", 14u#,12u#+math_axis# ,6u#-math_axis#);  
  750. compute_spread(.45x_height#,.55x_height#); 
  751. pickup rule.nib; 
  752. lft x1=hround u-eps; x3=x1; x2=x4=w-x1; 
  753. y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis; 
  754. draw z1--z2; draw z3--z4; % draw bars 
  755. numeric tri_side; % length of equilateral triangle 
  756. tri_side=7u; 
  757. x6-x5=tri_side; .5[x5,x6]=w/2; y5=y6; y5-y1=.8spread;
  758. %top y7=body_height;x7=w/2; 
  759. z7-z5=(z6-z5) rotated 60; 
  760. draw z5--z6--z7--cycle; 
  761. penlabels(1,2,3,4,5,6,7); endchar; 
  762.  
  763.  
  764. cmchar "Precedes or equals sign";  
  765. compute_spread(.45x_height#,.55x_height#);  
  766. spread#':=spread#; spread':=spread; 
  767. compute_spread(.54x_height#,.55x_height#);
  768. spread#'':=spread#; spread'':=spread;
  769. compute_spread(5/4 x_height#,3/2 x_height#); 
  770. beginchar(oct"055",14u#,v_center(spread#'+spread#+spread#'')); 
  771. adjust_fit(0,0); pickup rule.nib; autorounded; 
  772. lft x2=hround 1.5u-eps; x1=x3=w-x2;  
  773. y1-y3=spread; y2=.5[y1,y3]; top y1=h; 
  774. draw z1{-u,-spread}...{left}z2; %upper `diagonal' 
  775. draw z3{-u,spread}...{left}z2; % lower diagonal 
  776. pickup pencircle xscaled .7rule_thickness yscaled 
  777. 1.4rule_thickness; 
  778. if vair#>.8curve#: pickup rule.nib; autorounded; fi 
  779. lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; 
  780. bot y11=bot y13; top y12=top y14;  
  781. top y12-bot y11=spread'';  
  782.  y3-y14=spread'; 
  783. draw z11{up}...z12{right}..{right}z13...{up}z14; 
  784. penlabels(1,2,3,11,12,13,14); endchar; 
  785.   
  786. cmchar "Less than or similar to sign";  
  787. compute_spread(.45x_height#,.55x_height#);  
  788. spread#':=spread#; spread':=spread; 
  789. compute_spread(.54x_height#,.55x_height#);
  790. spread#'':=spread#; spread'':=spread;
  791. compute_spread(5/4 x_height#,3/2 x_height#); 
  792. beginchar(oct"056",14u#,v_center(spread#'+spread#+spread#'')); 
  793. adjust_fit(0,0); pickup rule.nib; autorounded; 
  794. lft x2=hround 1.5u-eps; x1=x3=w-x2; 
  795. y1-y3=spread; y2=.5[y1,y3]; top y1=h; 
  796. draw z1--z2--z3; 
  797. pickup pencircle xscaled .7rule_thickness yscaled 
  798. 1.4rule_thickness; 
  799. if vair#>.8curve#: pickup rule.nib; autorounded; fi 
  800. lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; 
  801. bot y11=bot y13; top y12=top y14;  
  802. top y12-bot y11=spread'';  
  803.  y3-y14=spread'; 
  804. draw z11{up}...z12{right}..{right}z13...{up}z14; 
  805. penlabels(1,2,3,4,11,12,13,14); endchar; 
  806.  
  807. cmchar "Less than or approximately equal to sign";  
  808. compute_spread(.45x_height#,.55x_height#);  
  809. spread#':=spread#; spread':=spread; 
  810. compute_spread(.54x_height#,.66x_height#);
  811. spread#'':=spread#; spread'':=spread;    % spread between similarities
  812. compute_spread(1.111 x_height#,1.333 x_height#); 
  813. beginchar(oct"057",14u#,v_center(spread#+2spread#''+2rule_thickness#)); 
  814. adjust_fit(0,0); pickup rule.nib; autorounded; 
  815. lft x2=hround 1.5u-eps; x1=x3=w-x2; 
  816. y1-y3=spread; y2=.5[y1,y3]; top y1=h; 
  817. draw z1--z2--z3; 
  818. pickup pencircle xscaled .7rule_thickness yscaled 
  819. 1.4rule_thickness; 
  820. if vair#>.8curve#: pickup rule.nib; autorounded; fi 
  821. lft x11=hround u; x12=4u; x13=w-x12; x14=w-x11; 
  822. bot y11=bot y13; top y12=top y14;  
  823. top y12-bot y11=spread';
  824. bot y3- top y13 = spread''; 
  825. path p; p=z11{up}...z12{right}..{right}z13...{up}z14; 
  826. draw p; draw p shifted (0,-spread''); 
  827. penlabels(1,2,3,4,11,12,13,14); endchar; 
  828.     
  829. cmchar "Equal or less than sign";  
  830. compute_spread(.45x_height#,.55x_height#); 
  831. spread#':=spread#; spread':=spread; 
  832. compute_spread(5/4x_height#,3/2x_height#);  
  833. beginchar(oct"060",14u#,v_center(spread#'+spread#+rule_thickness#)); 
  834. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  835. lft x2=hround 1.5u-eps; x1=x3=w-x2; y1-y3=spread; 
  836. y2=.5[y1,y3]; y8-y1=y9-y2=spread'; top y8=h; 
  837. x2=x9; x1=x8; 
  838. draw z1--z2--z3;  % diagonals  
  839. draw z8--z9; % equal sign 
  840. penlabels(1,2,3,8,9); endchar; 
  841.  
  842. cmchar "Equal or greater than sign"; 
  843. compute_spread(.45x_height#,.55x_height#); 
  844. spread#':=spread#; spread':=spread; 
  845. compute_spread(5/4x_height#,3/2x_height#); 
  846. beginchar(oct"061",14u#,v_center(spread#'+spread#+rule_thickness#)); 
  847. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  848. rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread;  
  849. x2=x9; x1=x8; 
  850. y2=.5[y1,y3]; y8-y1=y9-y2=spread'; top y8=h; 
  851. draw z1--z2--z3;  % diagonals 
  852. draw z8--z9; 
  853. penlabels(1,2,3,8,9); endchar;  
  854.  
  855. cmchar "Less than or (slanted) equal sign";  
  856. compute_spread(.45x_height#,.55x_height#); 
  857. spread#':=spread#; spread':=spread; 
  858. compute_spread(5/4x_height#,3/2x_height#);  
  859. beginchar(oct"066",14u#,v_center(spread#'+spread#+rule_thickness#)); 
  860. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  861. lft x2=hround 1.5u-eps; x1=x3=w-x2; y1-y3=spread; 
  862. y2=.5[y1,y3]; y3-y8=y2-y9=spread'; top y1=h; 
  863. x2=x9; x1=x8; 
  864. draw z1--z2--z3;  % diagonals  
  865. draw z8--z9; % equal sign 
  866. penlabels(1,2,3,8,9); endchar; 
  867.  
  868. cmchar "Greater than or (slanted) equal sign"; 
  869. compute_spread(.45x_height#,.55x_height#); 
  870. spread#':=spread#; spread':=spread; 
  871. compute_spread(5/4x_height#,3/2x_height#); 
  872. beginchar(oct"076",14u#,v_center(spread#'+spread#+rule_thickness#)); 
  873. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  874. rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread;  
  875. x2=x9; x1=x8; 
  876. y2=.5[y1,y3]; y3-y8=y2-y9=spread'; top y1=h; 
  877. draw z1--z2--z3;  % diagonals 
  878. draw z8--z9; 
  879. penlabels(1,2,3,8,9); endchar;  
  880. cmchar "Less than or greater than sign";  
  881. compute_spread(.4x_height#,.5x_height#);  
  882. spread#':=spread#; spread':=spread; 
  883. compute_spread(1.111 x_height#,1.333 x_height#); 
  884. beginchar(oct"067",14u#,v_center(2spread#'+spread#+rule_thickness#));
  885. adjust_fit(0,0); pickup rule.nib; autorounded; 
  886. lft x1=hround w-1.5u+eps; x1=x3=x5; x2=x4=x6=w-x1; 
  887. y1-y3=spread; top y1=h; y2-y4=spread'; y4-y6=spread; 
  888. y2=.5[y1,y3]; y5=.5[y4,y6]; 
  889. draw z1--z2--z3; draw z4--z5--z6; 
  890. penlabels(1,2,3,4,5,6); endchar; 
  891.  
  892. cmchar "Greater than or less than sign";  
  893. compute_spread(.4x_height#,.5x_height#);  
  894. spread#':=spread#; spread':=spread; 
  895. compute_spread(1.111 x_height#,1.333x_height#); 
  896. beginchar(oct"077",14u#,v_center(2spread#'+spread#+rule_thickness#));
  897. adjust_fit(0,0); pickup rule.nib; autorounded; 
  898. lft x1=hround 1.5u-eps; x1=x3=x5; x2=x4=x6=w-x1; 
  899. y1-y3=spread; top y1=h; y2-y4=spread'; y4-y6=spread; 
  900. y2=.5[y1,y3]; y5=.5[y4,y6]; 
  901. draw z1--z2--z3; draw z4--z5--z6; 
  902. penlabels(1,2,3,4,5,6); endchar; 
  903.  
  904. cmchar "Equals or precedes sign"; 
  905. compute_spread(.45x_height#,.55x_height#); 
  906. spread#':=spread#; spread':=spread; 
  907. compute_spread(5/4x_height#,3/2x_height#); 
  908. beginchar(oct"062",14u#,v_center(spread#'+spread#+rule_thickness#)); 
  909. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  910. lft x2=hround(1.5u)+eps; x1=x3=w-x2; y1-y3=spread; 
  911. y2=.5[y1,y3]; top y8-bot y1=top y9-bot y2=spread'; bot y3=0; 
  912. x2=x9;x8=x1-2u; 
  913. draw z1{-u,-spread}...{left}z2; 
  914. draw z3{-u, spread}...{left}z2; 
  915. draw z8{-u,-spread}...{left}z9; 
  916. penlabels(1,2,3,8,9); endchar; 
  917.  
  918. cmchar "Equals or follows sign"; 
  919. compute_spread(.45x_height#,.55x_height#); 
  920. spread#':=spread#; spread':=spread; 
  921. compute_spread(5/4x_height#,3/2x_height#); 
  922. beginchar(oct"063",14u#,v_center(spread#'+spread#+rule_thickness#)); 
  923. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  924. rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread; 
  925. y2=.5[y1,y3]; top y8-bot y1=top y9-bot y2=spread'; bot y3=0;% top y8=h; 
  926. x2=x9;x8=x1+2u;  
  927. draw z1{u,-spread}...{right}z2; 
  928. draw z3{u, spread}...{right}z2; 
  929. draw z8{u,-spread}...{right}z9; 
  930. penlabels(1,2,3,8,9); endchar; 
  931.  
  932. cmchar "Precedes or curvy equals sign"; 
  933. compute_spread(.45x_height#,.55x_height#); 
  934. spread#':=spread#; spread':=spread; 
  935. compute_spread(5/4x_height#,3/2x_height#); 
  936. beginchar(oct"064",14u#,v_center(spread#'+spread#+rule_thickness#)); 
  937. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  938. lft x2=hround(1.5u)+eps; x1=x3=w-x2; y1-y3=spread; 
  939. y2=.5[y1,y3]; top y3-bot y8=top y2-bot y9=spread'; bot y3=0;
  940. x2=x9;x8=x1-2u; 
  941. %for i=1 upto 3: %lower entire character
  942. %y[i]:=y[i]-spread'; endfor
  943. %for i=8 upto 9:
  944. %y[i]:=y[i]-spread'; endfor
  945. draw z1{-u,-spread}...{left}z2; 
  946. draw z3{-u, spread}...{left}z2; 
  947. draw z8{-u, spread}...{left}z9; 
  948. penlabels(1,2,3,8,9); endchar; 
  949.  
  950. cmchar "Follows or curvy equals sign"; 
  951. compute_spread(.45x_height#,.55x_height#); 
  952. spread#':=spread#; spread':=spread; 
  953. compute_spread(5/4x_height#,3/2x_height#); 
  954. beginchar(oct"074",14u#,v_center(spread#'+spread#+rule_thickness#));
  955. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  956. rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread; 
  957. y2=.5[y1,y3]; top y3-bot y8=top y2-bot y9=spread'; bot y3=0; 
  958. x2=x9;x8=x1+2u; 
  959. %for i=1 upto 3: %lower entire character
  960. %y[i]:=y[i]-spread'; endfor
  961. %for i=8 upto 9:
  962. %y[i]:=y[i]-spread'; endfor
  963. draw z1{u,-spread}...{right}z2; 
  964. draw z3{u, spread}...{right}z2; 
  965. draw z8{u, spread}...{right}z9; 
  966. penlabels(1,2,3,8,9); endchar; 
  967.  
  968. cmchar "Less than or (double) equals sign";  
  969. compute_spread(.45x_height#,.55x_height#); 
  970. spread#':=spread#; spread':=spread; 
  971. compute_spread(5/4x_height#,3/2x_height#);  
  972. beginchar(oct"065",14u#,v_center(2spread#'+spread#+2rule_thickness#)); 
  973. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  974. lft x2=hround 1.5u-eps; x1=x3=w-x2; y1-y3=spread; 
  975. y2=.5[y1,y3]; top y1=h; 
  976. x2=x9=x7; x1=x8=x6; y7=y6; y8=y9; 
  977. y7-y9=spread'; top y3-bot y6=spread'; 
  978. draw z1--z2--z3;  % diagonals  
  979. draw z6--z7; draw z8--z9; % equal sign 
  980. penlabels(1,2,3,6,7,8,9); endchar; 
  981.  
  982. cmchar "Greater than or (double) equals sign"; 
  983. compute_spread(.45x_height#,.55x_height#); 
  984. spread#':=spread#; spread':=spread; 
  985. compute_spread(5/4x_height#,3/2x_height#); 
  986. beginchar(oct"075",14u#,v_center(2spread#'+spread#+2rule_thickness#)); 
  987. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;  
  988. rt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread;  
  989. x2=x7=x9; x1=x6=x8; y6=y7; y8=y9; 
  990. y2=.5[y1,y3]; top y3-bot y6=spread'; top y1=h; 
  991. y7-y9=spread'; 
  992. draw z1--z2--z3;  % diagonals 
  993. draw z6--z7; draw z8--z9; 
  994. penlabels(1,2,3,6,7,8,9); endchar;  
  995.  
  996. cmchar "Reverse prime symbol (superscript only)"; 
  997. beginchar(oct"070",3u#+max(1.75u#,curve#+2(curve#-stem#)), 
  998.  .8asc_height#,0); adjust_fit(0,0); pickup fine.nib; numeric 
  999. light_stem,heavy_stem; light_stem=hround .5[vair,stem]; 
  1000. heavy_stem=hround(bold+2dw); x1-.5heavy_stem=hround(.25u); 
  1001. y1+.5heavy_stem=h; x2+.5light_stem=hround (w-.5u); 
  1002. y2=1/12asc_height;  
  1003. numeric theta; theta=angle(z1-z2)-90; 
  1004. pos1(heavy_stem,theta); pos2(light_stem,theta);  
  1005. filldraw circ_stroke z1e--z2e;  % diagonal  
  1006. penlabels(1,2); endchar; 
  1007.  
  1008. cmchar "short axis line";
  1009. beginchar(oct"071",9u#,27/7u#+math_axis#,27/7u#-math_axis#); pickup rule.nib;
  1010. lft x1=hround 1.5u-eps; x2=w-x1; y1=y2=math_axis;
  1011. draw z1--z2;
  1012. labels(1,2); endchar;
  1013.  
  1014. cmchar "Dotted (right-left) equals sign"; 
  1015. compute_spread(.45x_height#,.55x_height#); 
  1016. beginchar(oct"072",14u#,v_center(3spread#+2rule_thickness#)); 
  1017. italcorr h#*slant-.5u#; adjust_fit(0,0); pickup rule.nib; 
  1018. lft x1=hround u-eps; x3=x1; x2=x4=w-x1; y1=y2; y3=y4; 
  1019. y1-y3=spread; .5[y1,y3]=math_axis; draw z1--z2;  % upper bar 
  1020. draw z3--z4;  % lower bar 
  1021. pickup tiny.nib; 
  1022. x6=x5=x2; y6=y5=y1+spread; 
  1023. pos5(dot_size,0); pos6(dot_size,90); 
  1024. x7=x8=x3; y7=y8=y4-spread; 
  1025. pos7(dot_size,0); pos8(dot_size,90); 
  1026. dot(5,6); dot(7,8); 
  1027. penlabels(1,2,3,4,5,6,7,8); endchar; 
  1028.  
  1029. cmchar "Dotted (left-right) equals sign"; 
  1030. compute_spread(.45x_height#,.55x_height#); 
  1031. beginchar(oct"073",14u#,v_center(3spread#+2rule_thickness#)); 
  1032. italcorr h#*slant-.5u#; adjust_fit(0,0); pickup rule.nib; 
  1033. lft x1=hround u-eps; x3=x1; x2=x4=w-x1; y1=y2; y3=y4; 
  1034. y1-y3=spread; .5[y1,y3]=math_axis;  
  1035. draw z1--z2;  % upper bar  
  1036. draw z3--z4;  % lower bar  
  1037. pickup tiny.nib; 
  1038. x6=x5=x1; y6=y5=y1+spread; 
  1039. pos5(dot_size,0); pos6(dot_size,90); 
  1040. x7=x8=x4; y7=y8=y4-spread; 
  1041. pos7(dot_size,0); pos8(dot_size,90); 
  1042. dot(5,6); dot(7,8); 
  1043. penlabels(1,2,3,4,5,6,7,8); endchar; 
  1044.  
  1045. cmchar "Square subset sign"; % taken from vol E, p533
  1046. compute_spread(5/4x_height#,3/2x_height#); 
  1047. beginchar(oct"100",14u#,v_center(spread#+rule_thickness#)); 
  1048. adjust_fit(0,0); pickup rule.nib; lft x2=hround(1.5u); 
  1049. x1=x4=hround(w-x2)+eps; x3=x2; y1-y4=spread; y2=y1; y3=y4; 
  1050. top y1=h; draw z1--z2--z3--z4;  % bars and stem x8=x1; 
  1051. penlabels(1,2,3,4); endchar; 
  1052.  
  1053. cmchar "Square superset sign"; 
  1054. compute_spread(5/4x_height#,3/2x_height#); 
  1055. beginchar(oct"101",14u#,v_center(spread#+rule_thickness#)); 
  1056. adjust_fit(0,0); pickup rule.nib;  
  1057. x2=hround(w-1.5u); x1=x4=hround w-x2-eps; x3=x2; 
  1058. y1-y4=spread; y2=y1; y3=y4; top y1=h; draw z1--z2--z3--z4;  
  1059. % bars and stem  
  1060. penlabels(1,2,3,4); endchar; 
  1061.  
  1062. cmchar "Rightward pointing isosceles triangle"; 
  1063. compute_spread(.45x_height#,.55x_height#); 
  1064. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  1065. compute_spread(5/4x_height#,3/2x_height#); 
  1066. beginchar(oct"102",14u#,v_center(spread#+rule_thickness#)); 
  1067. adjust_fit(0,0); pickup rule.nib; lft x2=hround(1.5u); 
  1068. x3=x2; x1=hround(w-x2);   
  1069. top y2=h; y2-y3=spread; y1=.5[y2,y3]; 
  1070. draw z1--z2--z3--cycle;  
  1071. penlabels(1,2,3); endchar;  
  1072.  
  1073. cmchar "Leftward pointing isosceles triangle"; 
  1074. compute_spread(.45x_height#,.55x_height#); 
  1075. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  1076. compute_spread(5/4x_height#,3/2x_height#); 
  1077. beginchar(oct"103",14u#,v_center(spread#+rule_thickness#)); 
  1078. adjust_fit(0,0); pickup rule.nib; rt x2=hround(w-1.5u-eps); 
  1079. x3=x2; x1=hround(w-x2);   
  1080. top y2=h; y2-y3=spread; y1=.5[y2,y3]; 
  1081. draw z1--z2--z3--cycle;  
  1082. penlabels(1,2,3); endchar;  
  1083.  
  1084. cmchar "Rightward isosceles triangle with lower bar"; 
  1085. compute_spread(.45x_height#,.55x_height#); 
  1086. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  1087. compute_spread(5/4x_height#,3/2x_height#); 
  1088. beginchar(oct"104",14u#,v_center(spread#'+spread#+rule_thickness#)); 
  1089. adjust_fit(0,0); pickup rule.nib; lft x2=hround(1.5u); 
  1090. x3=x2; x1=hround(w-x2);   
  1091. top y2=h; y2-y3=spread; y1=.5[y2,y3]; 
  1092. x4=x2; x5=x1; y3-y4=spread'; y5=y4; 
  1093. draw z1--z2--z3--cycle; draw z4--z5; 
  1094. penlabels(1,2,3,4,5); endchar;  
  1095.  
  1096. cmchar "Leftward isosceles triangle with lower bar"; 
  1097. compute_spread(.45x_height#,.55x_height#); 
  1098. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  1099. compute_spread(5/4x_height#,3/2x_height#); 
  1100. beginchar(oct"105",14u#,v_center(spread#'+spread#+rule_thickness#)); 
  1101. adjust_fit(0,0); pickup rule.nib; rt x2=hround(w-1.5u-eps); 
  1102. x3=x2; x1=hround(w-x2);   
  1103. top y2=h; y2-y3=spread; y1=.5[y2,y3]; 
  1104. x4=x2; x5=x1; y3-y4=spread'; y5=y4; 
  1105. draw z1--z2--z3--cycle; draw z4--z5; 
  1106. penlabels(1,2,3,4,5); endchar;  
  1107.  
  1108. cmchar "Large, filled, 5-pointed star"; 
  1109. beginchar(oct"106",asc_height#+desc_depth#,asc_height#,desc_depth#); 
  1110. adjust_fit(.5u#, .5u#); pickup tiny.nib; 
  1111. numeric theta; theta=360/5; 
  1112. x0=good.x .5w; y0=good.y .5[h, -d]; x1=x0; top y1=h; 
  1113. for n=2 upto 5: z[n]=z0+(z1-z0) rotated((n-1)*theta); endfor 
  1114. % z0 is the `origin' 
  1115. % z1 thru z5 are the points; z1 at the top going 
  1116. %  counterclockwise 
  1117. z6=(z1--z3)intersectionpoint(z2--z5); 
  1118. for n=7 upto10: z[n]=z0+(z6-z0)rotated((n-1)*theta); endfor 
  1119. filldraw z1--z6--z2--z7--z3--z8--z4--z9--z5--z10--cycle; 
  1120. penlabels(0,1,2,3,4,5); endchar; 
  1121.  
  1122. cmchar "Vertical overlapping slurs"; 
  1123. beginchar(oct"107",9u#,body_height#,paren_depth#); 
  1124. adjust_fit(0,0); pickup fine.nib; 
  1125. numeric light_stem; light_stem=Vround .5[vair,stem]; 
  1126. y2=.5[h,-d]; x2r=hround w-1.5u; pos2(light_stem,0); 
  1127. x1-.5hair=hround w-x2; x3=x1; y1+.5hair=h; y3-.5hair=-d; 
  1128. numeric theta;  theta= angle((z2-z1)xscaled3); 
  1129. numeric theta'; theta'=angle((z3-z2)xscaled3); 
  1130. pos1(hair, theta+90); pos3(hair, theta'+90); 
  1131. path p; 
  1132. p=z1l{dir theta}...z2l...{dir theta'}z3l 
  1133.   ..z3r{-dir theta'}...z2r...{-dir theta}z1r..cycle; 
  1134. filldraw p; 
  1135. p:=p reflectedabout((.5w,-d),(.5w,h)); filldraw p; 
  1136. penlabels(1,2,3); endchar; 
  1137.  
  1138. cmchar "Filled rightward pointing isosceles triangle"; 
  1139. compute_spread(.45x_height#,.55x_height#); 
  1140. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  1141. compute_spread(5/4x_height#,3/2x_height#); 
  1142. beginchar(oct"111",14u#,v_center(spread#+rule_thickness#)); 
  1143. adjust_fit(0,0); pickup rule.nib; lft x2=hround(1.5u); 
  1144. x3=x2; x1=hround(w-x2);   
  1145. top y2=h; y2-y3=spread; y1=.5[y2,y3]; 
  1146. filldraw z1--z2--z3--cycle;  
  1147. penlabels(1,2,3); endchar;  
  1148.  
  1149. cmchar "Filled leftward pointing isosceles triangle"; 
  1150. compute_spread(.45x_height#,.55x_height#); 
  1151. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  1152. compute_spread(5/4x_height#,3/2x_height#); 
  1153. beginchar(oct"112",14u#,v_center(spread#+rule_thickness#)); 
  1154. adjust_fit(0,0); pickup rule.nib; rt x2=hround(w-1.5u-eps); 
  1155. x3=x2; x1=hround(w-x2);   
  1156. top y2=h; y2-y3=spread; y1=.5[y2,y3]; 
  1157. filldraw z1--z2--z3--cycle;  
  1158. penlabels(1,2,3); endchar;  
  1159.  
  1160.  cmchar "short axis right arrow";
  1161. beginchar(oct"113",9u#,27/7u#+math_axis#,27/7u#-math_axis#); 
  1162. pickup rule.nib;
  1163. penpos1(.25rule_thickness,90); penpos2(.25rule_thickness,90); penpos3(bar,0); 
  1164. penpos4(bar,0);
  1165. y0=y1=y2=math_axis; 
  1166. x1=hround 1.5u-eps;
  1167. rt x0=w-x1;
  1168. y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps;
  1169. penpos5(bar,angle(z4-z0)); z5l=z0; penpos6(bar,angle(z3-z0)); z6l=z0;
  1170. z9=.381966[.5[z3,z4],z0];
  1171. numeric t; path p; p=z4l{z9-z4}..z6r;
  1172. t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
  1173. filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
  1174.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
  1175.  --z3r{z9-z3}..z0 & cycle;     % arrowhead and stem
  1176. penlabels(0,1,2,3,4,5,6,9); endchar;
  1177.  
  1178. cmchar "short axis left arrow";
  1179. beginchar(oct"114",9u#,27/7u#+math_axis#,27/7u#-math_axis#); 
  1180. pickup rule.nib;
  1181. penpos1(.25rule_thickness,90); penpos2(.25rule_thickness,90); penpos3(bar,0); 
  1182. penpos4(bar,0);
  1183. y0=y1=y2=math_axis; x0=hround 1.5u-eps;
  1184. rt x1=w-x0;
  1185. y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps;
  1186. penpos5(bar,angle(z4-z0)); z5l=z0; penpos6(bar,angle(z3-z0)); z6l=z0;
  1187. z9=.381966[.5[z3,z4],z0];
  1188. numeric t; path p; p=z4r{z9-z4}..z6r;
  1189. t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
  1190. filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
  1191.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r)
  1192.  --z3l{z9-z3}..z0 & cycle;     % arrowhead and stem
  1193. penlabels(0,1,2,3,4,5,6,9); endchar;
  1194.  
  1195.  
  1196. cmchar "Filled downward triangle"; 
  1197. beginchar(oct"110",.8asc_height#+3u#,.8asc_height#,0pt#); 
  1198. adjust_fit(0,0); pickup rule.nib; 
  1199. y2=0; lft x1=1.5u;  
  1200. x3=hround w-x1; 
  1201. y1=y3=vround h-y2; x2=.5[x1,x3]; 
  1202. filldraw z1--z2--z3--cycle; 
  1203. penlabels(1,2,3); endchar; 
  1204.  
  1205. cmchar "Downward triangle"; 
  1206. beginchar(oct"117",.8asc_height#+3u#,.8asc_height#,0pt#); 
  1207. adjust_fit(0,0); pickup rule.nib; 
  1208. y2=0; lft x1=1.5u;  
  1209. x3=hround w-x1; 
  1210. y1=y3=vround h-y2; x2=.5[x1,x3]; 
  1211. draw z1--z2--z3--cycle; 
  1212. penlabels(1,2,3); endchar; 
  1213.  
  1214. cmchar "Upward triangle"; 
  1215. beginchar(oct"115",.8asc_height#+3u#,.8asc_height#,0pt#); 
  1216. adjust_fit(0,0); pickup rule.nib; 
  1217. y2=h; lft x1=1.5u;  
  1218. x3=hround w-x1; 
  1219. y1=y3=vround h-y2; x2=.5[x1,x3]; 
  1220. draw z1--z2--z3--cycle; 
  1221. penlabels(1,2,3); endchar; 
  1222.  
  1223. cmchar "Filled upward triangle"; 
  1224. beginchar(oct"116",.8asc_height#+3u#,.8asc_height#,0pt#); 
  1225. adjust_fit(0,0); pickup rule.nib; 
  1226. y2=h; lft x1=1.5u;  
  1227. x3=hround w-x1; 
  1228. y1=y3=vround h-y2; x2=.5[x1,x3]; 
  1229. filldraw z1--z2--z3--cycle; 
  1230. penlabels(1,2,3); endchar; 
  1231.  
  1232. cmchar "Egg sandwich"; 
  1233. compute_spread(.45x_height#,.55x_height#); 
  1234. beginchar(oct"120",14u#,asc_height#,0); 
  1235. italcorr h#*slant-.5u#; adjust_fit(0,0); pickup rule.nib; 
  1236. lft x1=hround u-eps; x3=x1; x2=x4=w-x1;  
  1237. y1=y2; y3=y4;  
  1238. y1-y3=spread;  
  1239. .5[y1,y3]=math_axis;  
  1240. draw z1--z2;  % upper bar  
  1241. draw z3--z4;  % lower bar  
  1242. pickup tiny.nib; 
  1243. x5=x6=hround w/2; bot y5=bot y1; top y6=top y3; 
  1244. y7=y8=math_axis;x8-x7=y5-y6; 
  1245. x6=.5[x7,x8]; 
  1246. draw z5{right}..z8..z6{left}..z7..cycle; 
  1247. penlabels(1,2,3,4,5,6,7,8); endchar; 
  1248.  
  1249. cmchar "Stacked symbols: <, bar, >"; 
  1250. compute_spread(.45x_height#,.55x_height#); 
  1251. spread#':=spread#; spread':=spread; 
  1252. compute_spread(.98 x_height#,1.176 x_height#); 
  1253. beginchar(oct"121",14u#,v_center(2spread#'+2spread#+rule_thickness#));
  1254. adjust_fit(0,0); pickup rule.nib; 
  1255. y1=y2; lft x1=hround 1.5u-eps; rt x2=w-x1; 
  1256. x4=x6=x8=x1; x3=x5=x7=x2; 
  1257. y5-y1=y1-y6=spread';top y3=h; y3-y5=spread; 
  1258. y6-y8=spread;
  1259. y7=.5[y6,y8]; y4=.5[y3,y5]; 
  1260. draw z3--z4--z5; draw z6--z7--z8; draw z1--z2;
  1261. penlabels(1,2,3,4,5,6,7,8); endchar; 
  1262.  
  1263. cmchar "Stacked symbls: greater than, bar, less than"; 
  1264. compute_spread(.45x_height#,.55x_height#); 
  1265. spread#':=spread#; spread':=spread; 
  1266. compute_spread(.98 x_height#,1.176 x_height#); 
  1267. beginchar(oct"122",14u#,v_center(2spread#'+2spread#+rule_thickness#)); 
  1268. adjust_fit(0,0); pickup rule.nib; 
  1269. y1=y2; lft x2=hround 1.5u-eps; rt x1=w-x2; 
  1270. x4=x6=x8=x1; x3=x5=x7=x2; 
  1271. y5-y1=y1-y6=spread';top y3=h; y3-y5=spread; 
  1272. y6-y8=spread;
  1273. y7=.5[y6,y8]; y4=.5[y3,y5]; 
  1274. draw z3--z4--z5; draw z6--z7--z8; draw z1--z2;
  1275. numeric bar_ht; bar_ht=y1; %save height of bar
  1276. penlabels(1,2,3,4,5,6,7,8); endchar; 
  1277.  
  1278. cmchar "Stacked symbls: less than, =, greater than"; 
  1279. compute_spread(.45x_height#,.55x_height#); 
  1280. spread#':=spread#; spread':=spread; 
  1281. compute_spread(.98 x_height#,1.176 x_height#); 
  1282. beginchar(oct"123",14u#,v_center(3spread#'+2spread#+rule_thickness#));
  1283. adjust_fit(0,0); pickup rule.nib; autorounded;
  1284. lft x1=hround 1.5u-eps; x2=w-x1; 
  1285. x1'=x1; x2=x2'; x4=x6=x8=x1;
  1286. x3=x5=x7=x2;                
  1287. y1=y2; y1'=y2'; y2-y2'=spread'; bot y2=math_axis+.5spread';
  1288. draw z1--z2; draw z1'--z2'; 
  1289. y3-y5=y6-y8=spread;
  1290. y5-y2=y2'-y6=spread';
  1291. y7=.5[y6,y8]; y4=.5[y3,y5]; 
  1292. draw z3--z4--z5; draw z6--z7--z8; 
  1293. penlabels(1,1',2,2',3,4,5,6,7,8); endchar; 
  1294.  
  1295. cmchar "Stacked symbols: greater than, =, less than"; 
  1296. compute_spread(.45x_height#,.55x_height#); 
  1297. spread#':=spread#; spread':=spread; 
  1298. compute_spread(.98 x_height#,1.176 x_height#); 
  1299. beginchar(oct"124",14u#,v_center(3spread#'+2spread#+rule_thickness#));
  1300. adjust_fit(0,0); pickup rule.nib; 
  1301. lft x2=hround 1.5u-eps; x1=w-x2; 
  1302. x1'=x1; x2=x2'; x4=x6=x8=x1;
  1303. x3=x5=x7=x2; 
  1304. y1=y2; y1'=y2'; y2-y2'=spread'; bot y2=math_axis+.5spread';
  1305. draw z1--z2; draw z1'--z2'; 
  1306. y3-y5=y6-y8=spread;
  1307. y5-y2=y2'-y6=spread';
  1308. y7=.5[y6,y8]; y4=.5[y3,y5]; 
  1309. draw z3--z4--z5; draw z6--z7--z8; 
  1310. penlabels(1,1',2,2',3,4,5,6,7,8); endchar; 
  1311.  
  1312. cmchar "Yen symbol";  
  1313. compute_spread(.45x_height#, .55x_height#); 
  1314. beginchar(oct"125",13u#,cap_height#,0); %% adapted from "Y" 
  1315. italcorr cap_height#*slant+.45u#; 
  1316. adjust_fit(cap_serif_fit#,cap_serif_fit#); numeric 
  1317. left_stem,right_stem,outer_jut,dy,alpha; 
  1318. left_stem=cap_stem-stem_corr; right_stem=min(cap_hair if 
  1319. hefty:-2stem_corr fi,left_stem); outer_jut=.75cap_jut; 
  1320. x1l=w-x4r=l+letter_fit+outer_jut+.05u; 
  1321. x2l=x5l=hround(.5w-.5left_stem); x3r=x5r; y1=y4=h; 
  1322. y2=y3=y5=.4h; dy=y1-y2; alpha=((x2l-x1l)++dy)/dy; 
  1323. penpos1(alpha*left_stem,0); penpos2(alpha*left_stem,0); 
  1324. penpos3(alpha*right_stem,0); penpos4(alpha*right_stem,0); 
  1325. penpos5(left_stem,0); penpos6(left_stem,0); x5=x6; y6=0; 
  1326. z0=whatever[z1r,z2r]=whatever[z3l,z4l]; if 
  1327. y0>y2+cap_notch_cut: y0:=y2+cap_notch_cut; 
  1328.   fill 
  1329. z0+.5right{up}...{z4-z3}diag_end(3l,4l,1,1,4r,3r)--z5r 
  1330. --diag_end(5r,6r,1,1,6l,5l)--z5l--diag_end(2l,1l,1,1,1r,2r){z2-z1} 
  1331.     ...{down}z0+.5left--cycle; % diagonals and stem 
  1332. else: fill z0--diag_end(0,4l,1,1,4r,3r)--z5r 
  1333.     --diag_end(5r,6r,1,1,6l,5l)--z5l 
  1334.     --diag_end(2l,1l,1,1,1r,0)--cycle; fi % diagonals & stem 
  1335. if serifs: numeric inner_jut; pickup tiny.nib; 
  1336.  prime_points_inside(1,2); prime_points_inside(4,3); 
  1337. prime_points_inside(6,5); 
  1338.  if rt x1'r+cap_jut+.5u+1<=lft x4'l-cap_jut: 
  1339. inner_jut=cap_jut; 
  1340.  else: rt x1'r+inner_jut+.5u+1=lft x4'l-inner_jut; fi 
  1341.  dish_serif(1',2,a,1/3,outer_jut,b,1/2,inner_jut); 
  1342. %upper lft serif  
  1343.  dish_serif(4',3,c,.6,inner_jut,d,1/2,outer_jut)(dark);   
  1344. % upper right serif 
  1345.  dish_serif(6',5,e,1/3,cap_jut,f,1/3,cap_jut); fi   
  1346. % lower serif 
  1347. pickup pencircle scaled .5[fine, rule_thickness];  
  1348. x7=x9=x1l; x8=x10=x4r; 
  1349. y9=y10; 
  1350. top y7=bar_height; y7=y8; draw z7--z8; 
  1351. y9-y7=spread; 
  1352. draw z9--z10;
  1353. penlabels(0,1,2,3,4,5,6,1',2',3',4',5',6',7,8,9,10); endchar;  
  1354.  
  1355. cmchar "Triple rightward arrow"; 
  1356. compute_spread(.45x_height#,.55x_height#); 
  1357. beginchar(oct"126",18u#,v_center(2spread#+.5asc_height#+rule_thickness#)); 
  1358. adjust_fit(0,0); pickup rule.nib; penpos1(rule_thickness,90); 
  1359. penpos2(rule_thickness,90); penpos3(1.5bar,0); penpos4(1.5bar,0); 
  1360. y0=y1=y2=math_axis; x1-.5rule_thickness=u;  
  1361. rt x0=hround (w-u); x0'=x0''=x0; x1'=x1''=x1; 
  1362. y1'=y1+spread;y1''=y1-spread; y0'=y1'; y0''=y1''; 
  1363. draw z0'--z1'; draw z0''--z1''; % draw bars  
  1364. pickup crisp.nib;  
  1365. y3-y0'=y0''-y4=.24asc_height+eps; x3=x4=x0-6u-eps; 
  1366. penpos5(bar,angle(z0-z4)); z5r=z0; penpos6(bar,angle(z0-z3)); 
  1367. z6r=z0; z9=.381966[.5[z3,z4],z0]; erase filldraw 
  1368. z0..{z3-z9}z3--(w,y3)--(w,y4)--z4{z9-z4}..z0& cycle; 
  1369. numeric t; path p; 
  1370. p=z4l{z9-z4}..z6l; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); 
  1371. x2=xpart point t of p; 
  1372. filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6l) 
  1373.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5l) 
  1374.  --z3r{z9-z3}..z0 & cycle;  % arrowhead and stem 
  1375. penlabels(0,1,2,3,4,5,6,9,0',0'',1',1''); endchar; 
  1376.  
  1377.  
  1378. cmchar "Triple leftward arrow"; 
  1379. compute_spread(.45x_height#,.55x_height#); 
  1380. beginchar(oct"127",18u#,v_center(2spread#+.5asc_height#+rule_thickness#)); 
  1381. adjust_fit(0,0); pickup rule.nib; penpos1(rule_thickness,90); 
  1382. penpos2(rule_thickness,90); penpos3(1.5bar,0); penpos4(1.5bar,0); 
  1383. y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft 
  1384. x0=hround u; x0'=x0''=x0; x1'=x1''=x1; 
  1385. y1'=y1+spread;y1''=y1-spread; y0'=y1'; y0''=y1''; draw 
  1386. z0'--z1'; draw z0''--z1''; % draw bars  
  1387. pickup crisp.nib;  
  1388. y3-y0'=y0''-y4=.24asc_height+eps; x3=x4=x0+6u+eps; 
  1389. pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); 
  1390. z6l=z0; z9=.381966[.5[z3,z4],z0]; erase filldraw 
  1391. z0..{z3-z9}z3--(0,y3) 
  1392.  --(0,y4)--z4{z9-z4}..z0& cycle; numeric t; path p; 
  1393. p=z4r{z9-z4}..z6r; t=xpart(p 
  1394. intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; 
  1395. filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r) 
  1396.  --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r) 
  1397.  --z3l{z9-z3}..z0 & cycle;  % arrowhead and stem 
  1398. penlabels(0,1,2,3,4,5,6,9,0',0'',1',1''); endchar; 
  1399.  
  1400. cmchar "Check mark"; beginchar(oct"130",15u#,asc_height#, 
  1401. 0); adjust_fit(0,0); pickup cal.nib;  
  1402. lft x1=hround(1.5u);y1=math_axis; y2=0; x2=hround(w/3); 
  1403. x3=w-x1; y3=asc_height-o;  
  1404. x4=w-1.5x2; y4=asc_height; 
  1405. draw z1--z2{z4-z2}..z3; 
  1406. penlabels(1,2,3,4);  
  1407. endchar; 
  1408.  
  1409. cmchar "Vee on bar";  
  1410. compute_spread(.45x_height#,.55x_height#); 
  1411. beginchar(oct"131",11u#,asc_height#, desc_depth#); 
  1412. adjust_fit(0,0); pickup rule.nib;  
  1413. lft x1=lft x4=hround u; x3=x5=w-x1; x2=hround(w/2); 
  1414. bot y4=bot y5=0; y2=y4+spread; top y1=top y3=h+o; 
  1415. draw z1--z2--z3; draw z4--z5; 
  1416. penlabels(1,2,3,4,5);  
  1417. endchar; 
  1418.  
  1419. cmchar "Bar on mountain";  
  1420. compute_spread(.45x_height#,.55x_height#); 
  1421. beginchar(oct"132",11u#,asc_height#, desc_depth#); adjust_fit(0,0); 
  1422. pickup rule.nib;  
  1423. lft x1=lft x4=hround u; x3=x5=w-x1; x2=hround(w/2); 
  1424. top y4=top y5=h+o; y2=y4-spread; bot y1=bot y3=0; 
  1425. draw z1--z2--z3; draw z4--z5; 
  1426. numeric t; % t is used in char"133, = on mountain 
  1427. t=y2-y3; 
  1428. penlabels(1,2,3,4,5);  
  1429. endchar; 
  1430.  
  1431. cmchar "Equal sign on mountain";  
  1432. compute_spread(.45x_height#,.55x_height#); 
  1433. beginchar(oct"133",11u#,body_height#, desc_depth#); adjust_fit(0,0); 
  1434. pickup rule.nib;  
  1435. lft x1=lft x4=lft x6=hround u; x3=x5=x7=w-x1; x2=hround(w/2);  
  1436. y4=y5; y6=y7; y6-y4=y4-y2=spread; top y4=asc_height+o-.5spread; 
  1437. y2-y1=t; % t is defined in char "132
  1438. y1=y3; 
  1439. draw z1--z2--z3; draw z4--z5; draw z6--z7; 
  1440. penlabels(1,2,3,4,5,6,7);  
  1441. endchar; 
  1442.  
  1443. cmchar "Angle sign (simple)";  
  1444. beginchar(oct"134",13u#,asc_height#, 0); 
  1445. adjust_fit(0,0); pickup rule.nib;  
  1446. lft x2=hround u; x1=x3=w-x2;  
  1447. bot y2=bot y3=0; top y1=h; 
  1448. draw z1--z2--z3; 
  1449. penlabels(1,2,3);  
  1450. endchar; 
  1451.  
  1452. cmchar "Angle sign (with small arc)";  
  1453. beginchar(oct"135",13u#,asc_height#, 0); 
  1454. adjust_fit(0,0); pickup rule.nib;  
  1455. lft x2=hround u; x1=x3=w-x2;  
  1456. bot y2=bot y3=0; y1=h; 
  1457. draw z1--z2--z3; 
  1458. path p; p=quartercircle scaled 15u; 
  1459. numeric t; t= xpart(p intersectiontimes (z1--z2)); 
  1460. draw subpath (0,t) of p; 
  1461. penlabels(1,2,3);  
  1462. endchar; 
  1463.  
  1464. cmchar "Eye-like angle sign (with small arc)";  
  1465. beginchar(oct"136",13u#,v_center(.75body_height#)); 
  1466. adjust_fit(0,0); pickup rule.nib;  
  1467. lft x2=hround u; x1=x3=w-x2;  
  1468. y2=math_axis; y2=.5[y1,y3]; y1-y3=.75body_height; 
  1469. draw z1--z2--z3; 
  1470. path p; p=quartercircle scaled 17u; 
  1471. numeric t; t= xpart(p intersectiontimes ((z1--z2)shifted 
  1472. -z2)); 
  1473. draw subpath (0,t) of p shifted z2; 
  1474. draw subpath (0,t) of p shifted z2 
  1475. reflectedabout(z2,(w,y2)); 
  1476. penlabels(1,2,3);  
  1477. endchar; 
  1478.  
  1479. cmchar "Proportional sign made of circles";  
  1480. beginchar(oct"137",14u#,asc_height#,0); 
  1481. adjust_fit(0,0); pickup pencircle scaled rule_thickness;  
  1482. numeric radius; radius:=w-2u; radius:=radius/3; 
  1483. radius:=radius-.5rule_thickness; 
  1484. x2=hround w-u; x1=w-x2+radius; 
  1485. y1=y2=math_axis; 
  1486. pair m; m=(rule_thickness,0); 
  1487. draw fullcircle scaled 2radius shifted (z1+.5m); 
  1488. draw (halfcircle scaled 2radius rotated 90) shifted 
  1489. (z2-.5m); 
  1490. penlabels(1,2);  
  1491. endchar; 
  1492.  
  1493. cmchar "Simple slur below (smile)"; 
  1494. beginchar(oct"140",14u#,asc_height#,desc_depth#); 
  1495. adjust_fit(0,0); pickup rule.nib;  
  1496. lft x1=hround u; y1=vround(math_axis+.25x_height);  
  1497. x3=w-x1; y3=y1; penpos2(rule_thickness,90); x2=.5w;  
  1498. y2l=good.y -(.25x_height-math_axis);  
  1499. numeric theta; theta=angle((z2-z1)yscaled 3); 
  1500. penpos1(rule_thickness,90+theta); 
  1501. penpos3(rule_thickness,90-theta);  
  1502. draw z1{dir theta}...z2...{dir-theta}z3;  
  1503. penlabels(1,2,3); endchar; 
  1504.  
  1505. cmchar "Simple slur above (frown)"; 
  1506. beginchar(oct"141",14u#,asc_height#,desc_depth#); 
  1507. adjust_fit(0,0); pickup rule.nib;  
  1508. lft x1=hround u; y1=vround(math_axis-.25x_height);  
  1509. x3=w-x1; y3=y1;  
  1510. penpos2(rule_thickness,90); x2=.5w; y2=good.y(.25x_height+math_axis);  
  1511. numeric theta; theta=angle((z2-z1)yscaled 3); 
  1512. penpos1(rule_thickness,90+theta); 
  1513. penpos3(rule_thickness,90-theta);  
  1514. draw z1{dir theta}...z2...{dir-theta}z3; penlabels(1,2,3); 
  1515. endchar; 
  1516.  
  1517. cmchar "Very proper subset sign";  
  1518. compute_spread(.45x_height#,.55x_height#); 
  1519. spread#':=spread#; spread':=spread; % the spread of `$=$'  
  1520. spread':=spread'-rule_thickness; 
  1521. compute_spread(5/4x_height#,3/2x_height#); 
  1522. beginchar(oct"142",14u#,v_center(spread#+rule_thickness#)); 
  1523. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib; 
  1524. autorounded; lft x2=hround 1.5u-eps; x1=x3=w-x2; 
  1525. y1-y3=spread; y2=.5[y1,y3]=math_axis; x4=x5=.5w; y4=y1; 
  1526. y5=y3; draw z1---z4...z2{down}...z5---z3;  % arc and bars 
  1527. x1'=x3'=x1; y1-y1'=y3'-y3=spread'; 
  1528. x4'=x5'=x4; y4-y4'=y5'-y5=spread'; 
  1529. y2'=y2; x2'-x2=spread'; 
  1530. draw z1'--z4'..z2'{down}..z5'--z3'; 
  1531. penlabels(1,2,3,4,5,1',2',3',4',5'); endchar; 
  1532.  
  1533. cmchar "Very proper superset sign"; 
  1534. compute_spread(.45x_height#,.55x_height#); 
  1535. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  1536. spread':=spread'-rule_thickness; 
  1537. compute_spread(5/4x_height#,3/2x_height#); 
  1538. beginchar(oct"143",14u#,v_center(spread#+rule_thickness#)); 
  1539. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib; 
  1540. autorounded; lft x1=hround 1.5u-eps; x2=w-x1; x3=x1; 
  1541. y1-y3=spread; y2=.5[y1,y3]=math_axis; x4=x5=.5w; y4=y1; 
  1542. y5=y3; draw z1---z4...z2{down}...z5---z3;  % arc and bars 
  1543. x1'=x3'=x1; y1-y1'=y3'-y3=spread'; 
  1544. x4'=x5'=x4; y4-y4'=y5'-y5=spread'; 
  1545. y2'=y2; x2-x2'=spread'; 
  1546. draw z1'--z4'..z2'..z5'--z3'; 
  1547. penlabels(1,2,3,4,5,1',2',3',4',5'); endchar;  
  1548.  
  1549. cmchar "Parallel set union sign"; 
  1550. compute_spread(.45x_height#,.55x_height#); 
  1551. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  1552. spread':=spread'-rule_thickness; 
  1553. beginchar(oct"144",12u#,.8asc_height#,0);  
  1554. italcorr .8asc_height#*slant-.5u#;  
  1555. adjust_fit(0,0); pickup rule.nib; autorounded;  
  1556. lft x1=hround u; x2=x1; x3=w-x3; x4=x5=w-x1;  
  1557. y1=good.y h+o; bot y3=-o; y2=y4=2/3[y1,y3]; y5=y1;  
  1558. draw z1---z2...z3...z4---z5;  % stems and cup  
  1559. y1'=y5'=y1; x1'-x1=x5-x5'=spread'; 
  1560. y2'=y4'=y2+u; x2'-x2=x4-x4'=spread'; 
  1561. x3'=x3; y3'-y3=spread'; 
  1562. draw z1'..{down}z2'..z3'{right}..z4'{up}..z5'; 
  1563. penlabels(1,2,3,4,5,1',2',3',4',5'); endchar; 
  1564.  
  1565. cmchar "Parallel set intersection sign"; 
  1566. compute_spread(.45x_height#,.55x_height#); 
  1567. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  1568. spread':=spread'-rule_thickness; 
  1569. beginchar(oct"145",12u#,.8asc_height#,0);  
  1570. italcorr .8asc_height#*slant-.5u#; adjust_fit(0,0);  
  1571. pickup rule.nib; autorounded;  
  1572. lft x1=hround u; x2=x1; x3=w-x3; x4=x5=w-x1;  
  1573. y3=good.y h+o; bot y1=-o; y2=y4=2/3[y1,y3]; y5=y1;  
  1574. draw z1---z2...z3...z4---z5;  % stems and cap  
  1575. y1'=y5'=y1; x1'-x1=x5-x5'=spread'; 
  1576. y2'=y4'=y2-u; x2'-x2=x4-x4'=spread'; 
  1577. x3'=x3; y3-y3'=spread'; 
  1578. draw z1'..{up}z2'..z3'{right}..z4'{down}..z5'; 
  1579. penlabels(1,2,3,4,5,1',2',3',4',5'); endchar; 
  1580.   
  1581. cmchar "Subset or (double) equal to sign"; 
  1582. compute_spread(.45x_height#,.55x_height#); 
  1583. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  1584. compute_spread(5/4x_height#,3/2x_height#); 
  1585. beginchar(oct"152",14u#,v_center(2spread#'+spread#+2rule_thickness#)); 
  1586. adjust_fit(0,0); pickup rule.nib; autorounded; lft x2=hround 
  1587. 1.5u-eps; x1=x3=w-x2; y1-y3=spread; y2=.5[y1,y3]; top y1=h; 
  1588. x4=x5=.5w; y4=y1; y5=y3; draw z1---z4...z2{down}...z5---z3;  
  1589. % arc and bars 
  1590. x8=x1; x9=x2;  
  1591. y8=y9; y3-y9=spread'; draw z8--z9;  % lower bar  
  1592. x9'=x9; x8'=x8; y9'=y8'; y9-y9'=spread'; draw z8'--z9'; 
  1593. penlabels(1,2,3,4,5,8,9,8',9'); endchar; 
  1594.  
  1595. cmchar "Superset or (double) equal to sign"; 
  1596. compute_spread(.45x_height#,.55x_height#); 
  1597. spread#':=spread#; spread':=spread; % the spread of `$=$' 
  1598. compute_spread(5/4x_height#,3/2x_height#); 
  1599. beginchar(oct"153",14u#,v_center(2spread#'+spread#+2rule_thickness#)); 
  1600. adjust_fit(0,0); pickup rule.nib; autorounded; lft x1=hround 
  1601. 1.5u-eps; x2=w-x1; x3=x1; y1-y3=spread; y2=.5[y1,y3]; top 
  1602. y1=h; x4=x5=.5w; y4=y1; y5=y3; draw 
  1603. z1---z4...z2{down}...z5---z3;  % arc and bars 
  1604. x8=x1; 
  1605. x9=x2;  
  1606. y8=y9; y3-y9=spread'; draw z8--z9;  % lower bar  
  1607. x9'=x9; x8'=x8; y9'=y8'; y9-y9'=spread'; draw z8'--z9'; 
  1608. labels(1,2,3,4,5,8,9); endchar; 
  1609.  
  1610. cmchar "Christmas tree symbol";  
  1611. compute_spread(5/4x_height#,3/2x_height#); 
  1612. beginchar(oct"146",spread#+4u#,.8asc_height#,0); 
  1613. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib; 
  1614. autorounded;  
  1615. lft x1=1.5u; x3=w-x1; x2=.5[x1,x3]; 
  1616. bot y1=-d-o; y3=y1; top y2=h+o; 
  1617. draw z1{spread,u}...{up}z2; 
  1618. draw z3{-spread,u}...{up}z2; 
  1619. penlabels(1,2,3); endchar; 
  1620.  
  1621. cmchar "Inverted Christmas tree symbol";  
  1622. compute_spread(5/4x_height#,3/2x_height#); 
  1623. beginchar(oct"147",spread#+4u#,.8asc_height#,0); 
  1624. italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib; 
  1625. autorounded;  
  1626. lft x1=1.5u; x3=w-x1; x2=.5[x1,x3]; 
  1627. top y1=h+o; y3=y1; bot y2=-d-o; 
  1628. draw z1{spread,-u}...{down}z2; 
  1629. draw z3{-spread,-u}...{down}z2; 
  1630. penlabels(1,2,3); endchar; 
  1631.  
  1632. cmchar "Stylized lambda symbol"; 
  1633. beginchar(oct"150",14u#,asc_height#,0); 
  1634. adjust_fit(0,0); pickup rule.nib; autorounded; 
  1635. lft x1=u; top y1=h;
  1636. rt x2=w-u; bot y2=-o; 
  1637. draw z1--z2; 
  1638. z3=.5[z1,z2]; 
  1639. x4=x1; y4=y2; draw z3--z4; 
  1640. penlabels(1,2,3,4); endchar; 
  1641.  
  1642. cmchar "Reflected stylized lambda symbol"; 
  1643. beginchar(oct"151",14u#,asc_height#,0); 
  1644. adjust_fit(0,0); pickup rule.nib; autorounded; 
  1645. lft x1=u; bot y1=-o;
  1646. rt x2=w-u; top y2=h; 
  1647. draw z1--z2; 
  1648. z3=.5[z1,z2]; 
  1649. x4=x2; y4=y1; draw z3--z4; 
  1650. penlabels(1,2,3,4); endchar; 
  1651.  
  1652. cmchar "Sunrise symbol"; 
  1653. compute_spread(.45x_height#,.55x_height#);  
  1654. beginchar(oct "154",14u#,v_center(3spread#+rule_thickness#)); 
  1655. italcorr h#*slant-.5u#; adjust_fit(0,0); pickup rule.nib; 
  1656. lft x1=hround u-eps; x3=x1; x2=x4=w-x1; y1=y2; y3=y4; 
  1657. y1-y3=spread; .5[y1,y3]=math_axis;  
  1658. y5=y6=y1; x7=.5[x1,x2]; x5=.3[x1,x2];  
  1659. x2-x6=x5-x1; 
  1660. y7-y1=.5(x6-x5); 
  1661. draw z1--z5{up}...z7...{down}z6--z2;  % upper bar  
  1662. draw z3--z4;  % lower bar  
  1663. penlabels(1,2,3,4,5,6,7); endchar; 
  1664.  
  1665. cmchar "Sunrise-over-water symbol"; 
  1666. compute_spread(.45x_height#,.55x_height#);  
  1667. beginchar(oct "155",14u#,v_center(3spread#+rule_thickness#)); 
  1668. italcorr h#*slant-.5u#; adjust_fit(0,0); pickup rule.nib; 
  1669. lft x1=hround u-eps; x3=x1; x2=x4=w-x1; y1=y2; y3=y4; 
  1670. y1-y3=spread; .5[y1,y3]=math_axis;  
  1671. y5=y6=y1; x7=.5[x1,x2]; x5=.3[x1,x2];  
  1672. x2-x6=x5-x1; 
  1673. y7-y1=.5(x6-x5); 
  1674. x5'=x5; x7'=x7; x6'=x6; y5'=y6'=y3; y3-y7'=y7-y1; 
  1675. draw z1--z5{up}...z7...{down}z6--z2;  % upper bar  
  1676. draw z3--z5'{down}...z7'...{up}z6'--z4;  % lower bar  
  1677. penlabels(1,2,3,4,5,6,7); endchar; 
  1678.  
  1679. cmchar "Much, much less sign"; 
  1680. compute_spread(5/4x_height#,3/2x_height#); 
  1681. beginchar(oct"156",24u#,v_center(spread#+rule_thickness#)); 
  1682. adjust_fit(if monospace:-u#,-u# else: 0,0 fi); pickup 
  1683. rule.nib; lft x2=hround u-epsilon; x1=x3=hround 12.5u-x2;  
  1684. y1-y3=ceiling 1.1spread; y2=.5[y1,y3]=math_axis;  
  1685. draw z1--z2--z3;  % left diagonals  
  1686. z4-z1=z5-z2=z6-z3=z7-z4=z8-z5=z9-z6; 
  1687. x7=w-x2; y4=y1;  
  1688. draw z4--z5--z6;  % middle diagonals  
  1689. draw z7--z8--z9;  % right diagonals 
  1690. penlabels(1,2,3,4,5,6,7,8,9); endchar; 
  1691.  
  1692. cmchar "Much, much greater sign"; 
  1693. compute_spread(5/4x_height#,3/2x_height#); 
  1694. beginchar(oct"157",24u#,v_center(spread#+rule_thickness#)); 
  1695. adjust_fit(if monospace:-u#,-u# else: 0,0 fi); pickup 
  1696. rule.nib;  
  1697. lft x1=hround u-epsilon; x2=hround 12.5u-u; x1=x3;  
  1698. y1-y3=ceiling 1.1spread; y2=.5[y1,y3]=math_axis;  
  1699. draw z1--z2--z3;  % left diagonals  
  1700. z4-z1=z5-z2=z6-z3=z7-z4=z8-z5=z9-z6; 
  1701. x8=w-x1; y4=y1;  
  1702. draw z4--z5--z6;  % middle diagonals  
  1703. draw z7--z8--z9;  % right diagonals 
  1704. penlabels(1,2,3,4,5,6,7,8,9); endchar; 
  1705.  
  1706. cmchar "Northwest right angle symbol"; 
  1707. beginchar(oct"160",9u#, asc_height#, 0); 
  1708. adjust_fit(0,0); pickup rule.nib; 
  1709. x1=x2; lft x1=u; x3=w-x1; y2=y3; top y2=h; 
  1710. y2-y1=x3-x2;  
  1711. draw z1--z2--z3; 
  1712. penlabels(1,2,3); endchar; 
  1713.  
  1714. cmchar "Northeast right angle symbol"; 
  1715. beginchar(oct"161",9u#,asc_height#,0); 
  1716. adjust_fit(0,0); pickup rule.nib; 
  1717. lft x3=u; x2=w-x3; top y3=h; y3=y2; x1=x2; x2-x3=y2-y1; 
  1718. draw z1--z2--z3;  
  1719. penlabels(1,2,3); endchar; 
  1720.  
  1721. cmchar "Southwest right angle symbol"; 
  1722. beginchar(oct"170", 9u#, 7u#,0); 
  1723. adjust_fit(0,0); pickup rule.nib; 
  1724. lft x2=u; x3=w-x2; x1=x2; bot y2=-o; y3=y2; 
  1725. y1-y2=x3-x2; 
  1726. draw z1--z2--z3; 
  1727. penlabels(1,2,3); endchar; 
  1728.  
  1729. cmchar "Southeast right angle symbol"; 
  1730. beginchar(oct"171", 9u#, 7u#,0); 
  1731. adjust_fit(0,0); pickup rule.nib;  
  1732. lft x3=u; x2=w-x3; x1=x2; bot y2=-o; y3=y2; 
  1733. y1-y2=x2-x3; 
  1734. draw z1--z2--z3; 
  1735. penlabels(1,2,3); endchar; 
  1736.  
  1737. %% include these parameters to `shrink R and S so they  
  1738. %% fit inside a circle 
  1739. %           
  1740. begingroup 
  1741. save u, width_adj, cap_serif_fit, letter_fit, 
  1742.  body_height, cap_height, x_height, bar_height, comma_depth, 
  1743.  flare, cap_hair, stem, cap_stem, cap_curve, cap_ess, 
  1744.  cap_jut, beak_jut, beak, slab, cap_bar, cap_band, cap_notch_cut, 
  1745.  o, apex_o;  
  1746. numeric radius;
  1747. old.u:=u; old.cap_curve:=cap_curve; old.cap_height:=cap_height; 
  1748. old.u#:=u#; old.cap_curve#:=cap_curve#; old.cap_height#:=cap_height#; 
  1749. forsuffixes $=u, width_adj, cap_serif_fit, letter_fit, 
  1750.  body_height, cap_height, x_height, bar_height, 
  1751. comma_depth, flare, cap_hair, 
  1752. stem, cap_stem, cap_curve, cap_ess, 
  1753.  cap_jut, beak_jut, beak, 
  1754. slab, cap_bar, 
  1755. cap_band, cap_notch_cut, 
  1756.  o, apex_o:  $.#:=lower.$.#; endfor 
  1757. fudge:=lower.fudge;   
  1758. font_setup; 
  1759. % Changed by Stefan Lindner 15.03.1991         -sl
  1760. % original: radius=.5(6u++cap_height)+3u; radius=radius#*hppp;
  1761. radius#=.5(6u#++cap_height#)+3u#; radius:=radius#*hppp;
  1762. % end of change
  1763. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1764.  
  1765. cmchar "Circle-R brand"; 
  1766. beginchar(oct"162",13u#, .52cap_height#+radius#,radius#-.52cap_height#); 
  1767. adjust_fit(4u#,4u#); 
  1768. pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0); 
  1769. lft x1l=lft x2l=hround max(2u,3u-.5cap_stem');  
  1770. top y1=cap_height; bot y2=0; 
  1771. filldraw stroke z1e--z2e; % stem 
  1772. penpos3(cap_band,90); penpos4(cap_band,90); 
  1773. penpos5(cap_curve,0); 
  1774. penpos6(vair,-90); penpos7(vair,-90); 
  1775. z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7; 
  1776. x7=x2; y7l=vround(.5cap_height+.5vair); x4=x6; 
  1777. x4=.5w-.5u; x5r=hround(w-2.25u); 
  1778. x4l:=x6l:=x4-.125cap_curve; 
  1779. fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e;  % lobe 
  1780. pos6'(vair,-90); pos0(cap_stem,180); 
  1781.  pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0); 
  1782.  z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve); 
  1783.  y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r]; 
  1784.  bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7]; 
  1785.  filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up};  % tail 
  1786.  nodish_serif(1,2,a,1/3,cap_jut,b,1/3,.5cap_jut);  % upper serif 
  1787.  dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut);  % lower serif 
  1788.   % tail 
  1789. math_fit(0,.75ic#);   
  1790. pickup rule.nib; 
  1791. z100=(hround w/2,.52cap_height); z101=z100+(0,radius); z103=z100-(0,radius); 
  1792. z102=z100+(radius,0); z104=z100-(radius,0); 
  1793. draw z101...z102...z103...z104...cycle;
  1794. penlabels(0,1,2,3,4,5,6,7,8,9,10,100,101,102,103,104);  
  1795. endchar; 
  1796.  
  1797. cmchar "Circle-S brand"; 
  1798. beginchar(oct"163",10u#,radius#+.52cap_height#,radius#-.52cap_height#); 
  1799. adjust_fit(5u#,5u#); 
  1800. numeric theta; theta=90-angle(50u,cap_height); slope:=-cap_height/50u;  % angle at middle 
  1801. numeric s_slab; s_slab=slab; 
  1802. numeric ess'; ess'=max(fine.breadth,cap_ess); 
  1803. pickup fine.nib; pos2(max(fine.breadth,s_slab-vround vair_corr),-90); 
  1804. pos0(ess',theta); pos7(s_slab,-90); 
  1805. x2+x7=2x0=w; x7-x2=u; top y2l=cap_height+o; bot y7r=-o; 
  1806. y0=.52cap_height; lft x3l=hround u; rt x6r=hround(w-u); 
  1807. x3r-x3l=x6r-x6l=hround .5[s_slab,ess']-fine; 
  1808. ellipse_set(2l,3l,4l,0l); ellipse_set(2r,3r,4r,0r); y3=y3r; 
  1809. ellipse_set(7l,6l,5l,0l); ellipse_set(7r,6r,5r,0r); y6=y6r; 
  1810. filldraw stroke super_arc.e(2,3) & z3e{down} 
  1811.  ..z4e---z5e..z6e{down} & super_arc.e(6,7);  % main stroke 
  1812. pos1(hair,180); pos8(hair,180); 
  1813.  rt x1l=hround(w-1.5u); lft x8r=hround u; 
  1814.  bot y1=vround 2/3cap_height+1; top y8=vround 1/3cap_height-1; 
  1815.  filldraw stroke z1e{x2-x1,10(y2-y1)}....{left}z2e;  % upper arc 
  1816.  filldraw stroke z7e{left}....{up}z8e;  % lower arc 
  1817.  path upper_arc, lower_arc; 
  1818.  upper_arc=z1{x2-x1,10(y2-y1)}....{left}z2; 
  1819.  lower_arc=z7{left}....{up}z8; 
  1820.  pos10(.3[fine.breadth,cap_hair],0);  
  1821.  pos9(.3[fine.breadth,cap_hair],0); 
  1822.  x10r=x1l; top y10=top y2l; x9l=x8r; bot y9=bot y7r; 
  1823.  x1l-x1'=x8'-x8r=1.6cap_curve-fine; y1'=y1; y8'=y8; 
  1824.  numeric t; t=xpart(upper_arc intersectiontimes(z10l--z1')); 
  1825.  filldraw z1l--z10r--z10l--subpath(t,0) of upper_arc--cycle;  % upper barb 
  1826.  t:=xpart(lower_arc intersectiontimes(z9r--z8')); 
  1827.  filldraw z8r--z9l--z9r--subpath(t,1) of lower_arc--cycle;  % lower barb 
  1828. % lower arc and terminal 
  1829. math_fit(0,.5ic#);   
  1830. pickup rule.nib; 
  1831. z100=(hround w/2,.52cap_height); z101=z100+(0,radius); z103=z100-(0,radius); 
  1832. z102=z100+(radius,0); z104=z100-(radius,0); 
  1833. draw z101...z102...z103...z104...cycle;
  1834. penlabels(0,1,1',2,3,4,5,6,7,8,8',9,10,100,101,102,103,104);  
  1835. endchar;  
  1836. endgroup;
  1837.  
  1838.  
  1839. cmchar "Pitchfork symbol";
  1840. beginchar(oct"164",12u#,asc_height#,0);
  1841. italcorr .8asc_height#*slant-.5u#;
  1842. adjust_fit(0,0); pickup rule.nib; autorounded;
  1843. lft x1=hround u; x2=x1; x3=w-x3; x4=x5=w-x1;
  1844. y3=good.y .7h+o; bot y1=-o; y2=y4=2/3[y1,y3]; y5=y1;
  1845. draw z1---z2...z3...z4---z5;  % stems and cap 
  1846. x6=x7=good.x w/2; y6=y1; y7=h+o; 
  1847. draw z6--z7; % stem
  1848. penlabels(1,2,3,4,5,6,7); endchar;
  1849.  
  1850. cmchar "Dotted plus sign";
  1851. beginchar(oct"165",14u#,8u#+math_axis#,6u#-math_axis#); 
  1852. adjust_fit(0,0); pickup rule.nib;
  1853. x1=x2=good.x .5w; top y1=h-2.5rule_thickness+eps; .5[y1,y2]=math_axis;
  1854. lft x3=hround u-eps; x4=w-x3; y3=y4=math_axis;
  1855. draw z1--z2;  % stem
  1856. draw z3--z4;  % crossbar 
  1857. x5=x1;  y5=h+o;  
  1858. pickup pencircle scaled 2.5rule_thickness; drawdot z5;
  1859. penlabels(1,2,3,4,5); endchar;
  1860.  
  1861. cmchar "Inverted similarity sign";
  1862. compute_spread(.45x_height#,.55x_height#);
  1863. beginchar(oct"166",14u#,v_center(spread#+rule_thickness#));
  1864. adjust_fit(0,0);
  1865. pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness;
  1866. if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
  1867. lft x1=hround(u); x2=4u; x3=w-x2; x4=w-x1;
  1868. bot y2=bot y4=-d; top y1=top y3=h;
  1869. draw z1{down}...z2{right}..{right}z3...{down}z4;  % stroke
  1870. labels(1,2,3,4); endchar;
  1871.  
  1872. cmchar "Inverted similar or equal sign";
  1873. compute_spread(.45x_height#,.55x_height#);
  1874. beginchar(oct"167",14u#,v_center(2spread#+rule_thickness#));
  1875. adjust_fit(0,0);
  1876. pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness;
  1877. if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
  1878. lft x1=hround(u); x2=4u; x3=w-x2; x4=w-x1;
  1879. bot y2=bot y4=floor math_axis; top y1=top y3=h;
  1880. draw z1{down}...z2{right}..{right}z3...{down}z4;  % stroke
  1881. pickup rule.nib; lft x5=hround u-eps; x6=w-x5; y5=y6=math_axis-spread;
  1882. draw z5--z6;  % bar
  1883. labels(1,2,3,4,5,6); endchar;
  1884.  
  1885. cmchar "Iron cross";
  1886. beginchar(oct"172",15u#,asc_height#,0); adjust_fit(0,0); 
  1887. pickup pencircle scaled .5rule_thickness; 
  1888. numeric cross_tension; cross_tension=.9; 
  1889. numeric cross_foot; cross_foot=4u;
  1890. y0=.5[y1,y2]; x0=hround w/2; 
  1891. x1=x2=x0; bot y1=-o; lft x1l=3.5u; x1r=w-x1l; y1l=y1r=y1; 
  1892. top y2=h+o; x2r=x1l; x2l=x1r; y2l=y2r=y2; 
  1893. y3=y4=y0; x3=x0+eps; x4+x3=2x0; 
  1894. path p; p=z1l--z1r..tension cross_tension..z3..tension cross_tension 
  1895.  ..z2l--z2r..tension cross_tension..z4..tension cross_tension.. 
  1896.  z1l..cycle; 
  1897. filldraw p; 
  1898. p:=p shifted -z0; p:=p rotated 90; p:=p shifted z0; 
  1899. filldraw p; 
  1900. penlabels(0,1,2,3,4); endchar; 
  1901.  
  1902. cmchar "Bourbaki C symbol"; 
  1903. beginchar(oct"173",9u#, 1.1body_height#, 0); 
  1904. adjust_fit(0,0); pickup pencircle scaled 2rule_thickness; 
  1905. lft x4=lft x5=u; x1=x2=x8=x7=w-x4; x3=x6=hround 
  1906. w/2; 
  1907. bot y6=-o; top y3=h+o; y2=y4=y3-1.8u; y5=y7=y6+1.8u; 
  1908. y1=y2-2u; y8=y7+2u; 
  1909. draw z1--z2{up}..{left}z3..{down}z4--z5{down}..z6{right}..{up}z7--z8; 
  1910. labels(1,2,3,4,5,6,7,8); endchar; 
  1911.  
  1912. cmchar "Bourbaki T symbol"; 
  1913. beginchar(oct "174", 10u#, x_height#, desc_depth#); 
  1914. adjust_fit(0,0); pickup pencircle scaled 2rule_thickness; 
  1915. lft x1=u; x2=w-x1; top y1=top y2=h; x3=x4=hround w/2; y3=y1; 
  1916. bot y4=-1.1d; 
  1917. draw z1--z2; draw z3--z4; 
  1918. labels(1,2,3,4); endchar; 
  1919.  
  1920. cmchar "Circle-in-a-circle operator";
  1921. beginarithchar(oct"175"); pickup light_rule.nib; autorounded;
  1922. lft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
  1923. circle_points; draw_circle;  % circle 
  1924. pickup rule.nib; 
  1925. numeric x[],y[]; 
  1926. lft x6=hround 4.5u; x2=w-x6; y2=math_axis;  
  1927. top y8=y2+.5(rt x2-lft x6); circle_points; draw_circle; 
  1928. labels(1,2,3,4,5,6,7,8); endchar; 
  1929.  
  1930. cmchar "Asterisk-in-a-circle";
  1931. beginarithchar(oct"176");
  1932. pickup light_rule.nib; autorounded;
  1933. y2=math_axis; top y8=6u+math_axis;
  1934. lft x6=hround w/2 - 6u; x2=w-x6; 
  1935. circle_points; draw_circle;  % circle 
  1936. numeric x[], y[]; 
  1937. numeric ast_flare; ast_flare=hround .7[thin_join,stem]; 
  1938. x0=.5w; y0=math_axis; for d=-150 step 60 until 150: 
  1939. z[d]=z0+.5dir d xscaled 7.5u yscaled x_height; 
  1940.  numeric theta; theta=angle(z[d]-z0);
  1941.  fill z0+.5(0,-thin_join)rotated theta
  1942.   ---z[d]+.5(-ast_flare,-ast_flare)rotated theta
  1943.   ..z[d]..z[d]+.5(-ast_flare,ast_flare)rotated theta
  1944.   ---z0+.5(0,thin_join)rotated theta--cycle; endfor  % diagonal at angle |d|
  1945. labels(0,[-150],[-90],[-30],30,90,150); endchar;
  1946.  
  1947. cmchar "Bar-in-a-circle operator";
  1948. beginarithchar(oct"177"); pickup light_rule.nib; autorounded;
  1949. lft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
  1950. circle_points; draw_circle;  % circle 
  1951. y9=y10=y2; x9=x6+3u; x10=w-x9; 
  1952. draw z9--z10; 
  1953. labels(1,2,3,4,5,6,7,8,9,10); endchar; 
  1954.  
  1955.