Google
 

Trailing-Edge - PDP-10 Archives - SRI_NIC_PERM_SRC_3_19910112 - metafont/symlog.mf
There are no other files named symlog.mf in the archive.
% The Computer Modern Symbols family of fonts (by D. E. Knuth, 1979).
danger=0;
codingscheme "TEX MATHSY";
mi=1; input script;	% upper case script alphabet

if fixwidth=0:	texinfo slant, (6+2ls)pu, 3pu, 2pu, px, (18+4ls)pu;
else: texinfo slant, 9pu, 0, 0, px, 9pu;
fi;
% (The calling file should give the rest of the \&{texinfo}.)
new slant; slant=0; trxy 0;	% the non-script characters are unslanted

minus='000; cdot='001; rslash='004; pm='006; oplus='010; otimes='012;
eqv='021; leq='024; geq='025; sim='030; subset='032; supset='033; neq='034;
lftarrow='040; rtarrow='041; uparrow='042; dnarrow='043; dblarrow='044;
infinity='061; elt='062; under='065; forall='070; exists='071; not='072;
cup='133; cap='134; meet=-1; join=-1;
lbrace='146; rbrace='147; vert='152; sharp='161; int='163;
diamond=-1;
at='174; dollar='177;
squotes=-1;
input sym;	% this covers the more common symbols
"Times operator";
call charbegin('002,18,0,0,ph,1/sqrttwo[pa,ph-2pa],0);
cpen; x7=1/sqrttwo[.5r,u]; y7=1/sqrttwo[a,h];
x5=x7; x1=x3=r-x7; y1=y7; y3=y5; .5[y1,y3]=a;
w10 draw 7..3;	% upper left to lower right diagonal
draw 5..1.	% lower left to upper right diagonal
"Asterisk at the axis";
call charbegin('003,9,0,0,.5px+pa,.5px-pa,0);
new w99; w99=round(.6pixels.pw+blacker);	% thinner than hairline
new w98; w98=round .7[w99,w1];
cpen; top1y1=round(a+.5m); top1y1-bot1y2=m;
y0=.5[y1,y2]; x0=r-x0; x1=x2=x0;
x3=r-x4; x5=r-x6; x3=x5;	% left-right symmetry
y3=y4; y5=y6; y3-y5=y1-y0; .5[y3,y5]=y0;
x4-x0=(.5sqrt3)lft1 3.75u;	% asterisk will have 60-degree angles if $m=7.5u$
call `a cdraw(1,0,98,99);	% upper arm
call `b cdraw(2,0,98,99);	% lower arm
call `c cdraw(3,0,98,99);	% upper left arm
call `d cdraw(4,0,98,99);	% upper right arm
call `e cdraw(5,0,98,99);	% lower left arm
call `f cdraw(6,0,98,99).	% lower right arm
"Circle operator";
call charbegin('005,9,0,0,3.5pu+pa,3.5pu-pa,0);
cpen; x8=.5r; lft10x6=round u; top10y8=round(a+3.5u); y6=a;
call circle(1,2,3,4,5,6,7,8,w10).	% bowl
"Minus or plus sign";
cpen;
if fixwidth=0: if pa+6pu>ph:
		call charbegin('007,14,0,0,ph,ph-2pa,0); top10y1=h;
	else: call charbegin('007,14,0,0,6pu+pa,6pu-pa,0); top10y1=a+6u;
	fi;
else: call charbegin('007,9,0,0,3.5pu+pa,3.5pu-pa,0); top10y1=a+3.5u;
fi;
.5[y1,y2]=a; x1=x2=.5r;
lft10x3=round u; x4=r-x3; y3=y4=a;
w10 draw 1..2;	% stem
draw 3..4;	% plus bar
x5=x3; x6=x4; y5=y6=y1; draw 5..6.	% minus bar
"Circle-minus operator";
call charbegin('011,18,0,0,ph,ph-2pa,pa.slant-.5pu);
cpen; lft0x6=round u; y6=a; x8=r-x8; top0y8=h+oo;
call circle(1,2,3,4,5,6,7,8,w0);	% bowl
w0 draw 6..2.	% bar
"Circle-divide operator";
call charbegin('013,18,0,0,ph,ph-2pa,pa.slant-.5pu);
cpen; lft0x6=round u; y6=a; x8=r-x8; top0y8=h+oo;
call circle(1,2,3,4,5,6,7,8,w0);	% bowl
w0 draw 5..1.	% lower left to upper right diagonal
"Circle-dot operator";
call charbegin('014,18,0,0,ph,ph-2pa,pa.slant-.5pu);
cpen; lft0x6=round u; y6=a; x8=r-x8; top0y8=h+oo;
call circle(1,2,3,4,5,6,7,8,w0);	% bowl
x0=x8; y0=y2;
cpen; new w99; w99=w3sqrt2; w99 draw 0.	% dot
"Elementary division operator";
call charbegin('015,18,0,0,.5[px,ph],.5[px,ph]-2pa,0);
cpen; lft10x1=round u; x2=r-x1; y1=y2=a;
w10 draw 1..2;	% bar
new w99; w99=w3sqrt2;
top99y3=.5[m,h]; .5[y3,y4]=a;
x3=x4=.5r;
w99 draw 3; draw 4.	% dots
"Intercalation product operator";
call charbegin('016,9,0,0,px,pd+pb,0);
vpen; lft3x1=u; rt3x2=r-u; x3=x4=.5r;
top3y1=m; y1=y2=y3; bot6y4=-d-b;
w3 draw 1..2;	% bar
hpen; w3 draw 3..4.	% stem
"Bullet";
call charbegin('017,9,0,0,3.5pu+pa,3.5pu-pa,0);
cpen; x8=.5r; lft10x6=round u; top10y8=round(a+3.5u); y6=a;
call circle(1,2,3,4,5,6,7,8,w10);	% outer boundary
x0=x8; y0=y2;
cpen; w10 ddraw 1{x2-x8,y2-y8}..2{0,-1}..3{x4-x2,y4-y2}..4{-1,0}..
	5{x6-x4,y6-y4}..6{0,1}..7{x8-x6,y8-y6}..8{1,0}..1{x2-x8,y2-y8},
	0..0..0..0..0..0..0..0..0.	% fill it in
"Perpendicular sign or lattice bottom";
cpen;
if fixwidth=0: if pa+8pu>ph:
		call charbegin('020,18,0,0,ph,ph-2pa,0); top10y1=h;
	else: call charbegin('020,18,0,0,8pu+pa,8pu-pa,0); top10y1=a+8u;
	fi;
else: call charbegin('020,9,0,0,3.5pu+pa,3.5pu-pa,0); top10y1=a+3.5u;
fi;
.5[y1,y2]=a; x1=x2=.5r;
lft10x3=round u; x4=r-x3; y3=y4=y2;
w10 draw 1..2;	% stem
draw 3..4.	% bar
"Reflexive subset sign";
call charbegin('022,18,0,0,ph,ph-2pa,0);
cpen; lft10x1=round 2.5u; x2=x3=r-x1;
top10y2=h; .5[y2,y3]=y1; y2-y1=(good10 .5[m,h])-(good10 a);
x4=x5=.5r; y4=y2; y5=y3;
w10 draw 2..4{-1,0}..1{0,-1}..5{1,0}..3;	% stroke
x6=x1; x7=x2; y6=y7; bot10y6=2a-h;
draw 6..7.	% bar
"Reflexive superset sign";
call charbegin('023,18,0,0,ph,ph-2pa,0);
cpen; lft10x2=round 2.5u; x2=x3=r-x1;
top10y2=h; .5[y2,y3]=y1; y2-y1=(good10 .5[m,h])-(good10 a);
x4=x5=.5r; y4=y2; y5=y3;
w10 draw 2..4{1,0}..1{0,-1}..5{-1,0}..3;	% stroke
x6=x1; x7=x2; y6=y7; bot10y6=2a-h;
draw 6..7.	% bar
"Precedes or equals sign";
call charbegin('026,18,0,0,ph,ph-2pa,0);
vpen; lft10x1=round 2.5u; x2=x3=r-x1;
top10y2=h; .5[y2,y3]=y1; y2-y1=(good10 .5[m,h])-(good10 a);
x4=x5=x2; y4=y2+b; y5=y3-b;
w10 draw (4..)2..1{-1,0}..1{1,0}..3(..5);	% diagonals
x6=x1; x7=x2; y6=y7; bot10y6=2a-h;
draw 6..7.	% bar
"Follows or equals sign";
call charbegin('027,18,0,0,ph,ph-2pa,0);
vpen; lft10x2=round 2.5u; x2=x3=r-x1;
top10y2=h; .5[y2,y3]=y1; y2-y1=(good10 .5[m,h])-(good10 a);
x4=x5=x2; y4=y2+b; y5=y3-b;
w10 draw (4..)2..1{1,0}..1{-1,0}..3(..5);	% diagonals
x6=x1; x7=x2; y6=y7; bot10y6=2a-h;
draw 6..7.	% bar
"Approximate equality sign";
call charbegin('031,18,0,0,1.1(px-pe)+pa,1.1(px-pe)-pa,0);
vpen; top10y1=round(a+1.1(m-e)+eps); top10y1-bot10y2=round(m-e);
lft10x3=round u; y5=.5[y1,y2]; y3=y2; y4=y1; x4=r-x3; x5=r-x5;
x8=x3; x9=x4; x10=x5;
y1-y6=y2-y7=y3-y8=y4-y9=y5-y10=round 1.2(m-e);
call `a zdraw(3,1,5,2,4,w10,w10+deltaw,7.5u/(e-m));	% upper stroke
call `b zdraw(8,6,10,7,9,w10,w10+deltaw,7.5u/(e-m)).	% lower stroke
"Dot over equal sign";
call charbegin('035,18,0,0,ph,0,0);
cpen; lft10x1=round u; x3=x1; x2=x4=r-x1;
y1=y2; y3=y4; y1-y3=round(m-e); .5[y1,y3]=a;
w10 draw 1..2;	% upper bar
draw 3..4;	% lower bar
new w99;
if w3<w0sqrt2: w99=round w0 sqrt 2;
else: w99=w3;
fi;
x5=.5r; y5=.5[m,h]; w99 draw 5.	% dot
"Precedes sign";
call charbegin('036,18,0,0,.5[px,ph]+prt/2,.5[px,ph]+prt/2-2pa,0);
vpen; lft10x1=round 2.5u; x2=x3=r-x1;
y2=good10 .5[m,h]; .5[y2,y3]=y1=good10 a;
x4=x5=x2; y4=y2+b; y5=y3-b;
w10 draw (4..)2..1{-1,0}..1{1,0}..3(..5).	% diagonals
"Follows sign";
call charbegin('037,18,0,0,.5[px,ph]+prt/2,.5[px,ph]+prt/2-2pa,0);
vpen; lft10x2=round 2.5u; x2=x3=r-x1;
y2=good10 .5[m,h]; .5[y2,y3]=y1=good10 a;
x4=x5=x2; y4=y2+b; y5=y3-b;
w10 draw (4..)2..1{1,0}..1{-1,0}..3(..5).	% diagonals
"Much less sign";
call charbegin('045,18,0,0,.5[px,ph]+prt/2,.5[px,ph]+prt/2-2pa,0);
cpen; lft10x1=round u; rt10x2=round 11.5u; x3=x2;
y2=good10 .5[m,h]; .5[y2,y3]=y1=good10 a;
w10 draw 2..1..1..3;	% left diagonals
rt10x5=round(r-u); x6=x5; x4-x1=x5-x2; y4=y1; y5=y2; y6=y3;
draw 5..4..4..6.	% right diagonals
"Much greater sign";
call charbegin('046,18,0,0,.5[px,ph]+prt/2,.5[px,ph]+prt/2-2pa,0);
cpen; lft10x2=round u; rt10x1=round 11.5u; x3=x2;
y2=good10 .5[m,h]; .5[y2,y3]=y1=good10 a;
w10 draw 2..1..1..3;	% left diagonals
rt10x4=round(r-u); x6=x5; x4-x1=x5-x2; y4=y1; y5=y2; y6=y3;
draw 5..4..4..6.	% right diagonals
"Similar or equal sign";
call charbegin('047,18,0,0,px-pe+prt/2+pa,px-pe+prt/2-pa,0);
vpen; top10y1=round(a+(m-e)+eps); top10y1-bot10y2=round(m-e);
lft10x3=round u; y5=.5[y1,y2]; y3=y2; y4=y1; x4=r-x3; x5=r-x5;
call `a zdraw(3,1,5,2,4,w10,w10+deltaw,7.5u/(e-m));	% stroke
cpen; y6=y7; a-y6=round(m-e); lft10x6=round u; x7=r-x6;
w10 draw 6..7.	% bar
"Double leftward arrow";
call charbegin('050,18,0,0,.24ph+.5prt+.5(px-pe)+pa,
				.24ph+.5prt+.5(px-pe)-pa,0);
cpen; lft10x1=x0=round u; rt10x2=round(r-u); x11=x1; x12=x2;
y5=y8=good10 a; y1=y2; y11=y12; .5[y1,y11]=y5; y1-y11=round(m-e);
w10 draw 1..2; draw 11..12;	% bars
hpen; lft1x8=x0;
x5-x8=x8-x3=-fixwidth[3u,6u]-eps; x3=x4=x6=x7;
y3-y6=y11-y3=y4-y1=y7-y4=.24h+eps;
lpen#; w10+w1 ddraw (5..)8..3(..6), 11..11;	% erase excess at lower left
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower point
lpen#; w10+w1 ddraw (5..)8..4(..7), 1..1;	% erase excess at upper left
hpen; draw (|w1|5..)8..|w0|4(..7).	% upper point
"Double rightward arrow";
call charbegin('051,18,0,0,.24ph+.5prt+.5(px-pe)+pa,
				.24ph+.5prt+.5(px-pe)-pa,0);
cpen; lft10x2=round u; rt10x1=x0=round(r-u); x11=x1; x12=x2;
y5=y8=good10 a; y1=y2; y11=y12; .5[y1,y11]=y5; y1-y11=round(m-e);
w10 draw 1..2; draw 11..12;	% bars
hpen; rt1x8=x0;
x5-x8=x8-x3=fixwidth[3u,6u]+eps; x3=x4=x6=x7;
y3-y6=y11-y3=y4-y1=y7-y4=.24h+eps;
rpen#; w10+w1 ddraw (5..)8..3(..6), 11..11;	% erase excess at lower right
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower point
rpen#; w10+w1 ddraw (5..)8..4(..7), 1..1;	% erase excess at upper right
hpen; draw (|w1|5..)8..|w0|4(..7).	% upper point
"Double upward arrow";
call charbegin('052,9,0,0,ph,ph-2pa,0);
cpen; top10y1=y0=h; .5[y1,y2]=a; y11=y1; y12=y2;
x0=x5=x8=good10 .5r; x1=x2; x11=x12;
.5[x1,x11]=x5; x1-x11=round 3.5u;
w10 draw 1..2; draw 11..12;	% stems
vpen; top7y8=y0;
lpen#; 2u+w10 draw 0..8; rpen#; 2u+w10 draw 0..8;	% clean the top
y5-y8=y8-y3=.24h+eps; y3=y4=y6=y7;
x3-x6=x12-x3=x4-x1=x7-x4=3u+eps;
lpen#; 2u+w10 draw (5..)8..3(..6);	% erase excess at left
vpen; draw (|w7|5..)8..|w6|3(..6);	% left point
rpen#; 2u+w10 draw (5..)8..4(..7);	% erase excess at right
vpen; draw (|w7|5..)8..|w6|4(..7).	% right point
"Double downward arrow";
call charbegin('053,9,0,0,ph,ph-2pa,0);
cpen; top10y2=h; .5[y1,y2]=a; y0=bot10y1; y11=y1; y12=y2;
x0=x5=x8=good10 .5r; x1=x2; x11=x12;
.5[x1,x11]=x5; x1-x11=round 3.5u;
w10 draw 1..2; draw 11..12;	% stems
vpen; bot7y8=y0;
lpen#; 2u+w10 draw 0..8; rpen#; 2u+w10 draw 0..8;	% clean the top
y5-y8=y8-y3=-.24h-eps; y3=y4=y6=y7;
x3-x6=x12-x3=x4-x1=x7-x4=3u+eps;
lpen#; 2u+w10 draw (5..)8..3(..6);	% erase excess at left
vpen; draw (|w7|5..)8..|w6|3(..6);	% left point
rpen#; 2u+w10 draw (5..)8..4(..7);	% erase excess at right
vpen; draw (|w7|5..)8..|w6|4(..7).	% right point
"Double left-and-right arrow";
call charbegin('054,18,0,0,.24ph+.5prt+.5(px-pe)+pa,
				.24ph+.5prt+.5(px-pe)-pa,0);
cpen; lft10x2=x10=round u; rt10x1=x0=round(r-u); x11=x1; x12=x2;
y5=y8=good10 a; y1=y2; y11=y12; .5[y1,y11]=y5; y1-y11=round(m-e);
w10 draw 1..2; draw 11..12;	% bars
hpen; rt1x8=x0; lft1x18=x10;
x5-x8=x8-x3=x13-x18=x18-x15=fixwidth[3u,6u]+eps;
x3=x4=x6=x7; x13=x14=x16=x17;
y3-y6=y11-y3=y4-y1=y7-y4=.24h+eps;
y13=y3; y14=y4; y15=y5; y16=y6; y17=y7; y18=y8;
rpen#; w10+w1 ddraw (5..)8..3(..6), 11..11;	% erase excess at lower right
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower right point
rpen#; w10+w1 ddraw (5..)8..4(..7), 1..1;	% erase excess at upper right
hpen; draw (|w1|5..)8..|w0|4(..7);	% upper right point
lpen#; w10+w1 ddraw (15..)18..13(..16), 12..12;	% erase excess at lower left
hpen; draw (|w1|15..)18..|w0|13(..16);	% lower left point
lpen#; w10+w1 ddraw (15..)18..14(..17), 2..2;	% erase excess at upper left
hpen; draw (|w1|15..)18..|w0|14(..17).	% upper left point
"Left shift sign";
call charbegin('055,9,0,0,ph,.5pd,0);
cpen; lft10x1=x0=round u; rt10x2=round(r-u);
y1=y2=y5=y8=good10 .75h;
w10 draw 1..2;	% bar
x9=x2; bot10y9=-.5d; draw 2..9;	% stem
hpen; lft1x8=x0;
x5-x8=x8-x3=-3u-eps; x3=x4=x6=x7;
y3-y6=y1-y3=y4-y1=y7-y4=.24h+eps;
lpen#; w10+w1 draw (5..)8..3(..6);	% erase excess at lower left
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower point
lpen#; w10+w1 draw (5..)8..4(..7);	% erase excess at upper left
hpen; draw (|w1|5..)8..|w0|4(..7).	% upper point
"Right shift sign";
call charbegin('056,9,0,0,ph,.5pd,0);
cpen; lft10x2=round u; rt10x1=x0=round(r-u);
y1=y2=y5=y8=good10 .75h;
w10 draw 1..2;	% bar
x9=x2; bot10y9=-.5d; draw 2..9;	% stem
hpen; rt1x8=x0;
x5-x8=x8-x3=3u+eps; x3=x4=x6=x7;
y3-y6=y1-y3=y4-y1=y7-y4=.24h+eps;
rpen#; w10+w1 draw (5..)8..3(..6);	% erase excess at lower right
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower point
rpen#; w10+w1 draw (5..)8..4(..7);	% erase excess at upper right
hpen; draw (|w1|5..)8..|w0|4(..7).	% upper point
"Maps-to relation";
call charbegin('057,18,0,0,.24ph+.5prt+pa,.24ph+.5prt-pa,0);
cpen; lft10x2=round u; rt10x1=x0=round(r-u);
y0=y1=y2=y5=y8=good10 a;
w10 draw 1..2;	% bar
hpen; rt1x8=x0;
x5-x8=x8-x3=fixwidth[3u,6u]+eps; x3=x4=x6=x7;
y3-y6=y1-y3=y4-y1=y7-y4=.24h+eps;
rpen#; w10+w1 draw (5..)8..3(..6);	% erase excess at lower right
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower point
rpen#; w10+w1 draw (5..)8..4(..7);	% erase excess at upper right
hpen; draw (|w1|5..)8..|w0|4(..7);	% upper point
x9=x10=x2; y9=y4; y10=y3;
cpen; w10 draw 9..10.	% stem
"Prime symbol (intended as superscript only)";
call charbegin('060,4.5,0,0,.8ph,0,0);
new w98,w99; w98=round .5[w0,w1]; w99=round(bold+2deltaw);
cpen; top99y1=round .8h; rt99x1=r; bot98y2=0; lft98x2=0;
call cdraw(1,2,99,98).	% diagonal
"Nonelement sign";
call charbegin('063,12,0,0,ph,ph-2pa,0);
cpen; rt10x1=round(r-u); lft10x3=round u;
x5=x6=x1; x2=x4=.5(r+2u);
y1=y2=good10(.5[m,h]); y3=y6=a; y4=y5; .5[y5,y1]=y6;
w10 draw 1..2{-1,0}..3{0,-1}..4{1,0}..5;	% bowl
draw 3..6;	% bar
rt10x7=round(r-2u); lft10x8=round 2u; top10y7=h; .5[y7,y8]=a;
draw 7..8.	% diagonal
"Empty set symbol";
call charbegin('064,9,0,0,ph+pb,pb,0);
if fixwidth=0: new save; save=sqrttwo; new sqrttwo;
	sqrttwo=sqrt(1.23114413save);	% the constant is $2^{3/10}$
fi;
hpen;
if w1>1.5u: lft1x2=round .75u;
else: x2=good1 1.5u;
fi;
x1=r-x1;	% axis of left-right symmetry
x3=r-x2; top0y1=h+oo; bot0y2=-oo; y3=y2;
call `a darc(1,2,w1); call `b darc(1,3,w1);	% bowl
if fixwidth=0: new sqrttwo; sqrttwo=save;
fi;
cpen; rt10x7=round(r-2u); lft10x8=round 2u; top10y7=h+b; bot10y8=-b;
w10 draw 7..8.	% diagonal
"Angle sign";
call charbegin('066,12,0,0,ph,0,0);
cpen; lft10x2=round u; x1=x3=r-x2; top10y1=h; bot10y2=0; y3=y2;
w10 draw 1..2..2..3.	% diagonal and bar
% "Hardy's asymptotic equivalence sign";
% call charbegin('067,18,0,0,.5[px,ph]+prt/2,.5[px,ph]+prt/2-2pa,0);
% vpen; lft10x1=round u; x2=x3=r-x1; x4=x1;
% y1=y2=good10 1/3[m,h]; y3=y4; y1-a=a-y3;
% x5=x6=.5[x1,x2]; y5=good10 1/3[y1,y4]; y5-a=a-y6;
% w10 draw 1{x5-x1,2(y5-y1)}..5{1,0}..2{x2-x5,2(y2-y5)};	% upper bar
% draw 4{x6-x4,2(y6-y4)}..6{1,0}..3{x3-x6,2(y3-y6)}.	% lower bar
"Hebrew letter aleph";
call charbegin('073,11,0,0,ph,0,0);
vpen; lft6x1=round u; y1=2/3[m,h];
x4+x5=x3+x6=x2+x7=x0+x9=x1+x8=r; x2=x3=2.5u;
new aa; x2=aa[x1,x8]; y50=aa[y1,y8];
top5y50=top6y2; bot5y50=bot6y3;
x0=1.5u; top6y0=h; y4=y0; x4=5u;
y4+y5=y3+y6=y2+y7=y1+y8=y0+y9=h;
w6 ddraw 0..0{0,-1}..2{x8-x1,y8-y1}..6{x8-x1,y8-y1}..8{0,-1}..9(..5),
	(4..)0..1{0,-1}..3{x8-x1,y8-y1}..7{x8-x1,y8-y1}..
		9{0,-1}..9;	% long diagonal
hpen; x10=3.5u; new aa; x10=aa[x1,x8]; y10=aa[y1,y8];
x11=good1 2u; y11=e;
x12=.5[x11,x13]; y12=.5[y11,y13];
x13=good5 3.5u; y13=.2e;
x14=good5 2u; bot5y14=0;
draw |w0#|10{y8-y1,x1-x8}..|w1|11{0,-1}..
	|.5[w1,w5]|12{1.5(x13-x11),y13-y11}..
	|w5#|13{0,-1}..14{-1,0};	% lower left stroke
x15=7.75u; new aa; x15=aa[x1,x8]; y15=aa[y1,y8];
x16=.5[x21,x28]; y16=.5[y21,y28];
vpen; lft6x21=round 7u; y21=y1;
x20+x29=x21+x28=x22+x27=x24+x25; x28=x8;
y20+y29=y21+y28=y22+y27=y24+y25; y28=.25[m,h];
top5y16=top6y22; x22=x27;
x20=7.5u; x24=9.5u; y20=y24=y0;
w6 ddraw 20..20{0,-1}..22{x28-x21,y28-y21}..28{0,-1}..29(..25),
	(24..)20..21{0,-1}..27{x28-x21,y28-y21}..
		29{0,-1}..29;	% short diagonal
draw 15{0,1}..16{0,1}.	% link
"Upper case Fraktur R";
call charbegin('074,13,0,0,ph,0,0);
new w99; w99=round .25[w0,w1];
hpen; lft0x1=round u; y1=1/3[e,m]; x2=2u; y2=e;
w0 draw 1{0,-1}..2{1,0};	% point of upper left flourish
x3=3u; top0y3=h+oo; lft99x4=round u;
x5=2u; y5=1/3[m,h]; rt99x6=round 3.5u;
call `a sdraw(3,4,5,6,2,w99,w8,-(h-e)/(8u));	% flourish
x7=x8=good4 6u; y7=m; y8=e;
call `b arc(3,7,w4);	% upper link
w4 draw 7..8;	% stem
x9=3.5u; bot0y9=-oo; call `c arc(9,8,w4);	% lower link
x10=5/3u; y10=.3e; x11=4/3u;
x12=u; y12=.35e; x13=2u; y13=.45e;
new aa; x11=x10+aa(y12-y13);
y11=y10+aa(x13-x12);	% perpendicular to $12\to13$
w0 draw 9{-1,0}..10{x11-x10,y11-y10}..11;	% tail
draw 12..13;	% cross
x14=x7; y14=.75h; x15=9.5u; top99y15=h+o;
draw 14{0,1}..15{1,0};	% top of bowl
lft4x16=11.5u; y16=.6h;
w4 draw 15..16;	% diagonal of bowl
lft99x17=lft4x16; y17=y16;
rt99x26=rt4x15; y26=y15;
new aa,bb; rt99x18=aa[rt4x15,rt4x16]; y18=aa[y15,y16];
x18=x17+bb(y15-y16); y18=y17+bb(x16-x15);	% perpendicular to $15\to16$
rpen#; w4 draw 17..18;	% erase excess
hpen; w99 draw 15..26..26..18;	% reinforcements
x20=x7; y20=y21=.52h; x21=9u;
w99 draw 20..21{1,0}..17{x18-x17,y18-y17}..18;	% bottom of bowl
x22=9.25u; y22=.5e; lft99x24=lft4x23; bot4y23=-o;
x24=10.5u; y24=y23; rt99x25=12.5u; y25=e/4;
w4 draw 21..22{x22-x21,y22-y21}..23{1,0};	% lower diagonal
rpen#; w4 draw 24..25;	% erase excess at lower right
hpen; w99 draw 24..25.	% point of lower right diagonal
"Upper case Fraktur I";
call charbegin('075,13,0,0,ph,0,0);
% (this letter extended to be same width as the R)
new w99; w99=round .25[w0,w1];
hpen; x1=5u; y1=good6 .5h; lft99x2=round u; y2=.75h;
x3=x1; top99y3=h+oo;
w99 draw 1{-1,0}..2{0,1}..3{1,0};	% shoulder
x4=9u; y4=.75h; x5=10.5u; bot99y5=2/3h+1;
rt99x6=12.5u; bot99y6=.75h+1;
draw |w99#|3{1,0}..|w4#|4{6u,-h}..|w99#|5{1,0}..6{0,1};	% upper stroke
lft4x7=round u; y7=good6 .25h;
x8=7u; bot4y8=-oo;
x9=good4 10.5u; y9=h/6;
x10=good4 8.5u; y10=.45h;
x11=1/sqrttwo[x12,x10]; y11=1/sqrttwo[y10,y12];
x12=x9; top99y12=.625h;
rt99x13=round 12.5u; y13=.5h;
draw |w4|7{1,0}..8{1,0}..9{0,1}..|w4#|10{0,1}..
	|2/3[w99,w4]|11{x12-x10,y12-y10}..|w99#|12..13{0,-1}.	% lower stroke
"Lattice top";
cpen;
if fixwidth=0: if pa+8pu>ph:
		call charbegin('076,18,0,0,ph,ph-2pa,0); top10y1=h;
	else: call charbegin('076,18,0,0,8pu+pa,8pu-pa,0); top10y1=a+8u;
	fi;
else: call charbegin('076,9,0,0,3.5pu+pa,3.5pu-pa,0); top10y1=a+3.5u;
fi;
.5[y1,y2]=a; x1=x2=.5r;
lft10x3=round u; x4=r-x3; y3=y4=y1;
w10 draw 1..2;	% stem
draw 3..4.	% bar
"Zero-width slash to negate a relation";
call charbegin('100,18,0,0,ph+pb,ph+pb-2pa,0);
charwd 0; chardw 0;
cpen; rt10x1=round(r-2u); lft10x2=round 2u;
top10y1=h+b; .5[y1,y2]=a;
w10 draw 1..2.	% diagonal
"Multiset union sign";
call charbegin('135,13,0,0,ph,ph-2pa,0);
cpen; lft10x1=round u; x2=x1; x3=r-x3; x4=x5=r-x1;
y1=good10(.5[m,h]); .5[y1,y3]=a; y2=y4=2/3[y1,y3]; y5=y1;
call qcirc(3,6,2,w10); call qcirc(3,7,4,w10);	% cup
w10 draw 1..2; draw 4..5;	% stems
y8=y9=.47[y1,y3]; x8=r-x9=x1+1.75w10-eps;
x10=x11=x3; .5[y10,y11]=y8; y11-y10=x9-x8;
draw 8..9; draw 10..11.	% enclosed plus sign
"Left floor bracket";
call charbegin('142,7,0,0,ph+pb,ph+pb-2pa,0);
cpen; x1=x2=good10 2.5u; x3=x1+3.75u+eps;
top10y1=h+b; .5[y1,y2]=a; y3=y2;
w10 draw 1..2..2..3.	% stem and bar
"Right floor bracket";
call charbegin('143,7,0,0,ph+pb,ph+pb-2pa,0);
cpen; x1=x2=good10(r-2.5u); x3=x1-3.75u-eps;
top10y1=h+b; .5[y1,y2]=a; y3=y2;
w10 draw 1..2..2..3.	% stem and bar
"Left ceiling bracket";
call charbegin('144,7,0,0,ph+pb,ph+pb-2pa,0);
cpen; x1=x2=good10 2.5u; x3=x1+3.75u+eps;
top10y1=h+b; .5[y1,y2]=a; y3=y1;
w10 draw 3..1..1..2.	% bar and stem
"Right ceiling bracket";
call charbegin('145,7,0,0,ph+pb,ph+pb-2pa,0);
cpen; x1=x2=good10(r-2.5u); x3=x1-3.75u-eps;
top10y1=h+b; .5[y1,y2]=a; y3=y1;
w10 draw 3..1..1..2.	% bar and stem
"Left angle bracket";
call charbegin('150,6,0,0,ph+pb,ph+pb-2pa,0);
cpen; rt10x1=round(r-u); x1=x3; lft10x2=round fixwidth[u,7/3u];
top10y1=h+b; .5[y1,y3]=y2=good10a;
w10 draw 1..2..2..3.	% diagonals
"Right angle bracket";
call charbegin('151,6,0,0,ph+pb,ph+pb-2pa,0);
cpen; rt10(r-x1)=round(r-u); x1=x3; lft10(r-x2)=round fixwidth[u,7/3u];
top10y1=h+b; .5[y1,y3]=y2=good10a;
w10 draw 1..2..2..3.	% diagonals
"Double vertical line (norm or cardinality)";
call charbegin('153,9,0,0,ph+pb,ph+pb-2pa,0);
cpen; x1=x2=good10 .25r; top10y1=h+b; .5[y1,y2]=a;
x3=x4=r-x1; y3=y1; y4=y2;
w10 draw 1..2; draw 3..4.	% stems
"Double left bracket";
call charbegin('154,8,0,0,ph+pb,ph+pb-2pa,0);
cpen; x1=x2=good10 2.5u; x3=x4=x1+4.75u+eps; x5=x6=x1+round 3u;
top10y1=h+b; .5[y1,y2]=a; y3=y5=y1; y4=y6=y2;
w10 draw 3..1..1..2..2..4;	% bars and left stem
draw 5..6.	% right stem
"Double right bracket";
call charbegin('155,8,0,0,ph+pb,ph+pb-2pa,0);
cpen; x1=x2=good10(r-2.5u);
x3=x4=x1-4.75u-eps; x5=x6=x1-round 3u;
top10y1=h+b; .5[y1,y2]=a; y3=y5=y1; y4=y6=y2;
w10 draw 3..1..1..2..2..4;	% bars and right stem
draw 5..6.	% left stem
"Radical sign";
call charbegin('160,15,0,0,ph+pb,ph+pb-2pa,0);
hpen; x1=good10(20/3u); x2=r+1; top10y2=h+b; .5[y1,y2]=a;
y3=y5=y7=good6a; y4=y6=y1;
x7=1.5[x2,x1]; lft10x7=lft2x3; rt2x3=rt0x5;
lft10x1=lft2x4; rt2x4=rt0x6;
x8=x7-u; new aa; x8=aa[x5,x2]; y8=aa[y5,y2];
hpen; w2 draw 3..4;	% left diagonal
w10 draw 7..4; w0 draw 5..6;	% sharpen the corners
lpen#; w2 draw 8..5;	% erase excess at upper left
hpen; w0 draw 8..5;	% serif
rpen#; w2 draw 1..2;	% erase excess at lower right
hpen; w10 draw 1..2.	% right diagonal
"Nabla or backwards-difference operator";
call charbegin('162,15,0,0,ph,0,0);
hpen; rt0x2=round(r-u); lft4x4=round u; top0y2=h; top4y4=h;
bot4y5=-o; y6=y5;
x6-x2=x4-x5; lft4x5=lft0x6; x1=x2; x3=x4;
vpen; top8y1=h; y3=y1;
w9 draw 1..3;	% bar line
lpen#; w9 draw 5..4;	% erase excess at upper left
hpen; w4 draw 5..4;	% left diagonal
rpen#; w4 draw 6..2; w9 draw 6..2;	% erase excess at right
hpen; w0 draw 6..2;	% right diagonal
y7=y4; lft0x7=lft4x4;
w0 draw 2..7..7..6.	% sharpen upper left corner
"Square set union sign (Scott lub)";
call charbegin('164,13,0,0,ph,ph-2pa,0);
cpen; lft10x1=round u; x2=x1; x4=x5=r-x1;
y1=good10(.5[m,h]); .5[y1,y2]=a; y2=y4; y5=y1;
w10 draw 1..2..2..4..4..5.	% stroke
"Square set intersection sign (Scott glb)";
call charbegin('165,13,0,0,ph,ph-2pa,0);
cpen; lft10x1=round u; x2=x1; x4=x5=r-x1;
y2=good10(.5[m,h]); .5[y1,y2]=a; y2=y4; y5=y1;
w10 draw 1..2..2..4..4..5.	% stroke
"Square reflexive subset sign";
call charbegin('166,18,0,0,ph,ph-2pa,0);
cpen; lft10x6=round 2.5u; x2=x3=x7=r-x6; lft10x4=round x6;
top10y2=h; .5[y2,y3]=y1; y2-y1=(good10 .5[m,h])-(good10 a);
x4=x5; y4=y2; y5=y3;
w10 draw 2..4..4..5..5..3;	% stroke
y6=y7; bot10y6=2a-h;
draw 6..7.	% bar
"Section sign";
call charbegin('170,8,0,0,ph,pd,0);
hpen; x1=x4=.5r; rt0x2=rt1x3=round(r-1.5u); lft0x5=lft1x6=round 1.5u;
top0y1=h+oo; bot0y4=-d-oo;
y2=y3=.125[y1,y4]; y5=y6=.125[y4,y1];
w0 draw 1{1,0}..2{0,-1};	% upper link
draw 4{-1,0}..5{0,1};	% lower link
cpen; w1 draw 3; draw 6;	% bulbs
x7=x11=x5; x9=x12=x2; x8=x10=x1;
y8=1/3[y1,y4]; y10=1/3[y4,y1];
call `a sdraw(1,7,8,9,10,w1-deltaw,w0,-(h+d)/(36u));	% upper stroke
call `b sdraw(8,11,10,12,4,w1-deltaw,w0,-(h+d)/(36u)).	% lower stroke
"Dagger mark";
call charbegin('171,8,0,0,ph,pd,0);
cpen; x1=x2=x3=x4=good1(.5r); lft1x5=round u; x6-x2=x2-x5;
top1y1=h; bot6y4=-d; y2=y5=y6=good1m; y3=e;
w1 draw 1; draw 5; draw 6;	% bulbs
hpen; draw |w1|1..|w0|2;	% top stem
draw |w0|2..|(round .5[w0,w1])-eps #|3..|w0|4;	% bottom stem
vpen; draw |w1|5..|w0|2; draw |w1|6..|w0|2.	% bars
"Double dagger mark";
call charbegin('172,8,0,0,ph,pd,0);
cpen; x1=x2=x3=x6=x7=x8=good1(.5r); lft1x4=round u; x5-x2=x2-x4;
x9=x4; x10=x5;
top1y1=h; bot1y3=.5[y1,y8]=top1y6; bot1y8=-d;
y2=y4=y5=good1 .5[y1,y3]; y7=y9=y10=good1 .5[y6,y8];
w1 draw 1; draw 3; draw 4; draw 5; draw 6; draw 8; draw 9; draw 10;	% bulbs
hpen; draw |w1|1..|w0|2; draw |w1|3..|w0|2;
	draw |w1|6..|w0|7; draw |w1|8..|w0|7;	% stems
vpen; draw |w1|4..|w0|2; draw |w1|5..|w0|2;
	draw |w1|9..|w0|7; draw |w1|10..|w0|7.	% bars
"Paragraph mark";
call charbegin('173,11,0,0,ph,pd,0);
cpen; top10y1=h; bot10y6=-d; y4=y7=y9=y1;
y8=y6; y3=y5=good10 .5[y1,y6];
lft10x2=round u; y2=.5[y1,y3]; x1=x3=.5r; x4=x5=x6=good10 .5(r+2u);
x7=x8=x6+2u; x9=r-u;
w10 ddraw 4..1{-1,0}..2{0,-1}..3{1,0}..5, 4..4..4..5..5;	% filled bowl
draw 6..4..4..9;	% left stem and upper serif
draw 7..8.	% right stem
"Copyright symbol";
call charbegin('175,18,0,0,ph,pd,0);
new up; up=.5((h-m)-d);	% amount to raise baseline of lowercase c
cpen; rt3x1=round(r-6u);
if top3(top3top6e+2)>.9[e,m]: top3y1=.9[e,m]+up;
else: y1=top3top6e+2+up;
fi;
w3 draw 1;	% bulb
hpen; rt0x2=rt3x1; y2=y1; x3=x5=.5(r+u); top0y3=m+oo+up;
w0 draw 2{0,1}..3{-1,0};	% shoulder
if w2>1.5u: lft2x4=round(5.75u);
else: x4=good2 6.5u;
fi;
y4=y5; bot0y5=-oo+up;
call `a darc(3,4,w2);	% stroke
if w0=w1: x6=x2; x7-x5=x5-x4; y7=.5[y3,y5];
	new aa; x6=aa[x5,x7]; y6=(sqrt(1-aa.aa))[y7,y5];
else: lft0x6=rt0x2; y6=.5e-1+up; x7=x6; y7=e+up;
fi;
w0 draw 5{1,0}..6(..7);	% point
cpen; top10y18=h+oo; bot10y14=-d-oo;
lft10x16=round u; rt10x12=round(r-u);
call circle(11,12,13,14,15,16,17,18,w10).	% enclosing cirle
"Sterling sign";
call charbegin('176,12,0,0,ph,0,0);
hpen; x1=7.5u; top0y1=h+oo; rt0x2=rt2x3=round(r-1.5u);
y2=y3=.75h; y4=y5=.5h; x4=3u-eps; x5=7.5u+eps;
x6=x7=good1 5u; y6=.75[y8,y1]; y7=.25[y8,y1]; bot0y8=-oo;
x8=2.5u; lft0x9=round u; y9=.1h;
w0 draw 1{1,0}..2{0,-1};	% link
cpen; w2 draw 3;	% bulb
call `a arc(1,6,w1);	% shoulder
hpen; w1 draw 6..7;	% stem
w0 draw 4..5;	% bar
call `b arc(8,7,w1); call `c arc(8,9,w0);	% loop
top11y10=round .2h; bot11y12=-oo;
x11=.5[x8,x13]-u; y11=y9;
rt0x13=round(r-u); y13=.2h;
call `d zdraw(9,10,11,12,13,w11,w7,-(x13-x8-4u)/(.2h)).	% arm
 input lsym;   % logical characters