summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts/source/public/mathabx/mathsymb.mf
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/mathabx/mathsymb.mf')
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathsymb.mf1001
1 files changed, 1001 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathsymb.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathsymb.mf
new file mode 100644
index 00000000000..d5f5ad770ae
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathsymb.mf
@@ -0,0 +1,1001 @@
+% mathematical symbols by Anthony Phan.
+% file: mathsymb.mf (various mathematical symbols)
+% last modification: May 16, 2005.
+% Only known charcodes will be generated.
+
+def horizontal_rules_list=math_axis,
+ -body_depth,-desc_depth,x_height,cap_height,asc_height,body_height
+enddef;
+
+%%% !!! marked signs are to be revised
+
+use_rule1;
+
+%
+% Usual binary relations.
+%
+
+beginchar(negation_sign,12u#+2appr#,v_center(spread1#+rth#));
+ "Negation sign";
+ pickup tiny.nib;
+ pos1(rth,90); pos3(rth,0);
+ y2r=y1r; y2l=y1l; x2l=x3l; x2r=x3r;
+ y1=math_axis+0.5spread1; y1l-y3=spread1;
+ lft x1=Appr; rt x3r=w-Appr;
+ filldraw stroke z1e--z2e--z3e;
+ penlabels(1,2,3);
+endchar;
+
+beginchar(not_sign,12u#+2appr#,asc_height#,asc_depth#);
+ "Not sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0);
+ top y1=h+eps; 0.5[bot y2,top y1]=math_axis;
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+ charwd:=0; w:=0;
+endchar;
+
+beginchar(varnot_sign,12u#+2appr#,asc_height#,asc_depth#);
+ "Variant not sign";
+ pickup tiny.nib;
+ lft x2l=w-rt x1r=appr+hround 1.75u;
+ top y1r=h+eps; 0.5[bot y2l,top y1r]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+ charwd:=0; w:=0;
+endchar;
+
+%
+% equality signs and related things (relations).
+%
+
+beginchar(colon_sign,3u#+2appr#,x_height#,0);
+ "Colon";
+ pickup null.nib;
+ adjust_dot1((0.5w,h-0.5dtsz),dtsz,false,false);
+ adjust_dot2((0.5w,0.5dtsz),dtsz,false,false);
+ dot(1,1'); dot(2,2');
+endchar;
+
+beginchar(colon_equal_sign,15u#+2appr#,v_center(spread1#+rth#));
+ "Colon-equal sign";
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ lft x1=lft x3=Appr+hround 3u; rt x2=rt x4=w-Appr;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4); pickup null.nib;
+ adjust_dot5((appr+1.5u,math_axis
+ +0.5max(0.5[x_height-dtsz,spread1],spread1)),
+ dtsz,false,false); dot(5,5');
+ adjust_dot6((appr+1.5u,math_axis
+ -0.5max(0.5[x_height-dtsz,spread1],spread1)),
+ dtsz,false,false); dot(6,6');
+endchar;
+
+beginchar(equal_colon_sign,15u#+2appr#,v_center(spread1#+rth#));
+ "Equal-colon sign";
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ lft x1=lft x3=Appr; rt x2=rt x4=w-Appr-hround 3u;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4); pickup null.nib;
+ adjust_dot5((w-appr-1.5u,math_axis
+ +0.5max(0.5[x_height-dtsz,spread1],spread1)),
+ dtsz,false,false);
+ adjust_dot6((w-appr-1.5u,math_axis
+ -0.5max(0.5[x_height-dtsz,spread1],spread1)),
+ dtsz,false,false);
+ dot(5,5'); dot(6,6');
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(top_dot_equal_sign,arithmetic_bounds);
+ "Top dot equal sign";
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ lft x1=lft x3=Appr; rt x2=rt x4=w-Appr;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4); pickup null.nib;
+ adjust_dot5((0.5[x1,x2],
+ min(y1+math_spread[0.5x_height,0.6x_height],h-0.5dtsz)),
+ dtsz,true,false); dot(5,5');
+endchar;
+
+beginchar(bot_dot_equal_sign,arithmetic_bounds);
+ "Bot dot equal sign";
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ lft x1=lft x3=Appr; rt x2=rt x4=w-Appr;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4); pickup null.nib;
+ adjust_dot5((0.5[x1,x2],
+ max(y3-math_spread[0.5x_height,0.6x_height],-d+0.5dtsz)),
+ dtsz,true,false); dot(5,5');
+endchar;
+
+beginchar(top_bot_dot_equal_sign,arithmetic_bounds);
+ "Top bot dot equal sign";
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ lft x1=lft x3=Appr; rt x2=rt x4=w-Appr;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4); pickup null.nib;
+ adjust_dot5((0.5[x1,x2],
+ min(y1+math_spread[0.5x_height,0.6x_height],h-0.5dtsz)),
+ dtsz,true,false); dot(5,5');
+ adjust_dot6((0.5[x1,x2],
+ max(y3-math_spread[0.5x_height,0.6x_height],-d+0.5dtsz)),
+ dtsz,true,false); dot(6,6');
+endchar;
+
+beginchar(rising_dots_equal_sign,arithmetic_bounds);
+ "Rising dots equal sign";
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ lft x1=lft x3=Appr; rt x2=rt x4=w-Appr;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4); pickup null.nib;
+ adjust_dot5((w-appr-0.5dtsz,
+ min(y1+math_spread[0.5x_height,0.6x_height],h-0.5dtsz)),
+ dtsz,false,false); dot(5,5');
+ adjust_dot6((appr+0.5dtsz,
+ max(y3-math_spread[0.5x_height,0.6x_height],-d+0.5dtsz)),
+ dtsz,false,false); dot(6,6');
+endchar;
+
+beginchar(falling_dots_equal_sign,arithmetic_bounds);
+ "Falling dots equal sign";
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ lft x1=lft x3=Appr; rt x2=rt x4=w-Appr;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4); pickup null.nib;
+ adjust_dot5((appr+0.5dtsz,
+ min(y1+math_spread[0.5x_height,0.6x_height],h-0.5dtsz)),
+ dtsz,false,false); dot(5,5');
+ adjust_dot6((w-appr-0.5dtsz,
+ max(y3-math_spread[0.5x_height,0.6x_height],-d+0.5dtsz)),
+ dtsz,false,false); dot(6,6');
+endchar;
+
+beginchar(bump_equal,12u#+2appr#,v_center(spread1#+rth#));
+ "bumped equal sign";
+ numeric t[];
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ pos5(rth,180); pos6(rth,90); pos7(rth,0);
+ lft x1=lft x3=appr; rt x2=rt x4=w-appr;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ rt x5l=hround 1/3[lft x1,rt x2]; x5l-x1=x2-x7l;
+ y5=y7=y1l; x6=0.5[x5,x7]; y6l-y1l=vround 0.5(x7l-x5l);
+ tmp_path:=z7r up_to_left z6r left_to_down z5r;
+ t1=xpart(tmp_path intersectiontimes (z2r..0.5[z1r,z2r]));
+ t2=xpart(tmp_path intersectiontimes (z1r..0.5[z1r,z2r]));
+ filldraw z1l--z5l up_to_right z6l right_to_down z7l--z2l--
+ z2r--subpath(t1,t2) of tmp_path--z1r--cycle;
+ filldraw stroke z3e..z4e; penlabels(1,2,3,4,5,6,7);
+endchar;
+
+beginchar(pump_equal,12u#+2appr#,v_center(spread1#+rth#));
+ "pumped equal sign";
+ numeric t[];
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ pos8(rth,0); pos9(rth,90); pos10(rth,180);
+ lft x1=lft x3=appr; rt x2=rt x4=w-appr;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ rt x8r=hround 1/3[lft x1,rt x2]; x8r-x3=x4-x10r;
+ y8=y10=y3r; x9=0.5[x8,x10]; y3r-y9r=vround 0.5(x10r-x8r);
+ tmp_path:=z8l down_to_right z9l right_to_up z10l;
+ t1=xpart(tmp_path intersectiontimes (z3l..0.5[z3l,z4l]));
+ t2=xpart(tmp_path intersectiontimes (z4l..0.5[z3l,z4l]));
+ filldraw z3l--subpath(t1,t2) of tmp_path--z4l
+ --z4r--z10r up_to_left z9r left_to_down z8r--z3r--cycle;
+ filldraw stroke z1e..z2e; penlabels(1,2,3,4,8,9,10);
+endchar;
+
+beginchar(Bump_equal,12u#+2appr#,v_center(spread1#+rth#));
+ "Bumped equal";
+ numeric t[];
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ pos5(rth,180); pos6(rth,90); pos7(rth,0); pos8(rth,0);
+ pos9(rth,90); pos10(rth,180);
+ lft x1=lft x3=appr; rt x2=rt x4=w-appr;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ rt x5l=rt x8r=hround 1/3[lft x1,rt x2]; x5l-x1=x2-x7l; x10r=x7l;
+ y5=y7=y1l; y8=y10=y3r; x6=x9=0.5[x5,x7];
+ y6l-y1l=y3r-y9r=vround 0.5(x7l-x5l);
+ tmp_path:=z7r up_to_left z6r left_to_down z5r;
+ tmpp_path:=z8l down_to_right z9l right_to_up z10l;
+ t1=xpart(tmp_path intersectiontimes (z2r..0.5[z1r,z2r]));
+ t2=xpart(tmp_path intersectiontimes (z1r..0.5[z1r,z2r]));
+ t3=xpart(tmpp_path intersectiontimes (z3l..0.5[z3l,z4l]));
+ t4=xpart(tmpp_path intersectiontimes (z4l..0.5[z3l,z4l]));
+ filldraw z1l--z5l up_to_right z6l right_to_down z7l--z2l--
+ z2r--subpath(t1,t2) of tmp_path--z1r--cycle;
+ filldraw z3l--subpath(t3,t4) of tmpp_path--z4l
+ --z4r--z10r up_to_left z9r left_to_down z8r--z3r--cycle;
+ penlabels(1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+%%% !!!
+beginchar(circ_equal_sign,arithmetic_bounds);
+ "Circle-equal sign";
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ lft x1=lft x3=Appr; rt x2=rt x4=w-Appr;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ filldraw stroke z1e..z2e; % upper bar
+ filldraw stroke z3e..z4e; % lower bar
+ pickup rule.nib0;
+ a:=min(max(7u,dtsz+rth0),spread1+rth);
+ adjust_dot5((0.5[x1,x2],max(vround(1/6[top y1,h])+0.5a,h-0.5a)+o),
+ a,true,false);
+ full_dot:=false; dot(5,5');
+ penlabels(1,2);
+endchar;
+
+beginchar(equal_circ_sign,12u#+2appr#,v_center(spread1#+rth#));
+ "Equal-circle sign";
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ lft x1=lft x3=Appr; rt x2=rt x4=w-Appr;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ filldraw stroke z1e..z2e; % upper bar
+ filldraw stroke z3e..z4e; % lower bar
+ pickup rule.nib0;
+ a:=min(max(7u,dtsz+rth0),spread1+rth);
+ adjust_dot5(0.5[z3,z2],a,true,false);
+ full_dot:=false; dot(5,5');
+ penlabels(1,2);
+endchar;
+
+%%% !!!
+beginchar(triangle_equal_sign,arithmetic_bounds);
+ "Triangle-equal sign";
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ lft x1=lft x3=Appr; rt x2=rt x4=w-Appr;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ filldraw stroke z1e..z2e; % upper bar
+ filldraw stroke z3e..z4e; % lower bar
+ triangle_foot:=vround 1/6[top y1r,h];
+ a:=min(2max(h+o-triangle_foot,spread1+rth+o)/sqrt 3,7u);
+ set_triangle'(up,a,rth0,false,false);
+ filldraw stroke z1'e--z2'e--z3'e--z1'e;
+endchar;
+
+%%% !!!
+beginchar(correspondance_sign,arithmetic_bounds);
+ "Correspondance sign";
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ lft x1=lft x3=Appr; rt x2=rt x4=w-Appr;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ filldraw stroke z1e..z2e; % upper bar
+ filldraw stroke z3e..z4e; % lower bar
+%
+ top y6r=h+o; bot y5r=vround(1/6[top y1r,h]);
+ y5r=y5l=y7r=y7l;
+ x6r=0.5[x1,x2]; x5r-x1=x2-x7r=hround 0.5u;
+ x5l-x5r=diag_width(rth-tiny,z6r-z5r);
+ x7r-x7l=diag_width(rth-tiny,z6r-z7r);
+ z6l-z5l=whatever*(z6r-z5r); z6l-z7l=whatever*(z6r-z7r);
+ filldraw stroke z5e--z6e--z7e;
+ penlabels(1,2,3,4,5,6,7);
+endchar;
+
+beginchar(hash_sign,arithmetic_bounds);
+ "Hash sign";
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ pos5(rth,0); pos6(rth,0); pos7(rth,0); pos8(rth,0);
+ lft x1=lft x3=Appr;
+ lft x5l=lft x6l=hround 0.5(w+Appr-Appr-spread1-rth);
+ x7-x5=x8-x6=spread1; x2-x7r=x4-x7r=x5l-x1;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ top y5=top y7=h; y5-y1=y3-y6; y8=y6;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e; filldraw stroke z7e..z8e;
+ penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+beginchar(var_hash_sign,arithmetic_bounds);
+ "Variant hash sign";
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ lft x1=lft x3=Appr; rt x2=rt x4=w-Appr;
+ y1=y2; y3=y4; y1-y3=spread1; .5[y1,y3]=math_axis;
+ bot y6l=-d; top y7r=h; lft x6l=w-rt x7r=Appr+hround 1.25u;
+ adjust_slanted_bar(6l,7r,8r,5l)(spread1+rth-tiny,-1);
+ numeric a; a=(rth-tiny)/sind angle(z5l-z6l);
+ penpos5(a,0); penpos6(a,0); penpos7(a,0); penpos8(a,0);
+% I'm not sure that it's a good idea, but wel, that's
+% school works.
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke diag_stroke.e(5,6,r,y1r,y1l,y3r,y3l);
+ filldraw stroke diag_stroke.e(7,8,r,y1r,y1l,y3r,y3l);
+% filldraw stroke z5e..z6e; filldraw stroke z7e..z8e;
+ penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+beginchar(vdash_sign,12u#+2appr#,v_center(12u#));
+ "vdash sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+ lft x1l=lft x2l=Appr; rt x4=w-Appr; x3=x1;
+ top y1=h; 0.5[y1,y2]=math_axis=y3=y4;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4); tmp_picture:=currentpicture;
+endchar;
+
+beginchar(vdash_not,12u#+2appr#,asc_height#,asc_depth#);
+ "Not vdash sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ lft x2l=w-rt x1r=appr+hround 1.75u;
+ top y1r=h+eps; 0.5[bot y2l,top y1r]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(dashv_sign,12u#+2appr#,v_center(12u#));
+ "dashv sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+ rt x1r=rt x2r=w-Appr; lft x3=Appr; x4=x1;
+ top y1=h; 0.5[y1,y2]=math_axis=y3=y4;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4); tmp_picture:=currentpicture;
+endchar;
+
+beginchar(dashv_not,12u#+2appr#,asc_height#,asc_depth#);
+ "Not dashv sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ lft x2l=w-rt x1r=appr+hround 1.75u;
+ top y1r=h+eps; 0.5[bot y2l,top y1r]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(vDash_sign,12u#+2appr#,v_center(12u#));
+ "vDash sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+ pos5(rth,90); pos6(rth,90);
+ lft x1l=lft x2l=Appr; rt x4=rt x6=w-Appr; x3=x5=x1;
+ top y1=h; y3-y5=spread1; 0.5[y1,y2]=math_axis=0.5[y3,y5];
+ y4=y3; y6=y5; filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e; penlabels(1,2,3,4,5,6);
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(vDash_not,12u#+2appr#,asc_height#,asc_depth#);
+ "Not vDash sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ lft x2l=w-rt x1r=appr+hround 1.75u;
+ top y1r=h+eps; 0.5[bot y2l,top y1r]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(Dashv_sign,12u#+2appr#,v_center(12u#));
+ "Dashv sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+ pos5(rth,90); pos6(rth,90);
+ rt x1r=rt x2r=w-Appr; lft x3=lft x5=Appr; x4=x6=x1;
+ top y1=h; y3-y5=spread1; 0.5[y1,y2]=math_axis=0.5[y3,y5];
+ y4=y3; y6=y5; filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e; penlabels(1,2,3,4,5,6);
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(Dashv_not,12u#+2appr#,asc_height#,asc_depth#);
+ "Not Dashv sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ lft x2l=w-rt x1r=appr+hround 1.75u;
+ top y1r=h+eps; 0.5[bot y2l,top y1r]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(Vdash_sign,12u#+2appr#,v_center(12u#));
+ "Vdash sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,0); pos4(rth,0);
+ pos5(rth,90); pos6(rth,90);
+ lft x1l=lft x2l=Appr; x3=x4=x1+spread1;
+ rt x6=w-appr; x5=x3;
+ top y1=h; 0.5[y1,y2]=math_axis=y5=y6; y1=y3; y2=y4;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e; penlabels(1,2,3,4,5,6);
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(Vdash_not,12u#+2appr#,asc_height#,asc_depth#);
+ "Not Vdash sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ lft x2l=w-rt x1r=appr+hround 1.75u;
+ top y1r=h+eps; 0.5[bot y2l,top y1r]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(dashV_sign,12u#+2appr#,v_center(12u#));
+ "dashV sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,0); pos4(rth,0);
+ pos5(rth,90); pos6(rth,90);
+ rt x1r=rt x2r=w-Appr; x3=x4=x1-spread1;
+ lft x5=appr; x6=x3;
+ top y1=h; 0.5[y1,y2]=math_axis=y5=y6; y1=y3; y2=y4;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e; penlabels(1,2,3,4,5,6);
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(dashV_not,12u#+2appr#,asc_height#,asc_depth#);
+ "Not dashV sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ lft x2l=w-rt x1r=appr+hround 1.75u;
+ top y1r=h+eps; 0.5[bot y2l,top y1r]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(VDash_sign,12u#+2appr#,v_center(12u#));
+ "VDash sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,0); pos4(rth,0);
+ pos5(rth,90); pos6(rth,90); pos7(rth,90); pos8(rth,90);
+ lft x1l=lft x2l=Appr; x3=x4=x1+spread1;
+ rt x6=rt x8=w-appr; x5=x7=x3;
+ top y1=h; y5-y7=spread1;
+ 0.5[y1,y2]=0.5[y5,y7]=math_axis;
+ y1=y3; y2=y4; y5=y6; y7=y8;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e; filldraw stroke z7e..z8e;
+ penlabels(1,2,3,4,5,6,7,8); tmp_picture:=currentpicture;
+endchar;
+
+beginchar(VDash_not,12u#+2appr#,asc_height#,asc_depth#);
+ "Not Vdash sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ lft x2l=w-rt x1r=appr+hround 1.75u;
+ top y1r=h+eps; 0.5[bot y2l,top y1r]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(DashV_sign,12u#+2appr#,v_center(12u#));
+ "DashV sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,0); pos4(rth,0);
+ pos5(rth,90); pos6(rth,90); pos7(rth,90); pos8(rth,90);
+ rt x1r=rt x2r=w-Appr; x3=x4=x1-spread1;
+ lft x5=lft x7=appr; x6=x8=x3;
+ top y1=h; y5-y7=spread1;
+ 0.5[y1,y2]=0.5[y5,y7]=math_axis;
+ y1=y3; y2=y4; y5=y6; y7=y8;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e; filldraw stroke z7e..z8e;
+ penlabels(1,2,3,4,5,6,7,8); tmp_picture:=currentpicture;
+endchar;
+
+beginchar(DashV_not,12u#+2appr#,asc_height#,asc_depth#);
+ "Not DashV sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ lft x2l=w-rt x1r=appr+hround 1.75u;
+ top y1r=h+eps; 0.5[bot y2l,top y1r]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(Vvdash_sign,12u#+2appr#,v_center(12u#));
+ "Vvdash sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,0); pos4(rth,0);
+ pos5(rth,0); pos6(rth,0); pos7(rth,90); pos8(rth,90);
+ lft x1l=lft x2l=Appr; x3=x4=x1+spread1; x5=x6=x3+spread1;
+ rt x8=w-appr; x7=x5;
+ top y1=h; 0.5[y1,y2]=math_axis=y7=y8; y1=y3=y5; y2=y4=y6;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e; filldraw stroke z7e..z8e;
+ penlabels(1,2,3,4,5,6,7,8); tmp_picture:=currentpicture;
+endchar;
+
+beginchar(Vvdash_not,12u#+2appr#,asc_height#,asc_depth#);
+ "Not Vvdash sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ lft x2l=w-rt x1r=appr+hround 1.75u;
+ top y1r=h+eps; 0.5[bot y2l,top y1r]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(dashVv_sign,12u#+2appr#,v_center(12u#));
+ "dashVv sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,0); pos4(rth,0);
+ pos5(rth,0); pos6(rth,0); pos7(rth,90); pos8(rth,90);
+ rt x1r=rt x2r=w-Appr; x3=x4=x1-spread1; x5=x6=x3-spread1;
+ lft x7=appr; x8=x5;
+ top y1=h; 0.5[y1,y2]=math_axis=y7=y8; y1=y3=y5; y2=y4=y6;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e; filldraw stroke z7e..z8e;
+ penlabels(1,2,3,4,5,6,7,8); tmp_picture:=currentpicture;
+endchar;
+
+beginchar(dashVv_not,12u#+2appr#,asc_height#,asc_depth#);
+ "Not dashVv sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ lft x2l=w-rt x1r=appr+hround 1.75u;
+ top y1r=h+eps; 0.5[bot y2l,top y1r]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(therefore_sign,arithmetic_bounds);
+ "Therefore sign";
+ pickup null.nib;
+ a:=(12u-dtsz)/sqrt 12;
+ x0=0.5w; y0=math_axis;
+ adjust_dot1((x0,y0+2a),dtsz,false,false);
+ adjust_dot2((appr+0.5dtsz,y0-a),dtsz,false,false);
+ adjust_dot3((w-appr-0.5dtsz,y0-a),dtsz,false,false);
+ dot(1,1'); dot(2,2'); dot(3,3');
+endchar;
+
+beginchar(because_sign,arithmetic_bounds);
+ "Because sign";
+ pickup null.nib;
+ a:=(12u-dtsz)/sqrt 12;
+ x0=0.5w; y0=math_axis;
+ adjust_dot1((x0,y0-2a),dtsz,false,false);
+ adjust_dot2((appr+0.5dtsz,y0+a),dtsz,false,false);
+ adjust_dot3((w-appr-0.5dtsz,y0+a),dtsz,false,false);
+ dot(1,1'); dot(2,2'); dot(3,3');
+endchar;
+
+beginchar(bowtie_sign,arithmetic_bounds);
+ "Bowtie sign";
+ pickup tiny.nib;
+ a:=(11u+rth-tiny)/sqrt 2;% see times_sign
+ y1r=y3l=good.y(math_axis+0.5a); y2l=y4r=y1r-vround a;
+ lft x1r=lft x4r=Appr; rt x2l=rt x3l=w-Appr;
+ adjust_slanted_bar(1r,2l,1,2)(rth-tiny,-1);
+ adjust_slanted_bar(4r,3l,4,3)(rth-tiny,1);
+ rth-tiny=x1l-x1r=x2l-x2r=x3l-x3r=x4l-x4r;
+ z1l=whatever[z1,z2l]; z2r=whatever[z2,z1r];
+ z3r=whatever[z3,z4r]; z4l=whatever[z4,z3l];
+ filldraw stroke z1e--z2e--z3e--z4e--z1e;
+ penlabels(1,2,3,4);
+endchar;
+
+%
+% domination signs and related things (relations).
+%
+
+beginchar(dominated,12u#+2appr#,v_center(spread4#+rth#));
+ "dominated by sign";
+ pickup tiny.nib;
+ top y1r=top y4r=h; y2l=y5l=good.y math_axis;
+ y1r-y2l=y2l-y3r; y6r=y3r;
+ lft x2l=Appr; rt x4r=w-Appr;
+ x1r-x2l=x3r-x2l=x4r-x5l=x6r-x5l=hround(6.5u-tiny);
+ adjust_slanted_bar(2l,1r,2a,1l)(rth-tiny,-1);
+ adjust_slanted_bar(2l,3r,2b,3l)(rth-tiny,1);
+ z2r=whatever[z1r,z2a]; z2r=whatever[z3r,z2b];
+ z4r-z4l=z1r-z1l; z5r-z5l=z2r-z2l; z6r-z6l=z3r-z3l;
+ filldraw stroke z1e--z2e--z3e; filldraw stroke z4e--z5e--z6e;
+ penlabels(1,2,3,4,5,6); labels(2a,2b);
+endchar;
+
+beginchar(dominating,12u#+2appr#,v_center(spread4#+rth#));
+ "dominating sign";
+ pickup tiny.nib;
+ top y1r=top y4r=h; y2l=y5l=good.y math_axis;
+ y1r-y2l=y2l-y3r; y6r=y3r;
+ lft x4r=Appr; rt x2l=w-Appr;
+ x1r-x2l=x3r-x2l=x4r-x5l=x6r-x5l=-hround(6.5u-tiny);
+ adjust_slanted_bar(2l,1r,2a,1l)(rth-tiny,1);
+ adjust_slanted_bar(2l,3r,2b,3l)(rth-tiny,-1);
+ z2r=whatever[z1r,z2a]; z2r=whatever[z3r,z2b];
+ z4r-z4l=z1r-z1l; z5r-z5l=z2r-z2l; z6r-z6l=z3r-z3l;
+ filldraw stroke z3e--z2e--z1e; filldraw stroke z6e--z5e--z4e;
+ penlabels(1,2,3,4,5,6); labels(2a,2b);
+endchar;
+
+beginchar(Dominated,12u#+2appr#,v_center(spread4#+spread1#+rth#));
+ "Dominated by sign";
+ pickup tiny.nib;
+ y2r=0.5[y1,y3]=0.5[y4,y6]=good.y math_axis;
+ y1-y3=2(y4-y6)=spread1+spread4;
+ rt x1=w-Appr; lft x2r=Appr; x1=x1r=x3=x3r=x4=x6;
+ adjust_slanted_bar(2r,1,2a,1a)(0.5(rth-tiny),-1);
+ adjust_slanted_bar(2r,3,2b,3b)(0.5(rth-tiny),1);
+ z1r=whatever[z2r,z1a]; z3r=whatever[z2r,z3b];
+ z1r-z1=z1-z1l=z4r-z4=z4-z4l; z3r-z3=z3-z3l=z6r-z6=z6-z6l;
+ z2l-z1l=whatever*(z2r-z1r); z2l-z3l=whatever*(z2r-z3r);
+ z5r-z4r=whatever*(z2r-z1r); z5r-z6r=whatever*(z2r-z3r);
+ z5l-z4l=whatever*(z2r-z1r); z5l-z6l=whatever*(z2r-z3r);
+ filldraw stroke z3e--z2e--z1e; filldraw stroke z6e--z5e--z4e;
+ penlabels(1,2,3,4,5,6); labels(1a,3b,2a,2b);
+endchar;
+
+beginchar(Dominating,12u#+2appr#,v_center(spread4#+spread1#+rth#));
+ "Dominated by sign";
+ pickup tiny.nib;
+ y2r=0.5[y1,y3]=0.5[y4,y6]=good.y math_axis;
+ y1-y3=2(y4-y6)=spread1+spread4;
+ lft x1=Appr; rt x2r=w-Appr; x1=x1r=x3=x3r=x4=x6;
+ adjust_slanted_bar(2r,1,2a,1a)(0.5(rth-tiny),1);
+ adjust_slanted_bar(2r,3,2b,3b)(0.5(rth-tiny),-1);
+ z1r=whatever[z2r,z1a]; z3r=whatever[z2r,z3b];
+ z1r-z1=z1-z1l=z4r-z4=z4-z4l; z3r-z3=z3-z3l=z6r-z6=z6-z6l;
+ z2l-z1l=whatever*(z2r-z1r); z2l-z3l=whatever*(z2r-z3r);
+ z5r-z4r=whatever*(z2r-z1r); z5r-z6r=whatever*(z2r-z3r);
+ z5l-z4l=whatever*(z2r-z1r); z5l-z6l=whatever*(z2r-z3r);
+ filldraw stroke z1e--z2e--z3e; filldraw stroke z4e--z5e--z6e;
+ penlabels(1,2,3,4,5,6); labels(1a,3b,2a,2b);
+endchar;
+
+%
+% TO BE REVISED
+%
+
+beginchar(Dominated_curly,14u#+2appr#,v_center(spread4#+spread1#+rth#));
+ "Curly dominated by sign";
+ pickup tiny.nib;
+ pos2(rth,-90); pos4(rth,-90);
+ top y1r=top y5r=h; y2=math_axis=0.5[y1r,y3l]=0.5[y5r,y8r];
+ lft x2=appr; rt x5r=rt x8r=w-appr; x5r-x1r=x8r-x3l=hround 2.5u;
+ x4r=2/3[x2r,x1r]; y4r=y2r; a:=diag_width(rth,z1r-z4r);
+ pos1(a,0); pos5(a,0); pos3(a,180); pos8(a,0);
+ filldraw stroke z1e{z4r-z1r}...z2e{left};
+ filldraw stroke z3e{z4l-z3l}...z2e{left};
+%
+ rt x6l=rt x7l=hround(0.5w+0.5u); y6l=y7l=good.y math_axis;
+ tmp_path:=z5l{z4r-z1r}...z6l;
+ z0=direction 1 of tmp_path; a:=angle z0;
+ pos6(rth,a+90); pos7(rth,-90-a);
+ tmp_path:=z8r{z4l-z3l}...z7r{z0 yscaled -1};
+ t:=xpart(tmp_path intersectiontimes (z6l..(x5r,y6l)));
+ filldraw z5l{z4r-z1r}...z6l& z7l...z8l{z3l-z4l}
+ --subpath (0,t-eps) of tmp_path
+ --reverse subpath (0,t-eps) of (z5r{z4r-z1r}...z6r{z0})--cycle;
+ penlabels(0,1,2,3,4,5,6,7,8);
+endchar;
+
+beginchar(Dominating_curly,14u#+2appr#,v_center(spread4#+spread1#+rth#));
+ "Curly dominating sign";
+ pickup tiny.nib;
+ pos2(rth,90); pos4(rth,90);
+ top y1l=top y5l=h; y2=math_axis=0.5[y1l,y3r]=0.5[y5l,y8l];
+ rt x2=w-appr; lft x5l=lft x8l=appr; x5l-x1l=x8l-x3r=-hround 2.5u;
+ x4l=2/3[x2l,x1l]; y4l=y2l; a:=diag_width(rth,z1l-z4l);
+ pos1(a,0); pos5(a,0); pos3(a,180); pos8(a,0);
+ filldraw stroke z1e{z4l-z1l}...z2e{right};
+ filldraw stroke z3e{z4r-z3r}...z2e{right};
+%
+ lft x6r=lft x7r=hround(0.5w-0.5u); y6r=y7r=good.y math_axis;
+ tmp_path:=z5r{z4l-z1l}...z6r;
+ z0=direction 1 of tmp_path; a:=angle z0;
+ pos6(rth,a+90); pos7(rth,-90-a);
+ tmp_path:=z8l{z4r-z3r}...z7l{z0 yscaled -1};
+ t:=xpart(tmp_path intersectiontimes (z6r..(x5l,y6r)));
+ filldraw z5r{z4l-z1l}...z6r& z7r...z8r{z3r-z4r}
+ --subpath (0,t-eps) of tmp_path
+ --reverse subpath (0,t-eps) of (z5l{z4l-z1l}...z6l{z0})--cycle;
+ penlabels(0,1,2,3,4,5,6,7,8);
+endchar;
+
+beginpicture(tmp,12u#+2appr#,v_center(spread2#+rth#));
+pickup tiny.nib;
+rt x1=rt x1r=rt x3=rt x3r=w-Appr; lft x2r=appr-hround u;
+x1r-x1l=x3r-x3l=rth-tiny;
+y2r=y2a=y2b=good.y math_axis; y1-y2r=y2r-y3=0.5(h+d-rth);
+adjust_slanted_bar(1,2r,1a,2a)(0.5(rth-tiny),-1);
+adjust_slanted_bar(3,2r,3b,2b)(0.5(rth-tiny),1);
+z1r=whatever[z1a,z2r]; z3r=whatever[z3b,z2r];
+z1l-2z1+z1r=whatever*(z2a-z1);
+z3l-2z3+z3r=whatever*(z2b-z3);
+z2l-z1l=whatever*(z2b-z1);
+z2l-z3l=whatever*(z2b-z3);
+filldraw stroke z1e--z3e--z2e--z1e;
+% penlabels(1,2,3); labels(1a,2a,2b,3b);
+numeric a; pair u_; u_=z2r-z3r; a=1/abs cosd angle u_;
+endpicture;
+
+beginchar(triangle_left,12u#+2appr#,
+ v_center(spread2#+rth#));
+ "Triangle left";
+ currentpicture:=tmp_picture;
+endchar;
+
+beginchar(not_triangle_left,12u#+2appr#,asc_height#,asc_depth#);
+ "Not triangle left";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0);
+ top y2l=h; 0.5[bot y2l,top y1l]=good.y math_axis;
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z2e..z1e; penlabels(1,2);
+endchar;
+
+beginchar(triangle_left_eq,12u#+2appr#,
+ v_center(if true_size: spread2#+rth#+a*spread1#
+ else: spread2#+rth#+spread1#
+ fi));
+ "Triangle left equal";
+ currentpicture:=tmp_picture
+ shifted(0,vround(a*0.5spread1));
+ pickup tiny.nib;
+ penpos1((rth-tiny)*a,90);
+ penpos2((rth-tiny)*a,90);
+ rt x2=w-Appr; lft x1=appr-hround u; y2=-d+0.5rth; z1-z2=whatever*u_;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(not_triangle_left_eq,12u#+2appr#,asc_height#,asc_depth#);
+ "Not triangle left equal";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); bot y1l=-d; top y2l=h;
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z2e..z1e; penlabels(1,2);
+endchar;
+
+beginpicture(tmp,12u#+2appr#,v_center(spread2#+rth#));
+pickup tiny.nib;
+lft x1=lft x1r=lft x3=lft x3r=Appr; rt x2r=w-appr+hround u;
+x1l-x1r=x3l-x3r=rth-tiny;
+y2r=y2a=y2b=good.y math_axis; y1-y2r=y2r-y3=0.5(h+d-rth);
+adjust_slanted_bar(1,2r,1a,2a)(0.5(rth-tiny),1);
+adjust_slanted_bar(3,2r,3b,2b)(0.5(rth-tiny),-1);
+z1r=whatever[z1a,z2r]; z3r=whatever[z3b,z2r];
+z1l-2z1+z1r=whatever*(z2a-z1);
+z3l-2z3+z3r=whatever*(z2b-z3);
+z2l-z1l=whatever*(z2b-z1);
+z2l-z3l=whatever*(z2b-z3);
+filldraw stroke z1e--z2e--z3e--z1e;
+% penlabels(1,2,3); labels(1a,2a,2b,3b);
+numeric a; pair u_; u_=z2r-z3r; a=1/abs cosd angle u_;
+endpicture;
+
+beginchar(triangle_right,12u#+2appr#,v_center(spread2#+rth#));
+ "Triangle right";
+ currentpicture:=tmp_picture;
+endchar;
+
+beginchar(not_triangle_right,12u#+2appr#,asc_height#,asc_depth#);
+ "Not triangle right";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0);
+ top y2l=h; 0.5[bot y2l,top y1l]=good.y math_axis;
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z2e..z1e; penlabels(1,2);
+endchar;
+
+beginchar(triangle_right_eq,12u#+2appr#,
+ v_center(if true_size:
+ spread2#+rth#+a*spread1#
+ else: spread2#+rth#+spread1#
+ fi));
+ "Triangle right equal";
+ currentpicture:=tmp_picture
+ shifted(0,vround(a*0.5spread1));
+ pickup tiny.nib;
+ penpos1((rth-tiny)*a,90);
+ penpos2((rth-tiny)*a,90);
+ lft x2=Appr; rt x1=w-appr+hround u; y2=-d+0.5rth; z1-z2=whatever*u_;
+ filldraw stroke z2e..z1e; penlabels(1,2);
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(not_triangle_right_eq,12u#+2appr#,asc_height#,asc_depth#);
+ "Not triangle right equal";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); bot y1l=-d; top y2l=h;
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z2e..z1e; penlabels(1,2);
+ tmp_picture:=currentpicture;
+endchar;
+
+vardef d_problem(expr origin,top_lim,side_lim,breadth)=
+ save a,b,c;
+ a=abs((side_lim-xpart origin)/(top_lim-ypart origin));
+ b=abs(breadth/(top_lim-ypart origin));
+ begingroup
+ vardef f(expr c)=
+ (1+a**2-2a*b*c+(b*c)**2)*(c**2)<1
+ enddef;
+ c=solve f(0,breadth);
+ endgroup;
+ breadth*(c,1+-+c)
+enddef;
+
+%%% !!!
+beginchar(angle_sign,12u#+2appr#,asc_height#,0);
+ "Angle sign";
+ pickup tiny.nib;
+ rt x1l=w-appr; lft x2l=appr; rt x3r=w-appr-hround 1.5u;
+ bot y1l=bot y2l=0; top y3l=h+eps; pos1(rth,90);
+ (x3r-x3l,y3l-y3r)=d_problem(z2l,y3l,x3r,rth-tiny);
+ y2r=y1r; z2r-z3r=whatever*(z2l-z3l);
+ filldraw stroke z1e--z2e--z3e;
+ penlabels(1,2,3);
+endchar;
+
+%%% !!!
+beginchar(measured_angle,12u#+2appr#,asc_height#,asc_depth#);
+ "Measured angle sign";
+ pickup tiny.nib;
+ rt x1l=w-appr; lft x2l=appr; rt x3r=w-appr-hround 1.5u;
+ bot y1l=bot y2l=0; top y3l=h+eps; pos1(rth,90);
+ (x3r-x3l,y3l-y3r)=d_problem(z2l,y3l,x3r,rth-tiny);
+ y2r=y1r; z2r-z3r=whatever*(z2l-z3l);
+ filldraw stroke z1e--z2e--z3e;
+ %
+ numeric a;
+ y2l=y5r; rt x5r=hround max(0.6[Appr,w-Appr]+0.5rth,x2l+0.5(h+d))+eps;
+ pos5(rth,0);
+ a=x5r-x2l; 0.5 y4=-d+eps; 0.5(x4-x2l)=a+-+min((0.5(y4-y2l)),a);
+ 0.5(z6-z2l)=a*dir min((angle(z3l-z2l)-angle(z4-z2l)),90);
+ numeric t[];
+ tmp_path:=halfcircle rotated -90 scaled 2(x5r-x2r) shifted z2r;
+ tmpp_path:=reverse(halfcircle rotated -90 scaled 2(x5l-x2r) shifted z2r);
+ t1=xpart(tmp_path intersectiontimes (z2l..z4));
+ t2=xpart(tmp_path intersectiontimes (z2l..z6));
+ z4r=point t1 of tmp_path; z6r=point t2 of tmp_path;
+ t3=xpart(tmpp_path intersectiontimes (z2l..z6));
+ t4=xpart(tmpp_path intersectiontimes (z2l..z4));
+ z4l=point t4 of tmpp_path; z6l=point t3 of tmpp_path;
+ filldraw subpath (t1,t2) of tmp_path
+ --subpath (t3,t4) of tmpp_path--cycle;
+ penlabels(1,2,3,4,5,6);
+endchar;
+
+%%% !!!
+beginchar(spherical_angle,arithmetic_bounds);
+ "Spherical angle sign";
+ pickup tiny.nib;
+ % < part
+ y2r=0.5[y1,y3]=good.y math_axis; y1-y3=spread4;
+ rt x1=w-Appr; lft x2r=Appr; x1=x1r=x3=x3r;
+ adjust_slanted_bar(2r,1,2a,1a)(0.5(rth-tiny),-1);
+ adjust_slanted_bar(2r,3,2b,3b)(0.5(rth-tiny),1);
+ z1r=whatever[z2r,z1a]; z3r=whatever[z2r,z3b];
+ z1r-z1=z1-z1l; z3r-z3=z3-z3l;
+ z2l-z1l=whatever*(z2r-z1r); z2l-z3l=whatever*(z2r-z3r);
+ filldraw stroke z3e--z2e--z1e;
+ % ) part
+ y2r=y5r; rt x5r=hround max(0.6[Appr,w-Appr]+0.5rth,x2r+0.5(h+d))+eps;
+ top y6=h+eps; y6-y2r=y2r-y4; pos5(rth,0);
+ numeric t[];
+ tmp_path:=halfcircle rotated -90 scaled 2(x5r-x2r) shifted z2r;
+ tmpp_path:=reverse(halfcircle rotated -90 scaled 2(x5l-x2r) shifted z2r);
+ t1=xpart(tmp_path intersectiontimes ((0,y4)..(w,y4)));
+ t2=xpart(tmp_path intersectiontimes ((0,y6)..(w,y6)));
+ z4r=point t1 of tmp_path; z6r=point t2 of tmp_path;
+ t3=xpart(tmpp_path intersectiontimes (z2r..z6r));
+ t4=xpart(tmpp_path intersectiontimes (z2r..z4r));
+ z4l=point t4 of tmpp_path; z6l=point t3 of tmpp_path;
+ filldraw subpath (t1,t2) of tmp_path
+ --subpath (t3,t4) of tmpp_path--cycle;
+ penlabels(1,2,3,4,5,6);
+endchar;
+
+beginchar(between_sign,7u#+2appr#,body_height#,paren_depth#);
+ "Between sign";
+ pickup tiny.nib;
+ pos2(hround 0.75[hair,stem],0); pos5(hround 0.75[hair,stem],0);
+ top y1l=top y4r=h+eps; bot y3l=bot y6r=-d-eps;
+ y0r=y0l=y2=y5=math_axis;
+ rt x1r=rt x3r=rt x5r+hround 0.75u=w-appr;
+ lft x4l=lft x6l=lft x2l-hround 0.75u=appr;
+ x2l-x0l=x0r-x5r=x5r-x2l;
+ (x1r-x1l,y1l-y1r)=(x3r-x3l,y3r-y3l)
+ =(x4r-x4l,y4r-y4l)=(x6r-x6l,y6l-y6r)
+ =d_problem(z0l,y1l,x1r,max(0,vair-tiny));
+ filldraw stroke z1e{z0l-z1l}..z2e..z3e{z3l-z0l};
+ filldraw stroke z4e{z0r-z4r}..z5e..z6e{z6r-z0r};
+ penlabels(1,2,3,4,5,6);
+endchar;
+
+%%% !!!
+beginchar(times_left_three,arithmetic_bounds);
+ "Left three times sign";
+ pickup tiny.nib;
+ top y1l=top y3r=h; bot y2r=bot y4l=-d;
+ lft x1l=lft x4l=appr; rt x2r=rt x3r=w-appr;
+ adjust_slanted_bar(1l,2r,1r,2l)(rth-tiny,1);
+ adjust_slanted_bar(3r,4l,3l,4r)(rth-tiny,-1);
+ z1=0.5[z1l,z1r]; z2=0.5[z2l,z2r];
+ forsuffixes $=r,l: z5$=whatever[z1,z2];
+ z5$=whatever[z3$,z4$]; endfor;
+ filldraw stroke z1e..z2e; filldraw stroke z5e..z4e;
+ penlabels(1,2,3,4,5);
+endchar;
+
+%%% !!!
+beginchar(times_right_three,arithmetic_bounds);
+ "Right three times sign";
+ pickup tiny.nib;
+ top y1l=top y3r=h; bot y2r=bot y4l=-d;
+ lft x1l=lft x4l=appr; rt x2r=rt x3r=w-appr;
+ adjust_slanted_bar(1l,2r,1r,2l)(rth-tiny,1);
+ adjust_slanted_bar(3r,4l,3l,4r)(rth-tiny,-1);
+ z3=0.5[z3l,z3r]; z4=0.5[z4l,z4r];
+ forsuffixes $=r,l: z5$=whatever[z3,z4];
+ z5$=whatever[z1$,z2$]; endfor;
+ filldraw stroke z3e..z4e; filldraw stroke z5e..z2e;
+ penlabels(1,2,3,4,5);
+endchar;
+
+beginchar(pitchfork_sign,12u#+2appr#,asc_height#,0);
+ "Small cap sign";
+ ensure_centering_of(rth);
+ pickup tiny.nib;
+ pos1(rth,180); pos2(rth,180);
+ pos4(rth,0); pos5(rth,0); pos6(rth,0); pos7(rth,0);
+ y3+0.5rth=x_height+o; bot y1r=bot y5r=bot y7+o=-d;
+ top y6=h; y2=y4=2/3[y3,y1r];
+ lft x1r=w-rt x5r=appr+hround 0.8u;
+ x1=x2; x4=x5; x3=x6=x7=0.5w;
+ filldraw stroke z1e..z2e; filldraw stroke z4e..z5e;
+ filldraw stroke z6e..z7e;
+ pickup rule.nib; autorounded;
+ draw z2 up_to_right z3 right_to_down z4;
+ penlabels(1,2,3,4,5,6,7);
+endchar;
+
+beginchar(smile_sign,16u#+2appr#,v_center(0.5x_height#));
+ "Smile sign";
+ pickup tiny.nib;
+ a:=vround 0.5[vair,stem]; pos2(a,90);
+ y2-0.5a=vround(-d-0.5a); y1l=y3l=good.y h;
+ lft x1l=appr; rt x3l=w-appr; x2=0.5[x1l,x3l];
+ z1'-z1l=(z2l-z1l) xscaled 1/3;
+ z3'-z3l=(z2l-z3l) xscaled 1/3;
+ pos1(hair,angle(z1'-z1l)+90);
+ pos3(hair,angle(z3'-z3l)-90);
+ filldraw stroke z1e{z1'-z1l}...z2e{right}...z3e{z3l-z3'};
+ penlabels(1,2,3); labels(1',3');
+endchar;
+
+beginchar(frown_sign,16u#+2appr#,v_center(0.5x_height#));
+ "Frown sign";
+ pickup tiny.nib;
+ a:=vround 0.5[vair,stem]; pos2(a,90);
+ y2+0.5a=vround(h+0.5a); y1r=y3r=good.y -d;
+ lft x1r=appr; rt x3r=w-appr; x2=0.5[x1r,x3r];
+ z1'-z1r=(z2r-z1r) xscaled 1/3;
+ z3'-z3r=(z2r-z3r) xscaled 1/3;
+ pos1(hair,angle(z1'-z1r)+90);
+ pos3(hair,angle(z3'-z3r)-90);
+ filldraw stroke z1e{z1'-z1r}...z2e{right}...z3e{z3r-z3'};
+ penlabels(1,2,3); labels(1',3');
+endchar;