summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-09-15 00:34:37 +0000
committerKarl Berry <karl@freefriends.org>2008-09-15 00:34:37 +0000
commitd0c1973e2a0b6ecebd5b4571c959ef8b32fd6ca8 (patch)
tree63be6df2b3e75d189fae53321cfe21fccd44ae34 /Master/texmf-dist/fonts
parent58151c6db30061d71c2627427b2958779c644adc (diff)
new (mf) font package mathabx
git-svn-id: svn://tug.org/texlive/trunk@10599 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/fonts')
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/matha10.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/matha12.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/matha5.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/matha6.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/matha7.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/matha8.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/matha9.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathacnt.mf367
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathadrv.mf280
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/matharrw.mf1367
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathastr.mf946
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathastrotest10.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathastrotestdrv.mf67
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathasym.mf421
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathb10.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathb12.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathb5.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathb6.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathb7.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathb8.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathb9.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathbase.mf664
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathbdel.mf1456
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathbdrv.mf298
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathbigs.mf846
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathbsym.mf264
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathc10.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathcall.mf1464
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathcallgreek.mf1105
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathcdrv.mf229
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathfine.mf375
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathgrey.mf97
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathhbrw.mf2220
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathineq.mf416
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathltlk.mf673
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathmbcb.mf498
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathprmt.mf168
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathsmsy.mf237
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathsubs.mf257
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathsymb.mf1001
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathu10.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathudrv.mf189
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathusym.mf516
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathux10.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathuxdrv.mf435
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathx10.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathx12.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathx5.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathx6.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathx7.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathx8.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathx9.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathxdrv.mf371
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/maydigit.mf107
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/matha10.tfmbin0 -> 1372 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/matha12.tfmbin0 -> 1380 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/matha5.tfmbin0 -> 1376 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/matha6.tfmbin0 -> 1380 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/matha7.tfmbin0 -> 1380 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/matha8.tfmbin0 -> 1380 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/matha9.tfmbin0 -> 1380 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathastrotest10.tfmbin0 -> 1196 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathb10.tfmbin0 -> 1384 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathb12.tfmbin0 -> 1384 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathb5.tfmbin0 -> 1384 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathb6.tfmbin0 -> 1384 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathb7.tfmbin0 -> 1384 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathb8.tfmbin0 -> 1384 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathb9.tfmbin0 -> 1384 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathc10.tfmbin0 -> 1992 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathu10.tfmbin0 -> 700 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathux10.tfmbin0 -> 928 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathx10.tfmbin0 -> 1520 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathx12.tfmbin0 -> 1532 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathx5.tfmbin0 -> 1540 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathx6.tfmbin0 -> 1528 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathx7.tfmbin0 -> 1540 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathx8.tfmbin0 -> 1524 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/mathabx/mathx9.tfmbin0 -> 1532 bytes
79 files changed, 17584 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/matha10.mf b/Master/texmf-dist/fonts/source/public/mathabx/matha10.mf
new file mode 100644
index 00000000000..dadcb3a2490
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/matha10.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: matha10.mf (math serie A at 10 points)
+% last modification: May 16, 2005.
+
+font_identifier:="matha"; font_size 10pt#;
+font_coding_scheme "matha";
+
+input mathprmt;
+input mathadrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/matha12.mf b/Master/texmf-dist/fonts/source/public/mathabx/matha12.mf
new file mode 100644
index 00000000000..7c5b5fe1652
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/matha12.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: matha12.mf (math serie A at 12 points)
+% last modification: May 16, 2005.
+
+font_identifier:="matha"; font_size 12pt#;
+font_coding_scheme "matha";
+
+input mathprmt;
+input mathadrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/matha5.mf b/Master/texmf-dist/fonts/source/public/mathabx/matha5.mf
new file mode 100644
index 00000000000..fdd43a1747d
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/matha5.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: matha5.mf (math serie A at 5 points)
+% last modification: May 16, 2005.
+
+font_identifier:="matha"; font_size 5pt#;
+font_coding_scheme "matha";
+
+input mathprmt;
+input mathadrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/matha6.mf b/Master/texmf-dist/fonts/source/public/mathabx/matha6.mf
new file mode 100644
index 00000000000..f4096c42236
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/matha6.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: matha6.mf (math serie A at 6 points)
+% last modification: May 16, 2005.
+
+font_identifier:="matha"; font_size 6pt#;
+font_coding_scheme "matha";
+
+input mathprmt;
+input mathadrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/matha7.mf b/Master/texmf-dist/fonts/source/public/mathabx/matha7.mf
new file mode 100644
index 00000000000..155252b1d5c
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/matha7.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: matha7.mf (math serie A at 7 points)
+% last modification: May 16, 2005.
+
+font_identifier:="matha"; font_size 7pt#;
+font_coding_scheme "matha";
+
+input mathprmt;
+input mathadrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/matha8.mf b/Master/texmf-dist/fonts/source/public/mathabx/matha8.mf
new file mode 100644
index 00000000000..045bb4e47ad
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/matha8.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: matha8.mf (math serie A at 8 points)
+% last modification: May 16, 2005.
+
+font_identifier:="matha"; font_size 8pt#;
+font_coding_scheme "matha";
+
+input mathprmt;
+input mathadrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/matha9.mf b/Master/texmf-dist/fonts/source/public/mathabx/matha9.mf
new file mode 100644
index 00000000000..6726698b995
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/matha9.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: matha9.mf (math serie A at 9 points)
+% last modification: May 16, 2005.
+
+font_identifier:="matha"; font_size 9pt#;
+font_coding_scheme "matha";
+
+input mathprmt;
+input mathadrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathacnt.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathacnt.mf
new file mode 100644
index 00000000000..6a524b899d5
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathacnt.mf
@@ -0,0 +1,367 @@
+% mathematical symbols by Anthony Phan.
+% file: mathacnt.mf (accents)
+% 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;
+
+% ACCENTS (nullissime)
+
+diacritics_proofing;% changes extra_endchar for proof mode.
+hat_w:=hex"70";
+check_w:=hex"71";
+tilde_w:=hex"72";
+bar_w:=hex"73";
+arrow_w:=hex"74";
+paren_w:=hex"75";
+
+hat_ww:=hex"78"; hat_www:=hex"79";
+hat_wwww:=hex"7A"; hat_wwwww:=hex"7B";
+check_ww:=hex"7C"; check_www:=hex"7D";
+check_wwww:=hex"7E"; check_wwwww:=hex"7F";
+tilde_ww:=hex"80"; tilde_www:=hex"81";
+tilde_wwww:=hex"82"; tilde_wwwww:=hex"83";
+bar_ww:=hex"84"; bar_www:=hex"85";
+bar_wwww:=hex"86"; bar_wwwww:=hex"87";
+arrow_ww:=hex"88"; arrow_www:=hex"89";
+arrow_wwww:=hex"8A"; arrow_wwwww:=hex"8B";
+paren_ww:=hex"8C"; paren_www:=hex"8D";
+paren_wwww:=hex"8E"; paren_wwwww:=hex"8F";
+
+charlist hat_w: hat_ww: hat_www: hat_wwww: hat_wwwww;
+charlist check_w: check_ww: check_www: check_wwww: check_wwwww;
+charlist tilde_w: tilde_ww: tilde_www: tilde_wwww: tilde_wwwww;
+charlist bar_w: bar_ww: bar_www: bar_wwww: bar_wwwww;
+charlist arrow_w: arrow_ww: arrow_www: arrow_wwww: arrow_wwwww;
+charlist paren_w: paren_ww: paren_www: paren_wwww: paren_wwwww;
+
+vardef tmp_program(expr orientation,overshot,appr,coef)=
+ save a,b,c;
+ pickup crisp.nib;
+ b=coef[0.8[vair,stem],stem];
+ b'=coef[min(vair,hair),max(vair,hair)];
+ if orientation=up:
+ top y2r=top y3r=h+overshot;
+ bot y1r=bot y4r=vround 0.5[x_height,h];
+ else:
+ bot y2r=bot y3r=vround 0.5[x_height,h]-overshot;
+ top y1r=top y4r=h; fi
+ lft x2r=hround 0.5(w-b);
+ rt x3r-lft x2r=hround b;
+ lft x1r=appr; x4r-x3r=x2r-x1r;
+ x=0.5(b-b')/length(z2r-z1r);
+ a=if orientation=up: 180+ fi (angle(z2r-z1r)-angle(x,1+-+x));
+ pos1(b',a); pos2(b,a); pos3(b,180-a); pos4(b',180-a);
+ z0=whatever[z1l,z2l]; z0=whatever[z3l,z4l];
+ filldraw z1r--z2r--z3r--z4r--z4l--z0--z1l--cycle;
+ penlabels(0,1,2,3,4)
+enddef;
+
+use_rule1;
+
+beginchar(hat_accent,7u#+2appr#,min(asc_height#,2x_height#),0);
+ "Circumflex accent";
+ tmp_program(up,0,appr+u,0);
+endchar;
+
+beginchar(hat_w,8u#+2appr#,0.5[asc_height#,body_height#],0);
+ "Wide circumflex accent 1";
+ tmp_program(up,o,appr-0.5u,0.2);
+endchar;
+
+beginchar(hat_ww,16u#+2appr#,body_height#,0);
+ "Wide circumflex accent 2";
+ tmp_program(up,o,appr-0.5u,0.4);
+endchar;
+
+beginchar(hat_www,24u#+2appr#,body_height#,0);
+ "Wide circumflex accent 3";
+ tmp_program(up,o,appr-0.5u,0.6);
+endchar;
+
+beginchar(hat_wwww,32u#+2appr#,body_height#,0);
+ "Wide circumflex accent 4";
+ tmp_program(up,o,appr-0.5u,0.8);
+endchar;
+
+beginchar(hat_wwwww,40u#+2appr#,body_height#,0);
+ "Wide circumflex accent 5";
+ tmp_program(up,o,appr-0.5u,1);
+endchar;
+
+beginchar(check_accent,7u#+2appr#,min(asc_height#,2x_height#),0);
+ "Check accent";
+ tmp_program(down,0,appr-0.5u,0);
+endchar;
+
+beginchar(check_w,8u#+2appr#,0.5[asc_height#,body_height#],0);
+ "Wide check accent 1";
+ tmp_program(down,o,appr-0.5u,0.2);
+endchar;
+
+beginchar(check_ww,16u#+2appr#,body_height#,0);
+ "Wide check accent 2";
+ tmp_program(down,o,appr-0.5u,0.4);
+endchar;
+
+beginchar(check_www,24u#+2appr#,body_height#,0);
+ "Wide check accent 3";
+ tmp_program(down,o,appr-0.5u,0.6);
+endchar;
+
+beginchar(check_wwww,32u#+2appr#,body_height#,0);
+ "Wide check accent 4";
+ tmp_program(down,o,appr-0.5u,0.8);
+endchar;
+
+beginchar(check_wwwww,40u#+2appr#,body_height#,0);
+ "Wide check accent 5";
+ tmp_program(down,o,appr-0.5u,1);
+endchar;
+
+vardef tmp_program(expr height,depth,approach,coef)=
+ pickup tiny.nib;
+ save a,b,c;
+ a=angle(w-2approach,9(height-depth));
+ b=angle(w-2approach,-3(height-depth));
+ b'=coef[0.5[vair,hair],max(vair,hair)];
+ c=coef[0.8[vair,stem],stem];
+ pos1(b',a+90); pos9(b',a+90); pos5(c,b+90);
+ bot y7l=depth-eps; top y3r=height+eps;
+ y1l=good.y 1/6[y7l,y3r]; y3r-y9r=y1l-y7l;
+ top y3r-bot y3l=top y7r-bot y7l=vround 0.5[b',c];
+ lft x1r=w-rt x9l=approach;
+ z5=0.5[z1,z9];
+ forsuffixes $=r,l: y2$=y3$=y4$; y6$=y7$=y8$;
+ z2$-z1$=whatever*dir a; z8$-z9$=whatever*dir a;
+ z4$-z5$=whatever*dir b; z6$-z5$=whatever*dir b;
+ x3$=0.666[x2$,x4$]; x7$=0.666[x8$,x6$];
+ endfor
+ filldraw stroke z1e..controls .666[z1e,z2e] and .666[z3e,z2e]
+ ..z3e..controls .666[z3e,z4e] and .666[z5e,z4e]
+ ..z5e..controls .666[z5e,z6e] and .666[z7e,z6e]
+ ..z7e..controls .666[z7e,z8e] and .666[z9e,z8e]..z9e;
+%penlabels(1,2,3,4,5,6,7,8,9);
+enddef;
+
+beginchar(tilde_accent,7u#+2appr#,min(asc_height#,2x_height#),0);
+ "Tilde accent";
+ tmp_program(h,vround 0.5[x_height,asc_height],appr,0);
+endchar;
+
+beginchar(tilde_w,8u#+2appr#,0.5[asc_height#,body_height#],0);
+ "Wide tilde accent 1";
+ tmp_program(h,vround 0.5[x_height,asc_height],appr-0.5u,0.2);
+endchar;
+
+beginchar(tilde_ww,16u#+2appr#,body_height#,0);
+ "Wide tilde accent 2";
+ tmp_program(h,vround 0.5[x_height,asc_height],appr-0.5u,0.4);
+endchar;
+
+beginchar(tilde_www,24u#+2appr#,body_height#,0);
+ "Wide tilde accent 3";
+ tmp_program(h,vround 0.5[x_height,asc_height],appr-0.5u,0.6);
+endchar;
+
+beginchar(tilde_wwww,32u#+2appr#,body_height#,0);
+ "Wide tilde accent 4";
+ tmp_program(h,vround 0.5[x_height,asc_height],appr-0.5u,0.8);
+endchar;
+
+beginchar(tilde_wwwww,40u#+2appr#,body_height#,0);
+ "Wide tilde accent 5";
+ tmp_program(h,vround 0.5[x_height,asc_height],appr-0.5u,1);
+endchar;
+
+% changes august 23, 2004.
+
+beginchar(bar_accent,7u#+2appr#,
+ %x_height#+body_height#-cap_height#,0);
+ 0.5[x_height#,asc_height#],0);
+ "Bar accent";
+ pickup crisp.nib;
+ a:=vround 0.0[min(0.2[vair,stem],rth0),rth1];
+ pos1(a,90); pos2(a,90); lft x1-appr=w-appr-rt x2=hround 0.25u;
+ top y1r=top y2r=vround(h+0.5a);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(bar_w,8u#+2appr#,
+ %x_height#+body_height#-cap_height#,0);
+ 0.5[x_height#,body_height#],0);
+ "Wide bar accent 1";
+ pickup crisp.nib;
+ a:=vround 0.0[min(0.2[vair,stem],rth0),rth1];
+ pos1(a,90); pos2(a,90); lft x1-appr=w-appr-rt x2=hround 0.0u;
+ top y1r=top y2r=vround(h+0.5a);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(bar_ww,16u#+2appr#,
+ %x_height#+body_height#-cap_height#,0);
+ 0.5[x_height#,body_height#],0);
+ "Wide bar accent 2";
+ pickup crisp.nib;
+ a:=vround 0.0[min(0.2[vair,stem],rth0),rth1];
+ pos1(a,90); pos2(a,90); lft x1-appr=w-appr-rt x2=hround 0.0u;
+ top y1r=top y2r=vround(h+0.5a);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(bar_www,24u#+2appr#,
+ %x_height#+body_height#-cap_height#,0);
+ 0.5[x_height#,body_height#],0);
+ "Wide bar accent 3";
+ pickup crisp.nib;
+ a:=vround 0.0[min(0.2[vair,stem],rth0),rth1];
+ pos1(a,90); pos2(a,90); lft x1-appr=w-appr-rt x2=hround 0.0u;
+ top y1r=top y2r=vround(h+0.5a);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(bar_wwww,32u#+2appr#,
+ %x_height#+body_height#-cap_height#,0);
+ 0.5[x_height#,body_height#],0);
+ "Wide bar accent 4";
+ pickup crisp.nib;
+ a:=vround 0.0[min(0.2[vair,stem],rth0),rth1];
+ pos1(a,90); pos2(a,90); lft x1-appr=w-appr-rt x2=hround 0.0u;
+ top y1r=top y2r=vround(h+0.5a);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(bar_wwwww,40u#+2appr#,
+ %x_height#+body_height#-cap_height#,0);
+ 0.5[x_height#,body_height#],0);
+ "Wide bar accent 5";
+ pickup crisp.nib;
+ a:=vround 0.0[min(0.2[vair,stem],rth0),rth1];
+ pos1(a,90); pos2(a,90); lft x1-appr=w-appr-rt x2=hround 0.0u;
+ top y1r=top y2r=vround(h+0.5a);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+arrow_stress := 0.52;
+arrow_tense1 := 0.75;
+arrow_tense2 := 0.875;
+
+beginchar(arrow_accent,7u#+2appr#,min(asc_height#,2x_height#),0);
+ "Arrow accent";
+ pickup tiny.nib;
+ arrow_width := 2ceiling 0.3(h-x_height)+rth;
+ arrow_height := hround 3.25u;
+ arrow_breadth := rth;
+ y2=y3=vround(0.7[x_height,h]-0.5rth)+0.5rth;
+ lft x2=w-rt x3=appr-hround 0.5u;
+ arrow_head1(z2..z3,both); x2r=x2l=x2; y1r=y2r; y1l=y2l;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(arrow_w,8u#+2appr#,0.5[asc_height#,body_height#],0);
+ "Wide arrow accent 1";
+ pickup tiny.nib;
+ arrow_width := 2ceiling 0.3(h-x_height)+rth;
+ arrow_height := hround 3.3u;
+ arrow_breadth := rth;
+ y2=y3=vround(0.7[x_height,h]-0.5rth)+0.5rth;
+ lft x2=w-rt x3=appr-hround 0.5u;
+ arrow_head1(z2..z3,both); x2r=x2l=x2; y1r=y2r; y1l=y2l;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(arrow_ww,16u#+2appr#,body_height#,0);
+ "Wide arrow accent 2";
+ pickup tiny.nib;
+ arrow_width := 2ceiling 0.3(h-x_height)+rth;
+ arrow_height := hround 3.35u;
+ arrow_breadth := rth;
+ y2=y3=vround(0.7[x_height,h]-0.5rth)+0.5rth;
+ lft x2=w-rt x3=appr-hround 0.5u;
+ arrow_head1(z2..z3,both); x2r=x2l=x2; y1r=y2r; y1l=y2l;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(arrow_www,24u#+2appr#,body_height#,0);
+ "Wide arrow accent 3";
+ pickup tiny.nib;
+ arrow_width := 2ceiling 0.3(h-x_height)+rth;
+ arrow_height := hround 3.4u;
+ arrow_breadth := rth;
+ y2=y3=vround(0.7[x_height,h]-0.5rth)+0.5rth;
+ lft x2=w-rt x3=appr-hround 0.5u;
+ arrow_head1(z2..z3,both); x2r=x2l=x2; y1r=y2r; y1l=y2l;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(arrow_wwww,32u#+2appr#,body_height#,0);
+ "Wide arrow accent 4";
+ pickup tiny.nib;
+ arrow_width := 2ceiling 0.3(h-x_height)+rth;
+ arrow_height := hround 3.45u;
+ arrow_breadth := rth;
+ y2=y3=vround(0.7[x_height,h]-0.5rth)+0.5rth;
+ lft x2=w-rt x3=appr-hround 0.5u;
+ arrow_head1(z2..z3,both); x2r=x2l=x2; y1r=y2r; y1l=y2l;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(arrow_wwwww,40u#+2appr#,body_height#,0);
+ "Wide arrow accent 5";
+ pickup tiny.nib;
+ arrow_width := 2ceiling 0.3(h-x_height)+rth;
+ arrow_height := hround 3.5u;
+ arrow_breadth := rth;
+ y2=y3=vround(0.7[x_height,h]-0.5rth)+0.5rth;
+ lft x2=w-rt x3=appr-hround 0.5u;
+ arrow_head1(z2..z3,both); x2r=x2l=x2; y1r=y2r; y1l=y2l;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+def tmp_program(expr orientation,overshot,approach,coef)=
+ pickup tiny.nib;
+ a:=vround 0.5[vair,stem]; pos2(a,90);
+ y2+0.5a=vround(h+0.5a+overshot); y1r=y3r=good.y 1/3[x_height,h];
+ lft x1r=w-rt x3r=hround approach; 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');
+enddef;
+
+beginchar(paren_accent,7u#+2appr#,0.5[x_height#,asc_height#],0);
+ "Parenthesis accent";
+ tmp_program(up,0,appr+0.25u,0);
+endchar;
+
+beginchar(paren_w,8u#+2appr#,0.5[x_height#,body_height#],0);
+ "Wide parenthesis accent 1";
+ tmp_program(up,o,appr,0.2);
+endchar;
+
+beginchar(paren_ww,16u#+2appr#,0.5[x_height#,body_height#],0);
+ "Wide parenthesis accent 2";
+ tmp_program(up,o,appr-0.25u,0.4);
+endchar;
+
+beginchar(paren_www,24u#+2appr#,0.5[x_height#,body_height#],0);
+ "Wide parenthesis accent 3";
+ tmp_program(up,o,appr-0.5u,0.6);
+endchar;
+
+beginchar(paren_wwww,32u#+2appr#,0.5[x_height#,body_height#],0);
+ "Wide parenthesis accent 4";
+ tmp_program(up,o,appr-0.5u,0.8);
+endchar;
+
+beginchar(paren_wwwww,40u#+2appr#,0.5[x_height#,body_height#],0);
+ "Wide parenthesis accent 5";
+ tmp_program(up,o,appr-0.5u,1);
+endchar;
+
+standard_proofing;% restore extra_endchar.
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathadrv.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathadrv.mf
new file mode 100644
index 00000000000..d196c6f55bc
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathadrv.mf
@@ -0,0 +1,280 @@
+% mathematical symbols by Anthony Phan.
+% file: mathadrv.mf (driver file for matha serie)
+% last modification: May 16, 2005.
+
+mode_setup;
+
+math_setup;
+
+% Activate to allow characters with undefined code.
+% (for proof mode compilation)
+% let iff=always_iff;
+
+% BINARY OPERATORS, RELATIONS
+
+input mathasym;
+
+% RELATIONS
+
+% MISCELLANEOUS
+
+negation_sign := hex"20";% we're not making any text font
+dominated := hex"21";
+dominating := hex"22";
+hash_sign := hex"23";
+
+not_sign := hex"7F";
+
+%negation_sign := hex"26";
+%reverse_negation_sign := hex"27";
+
+vdash_sign := hex"24";
+dashv_sign := hex"25";
+vdash_not := hex"26";
+dashv_not := hex"27";
+vDash_sign := hex"28";
+Dashv_sign := hex"29";
+vDash_not := hex"2A";
+Dashv_not := hex"2B";
+Vdash_sign := hex"2C";
+dashV_sign := hex"2D";
+Vdash_not := hex"2E";
+dashV_not := hex"2F";
+% hex"30"...hex"35", numerals...
+
+degree_sign := hex"30";
+prime_sign := hex"31";
+second_sign := hex"32";
+third_sign := hex"33";
+fourth_sign := hex"34";
+
+ligtable prime_sign : prime_sign =: second_sign;
+ligtable second_sign : prime_sign =: third_sign;
+ligtable third_sign : prime_sign =: fourth_sign;
+
+musical_flat_sign := hex"35";
+musical_natural_sign := hex"36";
+musical_sharp_sign := hex"37";
+
+% mathfine.mf
+
+Infinity := hex"38";
+proportionnal_to := hex"39";
+dagger := hex"3A";
+double_dagger := hex"3B";
+
+% mathbigs.mf
+
+small_summation_sign := hex"3C";
+small_product_sign := hex"3D";
+small_coproduct_sign := hex"3E";
+radical_sign := hex"3F";
+
+% upper_asterisk := hex"3A"; lower_asterisk := hex"3B";
+% triple_asterisk := hex"3C";
+% colon_sign := hex"5B";
+
+Dominated := hex"CE";
+Dominating := hex"CF";
+
+% LETTER LIKE SYMBOLS
+
+% mathltlk.mf
+
+for_all := hex"40";
+complement := hex"41";
+partial := hex"42";
+partial_slash := hex"43";
+there_exists := hex"44";
+there_not_exists := hex"45";
+F_inverse := hex"46";
+G_inverse := hex"47";
+empty_set := hex"48";
+diameter_sign := hex"49";
+top_sign := hex"4A";
+bot_sign := hex"4B";
+not_top_sign := hex"4C";
+not_bot_sign := hex"4D";
+wedge_curly := hex"4E";
+vee_curly := hex"4F";
+%%%%%%%% Q_inverse := hex"4A";
+%%%%%%%% Bourbaki_Z := hex"4F";
+
+belong_to := hex"50";
+not_belong_to := hex"52";
+var_not_belong_to := hex"54";
+belong_to_bar := hex"56";
+rev_belong_to := hex"51";
+not_rev_belong_to := hex"53";
+var_not_rev_belong_to := hex"55";
+rev_belong_to_bar := hex"57";
+
+cap_sign := hex"58";
+cup_sign := hex"59";
+cup_plus := hex"5A";
+sqcap_sign := hex"5B";
+sqcup_sign := hex"5C";
+sqcup_plus := hex"5D";
+wedge_sign := hex"5E";
+vee_sign := hex"5F";
+
+% DELIMITERS
+
+paren_left := hex"70";
+paren_right := hex"71";
+bracket_left := hex"72";
+bracket_right := hex"73";
+brace_left := hex"74";
+brace_right := hex"75";
+bbbracket_left := hex"76";
+bbbracket_right := hex"77";
+angle_left := hex"78";
+angle_right := hex"79";
+backslash := hex"7A";
+slash := hex"7B";
+vert_sign := hex"7C";
+vvert_sign := hex"7D";
+vvvert_sign := hex"7E";
+
+% TRIANGLES AS RELATIONS
+
+triangle_left := hex"98"; triangle_right := hex"99";
+not_triangle_left := hex"9A"; not_triangle_right := hex"9B";
+triangle_left_eq := hex"9C"; triangle_right_eq := hex"9D";
+not_triangle_left_eq := hex"9E"; not_triangle_right_eq := hex"9F";
+
+% ARROWS and HARPOONS
+
+arrow_left := hex"D0";
+arrow_right := hex"D1";
+arrow_up := hex"D2";
+arrow_down := hex"D3";
+arrow_northwest := hex"D4";
+arrow_northeast := hex"D5";
+arrow_southwest := hex"D6";
+arrow_southeast := hex"D7";
+arrow_left_right := hex"D8";
+arrow_up_down := hex"D9";
+arrow_left_not := hex"DA";
+arrow_right_not := hex"DB";
+arrow_left_right_not := hex"DC";
+
+relbar_char := hex"DD";
+maps_to_char := hex"DE";
+maps_from_char := hex"DF";
+
+harpoon_left_up := hex"E0";
+harpoon_right_up := hex"E1";
+harpoon_left_down := hex"E2";
+harpoon_right_down := hex"E3";
+harpoon_up_left := hex"E4";
+harpoon_down_left := hex"E5";
+harpoon_up_right := hex"E6";
+harpoon_down_right := hex"E7";
+harpoons_left_right := hex"E8";
+harpoons_right_left := hex"E9";
+harpoons_up_down := hex"EA";
+harpoons_down_up := hex"EB";
+
+double_arrow_left := hex"F0";
+double_arrow_right := hex"F1";
+double_arrow_up := hex"F2";
+double_arrow_down := hex"F3";
+double_arrow_left_right := hex"F4";
+double_arrow_up_down := hex"F5";
+double_arrow_left_not := hex"F6";
+double_arrow_right_not := hex"F7";
+double_arrow_left_right_not := hex"F8";
+Relbar_char := hex"F9";
+Maps_to_char := hex"FA";
+Maps_from_char := hex"FB";
+
+% let the show begin :
+
+input mathltlk;
+input mathfine;
+input mathbigs;
+input mathsmsy;
+input mathsymb;
+input matharrw;
+input mathbdel;
+
+main_name_string := "subset";
+t := hex"80";
+forsuffixes $=, _not, _eq, _not_eq, _eq_not,
+ _eq_varnot, _eqq, _not_eqq, _eqq_not, _eqq_varnot,
+ _double, _double_not:
+ main_name_with($) := t; t := t+2; endfor;
+input mathsubs;
+
+main_name_string := "supset";
+t := hex"81";
+forsuffixes $=, _not, _eq, _not_eq, _eq_not,
+ _eq_varnot, _eqq, _not_eqq, _eqq_not, _eqq_varnot,
+ _double, _double_not:
+ main_name_with($) := t; t := t+2; endfor;
+input mathsubs;
+
+main_name_string := "less";
+t := hex"A0";
+forsuffixes $=, _not, _slant, _not_slant,
+ _eq, _not_eq, _eq_not, %_eqvarnot,
+ _eqq, _not_eqq, _eqq_not, _eqq_varnot,
+ _upperslant, _not_upperslant,
+ _opposite, _eq_opposite, _eqq_opposite,
+ _sim, _not_sim, _sim_not, _approx, _not_approx, _approx_not, _dot:
+ main_name_with($) := t; t := t+2; endfor;
+input mathineq;
+
+main_name_string := "greater";
+t := hex"A1";
+forsuffixes $=, _not, _slant, _not_slant,
+ _eq, _not_eq, _eq_not, %_eq_varnot,
+ _eqq, _not_eqq, _eqq_not, _eqq_varnot,
+ _upperslant, _not_upperslant,
+ _opposite, _eq_opposite, _eqq_opposite,
+ _sim, _not_sim, _sim_not, _approx, _not_approx, _approx_not, _dot:
+ main_name_with($) := t; t := t+2; endfor;
+input mathineq;
+
+main_name_string := "mcircle";% ``m'' stands for medium.
+t := hex"60";
+forsuffixes $=_plus, _minus, _times, _division,
+ _dot, _circle, _asterisk, _co_asterisk,
+ _left, _right, _top, _bot,
+ _sign, _slash, _backslash, _triangle_up:
+ main_name_with($) := t; t := t+1; endfor;
+input mathmbcb;
+
+% see also:
+% _peace_and_love, _ying_yang,
+% _truc, _curt, _full_circle, _five_star, _six_star,
+% _triangle_down, _triangle_left, _triangle_right,
+% _top_dot_minus, _bot_dot_minus, _horiz, _vert, _cross, _across,
+% _wedge, _vee,
+% _black_left, _black_right, _black_top, _black_bot,
+% _black_northwest, _black_northeast, _black_southwest, _black_southeast:
+
+
+% parameters for TFM files.
+
+font_slant=0;
+font_x_height=x_height#;
+%font_normal_stretch=3u#;
+%font_normal_shrink=2u#;
+font_quad=18u#+4letter_fit#;
+font_extra_space=2u#;
+font_normal_space=6u#+2letter_fit#;
+
+end.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/matharrw.mf b/Master/texmf-dist/fonts/source/public/mathabx/matharrw.mf
new file mode 100644
index 00000000000..9486d72e1b0
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/matharrw.mf
@@ -0,0 +1,1367 @@
+% mathematical symbols by Anthony Phan.
+% file: matharrw.mf (arrow kit)
+% last modification: May 16, 2005.
+% Only known charcodes will be generated.
+
+use_rule1;
+
+%turningcheck:=0;
+
+arrow_head_fitting:=false;
+arrow_width := 2ceiling 0.84spread1+rth;
+arrow_height# := 4.2u#;
+arrow_height := round 4.2u;
+arrow_breadth := rth;
+arrow_stress := 0.52;%0.65;
+arrow_tense1 := 0.75;
+arrow_tense2 := 0.875;
+
+% Funny thing: using def for the next definition would
+% lead to strange things with transforms. The path must
+% be a whole thing (grouping). One could also use
+% parentheses.
+
+vardef straight_path(expr dir,overshot)=
+ save x_; x_=hround(0.5w+0.5rth)-0.5rth;
+ if dir=up:(x_,-d)..(x_,h+overshot-pen_top)
+ elseif dir=down:(x_,h)..(x_,-d-overshot-pen_bot)
+ elseif dir=left:(w-appr,math_axis)..(appr-overshot-pen_lft,math_axis)
+ else:(appr,math_axis)..(w-appr+overshot-pen_rt,math_axis) fi
+enddef;
+
+% ARROWS
+
+beginchar(arrow_left,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Left arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0),both);
+ rt x2=w-appr; y2=y1; pos2(rth,90);
+ filldraw stroke z1e..z2e;
+ penlabels(1,2);
+endchar;
+
+beginchar(arrow_right,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Right arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(right,0),both);
+ lft x2=appr; y2=y1; pos2(rth,-90);
+ filldraw stroke z1e..z2e;
+ penlabels(1,2);
+endchar;
+
+beginchar(arrow_left_right,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Left-right arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0),both);
+ arrow_head2(straight_path(right,0),both);
+ filldraw z1l--z2r--z2l--z1r--cycle;
+ penlabels(1,2);
+endchar;
+
+beginchar(arrow_left_not,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Negated left arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0),both);
+ rt x2=w-appr; y2=y1; pos2(rth,90);
+ filldraw stroke z1e..z2e;
+ v_adjust(3r,4l,y1,arrow_width);% to be checked
+ lft x4l=w-rt x3r=appr+hround 6u;
+ adjust_slanted_bar(4l,3r,4r,3l)(rth-tiny,-1);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrow_right_not,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Negated right arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(right,0),both);
+ lft x2=appr; y2=y1; pos2(rth,-90);
+ filldraw stroke z1e..z2e;
+ v_adjust(3r,4l,y1,arrow_width);% to be checked
+ lft x4l=w-rt x3r=appr+hround 6u;
+ adjust_slanted_bar(4l,3r,4r,3l)(rth-tiny,-1);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrow_left_right_not,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Negated left-right arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0),both);
+ arrow_head2(straight_path(right,0),both);
+ filldraw z1l--z2r--z2l--z1r--cycle;
+ v_adjust(3r,4l,y1,arrow_width);% to be checked
+ lft x4l=w-rt x3r=appr+hround 6u;
+ adjust_slanted_bar(4l,3r,4r,3l)(rth-tiny,-1);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrow_up,
+ 7u#+2appr#,asc_height#,asc_depth#);
+ "Upward arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(up,0),both);% corrected 2002/07/29
+ bot y2=-d; x2=x1; pos2(rth,0);
+ filldraw stroke z1e..z2e;
+ penlabels(1,2);
+endchar;
+
+beginchar(arrow_down,
+ 7u#+2appr#,asc_height#,asc_depth#);
+ "Downward arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(down,0),both);% corrected 2002/07/29
+ top y2=h; x2=x1; pos2(rth,180);
+ filldraw stroke z1e..z2e;
+ penlabels(1,2);
+endchar;
+
+beginchar(arrow_up_down,
+ 7u#+2appr#,asc_height#,asc_depth#);
+ "Upward-Downward arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(up,0),both);% corrected 2002/07/29
+ arrow_head2(straight_path(down,0),both);% corrected 2002/07/29
+ filldraw z1l--z2r--z2l--z1r--cycle;;
+ penlabels(1,2);
+endchar;
+
+beginchar(arrow_northwest,
+ 16u#+2appr#,asc_height#,asc_depth#);
+ "Northwest arrow";
+ pickup rule.nib; bot y2=-d; rt x2=w-appr;
+ pickup tiny.nib; top y3=h; lft x3=appr;
+ arrow_head1(z2..z3,both);
+ pickup rule.nib; draw z1..z2;
+ penlabels(1); labels(2,3);
+endchar;
+
+beginchar(arrow_northeast,
+ 16u#+2appr#,asc_height#,asc_depth#);
+ "Northeast arrow";
+ pickup rule.nib; bot y2=-d; lft x2=appr;
+ pickup tiny.nib; top y3=h; rt x3=w-appr;
+ arrow_head1(z2..z3,both);
+ pickup rule.nib; draw z1..z2;
+ penlabels(1); labels(2,3);
+endchar;
+
+beginchar(arrow_southwest,
+ 16u#+2appr#,asc_height#,asc_depth#);
+ "Southwest arrow";
+ pickup rule.nib; top y2=h; rt x2=w-appr;
+ pickup tiny.nib; bot y3=-d; lft x3=appr;
+ arrow_head1(z2..z3,both);
+ pickup rule.nib; draw z1..z2;
+ penlabels(1); labels(2,3);
+endchar;
+
+beginchar(arrow_southeast,
+ 16u#+2appr#,asc_height#,asc_depth#);
+ "Southeast arrow";
+ pickup rule.nib; top y2=h; lft x2=appr;
+ pickup tiny.nib; bot y3=-d; rt x3=w-appr;
+ arrow_head1(z2..z3,both);
+ pickup rule.nib; draw z1..z2;
+ penlabels(1); labels(2,3);
+endchar;
+
+beginchar(arrows_left_left,
+ 16u#+2appr#,v_center(spread2#+spread1#+rth#));
+ "Left-left arrows";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0) shifted (0,0.5spread2),both);
+ rt x2=w-appr; y2=y1; pos2(rth,90);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(left,0) shifted (0,-0.5spread2),both);
+ rt x4=w-appr; y4=y3; pos4(rth,90);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrows_right_right,
+ 16u#+2appr#,v_center(spread2#+spread1#+rth#));
+ "Right_right arrows";
+ pickup tiny.nib;
+ arrow_head1(straight_path(right,0) shifted (0,0.5spread2),both);
+ lft x2=appr; y2=y1; pos2(rth,-90);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(right,0) shifted (0,-0.5spread2),both);
+ lft x4=appr; y4=y3; pos4(rth,-90);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrows_left_right,
+ 16u#+2appr#,v_center(spread2#+spread1#+rth#));
+ "Left-right arrows";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0) shifted (0,0.5spread2),both);
+ rt x2=w-appr; y2=y1; pos2(rth,90);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(right,0) shifted (0,-0.5spread2),both);
+ lft x4=appr; y4=y3; pos4(rth,-90);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrows_right_left,
+ 16u#+2appr#,v_center(spread2#+spread1#+rth#));
+ "Right-left arrows";
+ pickup tiny.nib;
+ arrow_head1(straight_path(right,0) shifted (0,0.5spread2),both);
+ lft x2=appr; y2=y1; pos2(rth,-90);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(left,0) shifted (0,-0.5spread2),both);
+ rt x4=w-appr; y4=y3; pos4(rth,90);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrows_up_up,
+ 7u#+spread2#+2appr#,asc_height#,asc_depth#);
+ "Upward arrows";
+ pickup tiny.nib;
+ arrow_head1(straight_path(up,0)% corrected 2002/07/29
+ shifted (-0.5spread2,0),both);
+ bot y2=-d; x2=x1; pos2(rth,0);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(up,0)% corrected 2002/07/29
+ shifted (0.5spread2,0),both);
+ bot y4=-d; x4=x3; pos4(rth,0);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrows_down_down,
+ 7u#+spread2#+2appr#,asc_height#,asc_depth#);
+ "Downward arrows";
+ pickup tiny.nib;
+ arrow_head1(straight_path(down,0)% corrected 2002/07/29
+ shifted (-0.5spread2,0),both);
+ top y2=h; x2=x1; pos2(rth,180);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(down,0)% corrected 2002/07/29
+ shifted (0.5spread2,0),both);
+ top y4=h; x4=x3; pos4(rth,180);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrows_up_down,
+ 7u#+spread2#+2appr#,asc_height#,asc_depth#);
+ "Upward_downward arrows";
+ pickup tiny.nib;
+ arrow_head1(straight_path(up,0)% corrected 2002/07/29
+ shifted (-0.5spread2,0),both);
+ bot y2=-d; x2=x1; pos2(rth,0);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(down,0)% corrected 2002/07/29
+ shifted (0.5spread2,0),both);
+ top y4=h; x4=x3; pos4(rth,180);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrows_down_up,
+ 7u#+spread2#+2appr#,asc_height#,asc_depth#);
+ "Downward-upward arrows";
+ pickup tiny.nib;
+ arrow_head1(straight_path(down,0)% corrected 2002/07/29
+ shifted (-0.5spread2,0),both);
+ top y2=h; x2=x1; pos2(rth,180);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(up,0)% corrected 2002/07/29
+ shifted (0.5spread2,0),both);
+ bot y4=-d; x4=x3; pos4(rth,0);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+% STRANGE ARROWS
+
+beginchar(arrow_shift_up_left,
+ arithmetic_bounds);
+ "Up_left shift arrow";
+ pickup tiny.nib;
+ pos3(rth,0); rt x3r=w-Appr; bot y3=-d-o;
+ arrow_head1(straight_path(left,0) shifted (0,vround 3u),both);
+ forsuffixes $=,r,l: y2$=y1$; x2$=x3$; endfor
+ filldraw stroke z1e--z2e--z3e;
+ penlabels(1,2,3);
+endchar;
+
+beginchar(arrow_shift_up_right,
+ arithmetic_bounds);
+ "Up_right shift arrow";
+ pickup tiny.nib;
+ pos3(rth,0); lft x3l=Appr; bot y3=-d-o;
+ arrow_head1(straight_path(right,0) shifted (0,vround 3u),both);
+ forsuffixes $=,r,l: y2$=y1$; x2$=x3$; endfor
+ filldraw stroke z1e--z2e--z3e;
+ penlabels(1,2,3);
+endchar;
+
+beginchar(arrow_shift_down_left,
+ arithmetic_bounds);
+ "Down-left shift arrow";
+ pickup tiny.nib;
+ pos3(rth,180); rt x3l=w-Appr; top y3=h+o;
+ arrow_head1(straight_path(left,0) shifted (0,-vround 3u),both);
+ forsuffixes $=,r,l: y2$=y1$; x2$=x3$; endfor
+ filldraw stroke z1e--z2e--z3e;
+ penlabels(1,2,3);
+endchar;
+
+beginchar(arrow_shift_down_right,
+ arithmetic_bounds);
+ "Down-right shift arrow";
+ pickup tiny.nib;
+ pos3(rth,180); lft x3r=Appr; top y3=h+o;
+ arrow_head1(straight_path(right,0) shifted (0,-vround 3u),both);
+ forsuffixes $=,r,l: y2$=y1$; x2$=x3$; endfor
+ filldraw stroke z1e--z2e--z3e;
+ penlabels(1,2,3);
+endchar;
+
+beginchar(arrow_squig_left,
+ 6*3.5u#+arrow_height#+2appr#,v_center(spread1#+rth#));
+ "Left squig-arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0),both);
+ pickup rule.nib;
+ y2=y1;
+ y3=y5=y7=math_axis+0.5spread1;
+ y4=y6=y8=math_axis-0.5spread1;
+ x8=w-appr; x8-x2=6*3.5u;
+ x2-x3=x3-x4=x4-x5=x5-x6=x6-x7=x7-x8;
+ autorounded;
+ draw z1---z2...0.5[z3,z2]{(z3-z2) yscaled 2}...
+ z3{right}...0.5[z4,z3]{(z4-z3) yscaled 3}...
+ z4{right}...0.5[z5,z4]{(z5-z4) yscaled 3}...
+ z5{right}...0.5[z6,z5]{(z6-z5) yscaled 3}...
+ z6{right}...0.5[z7,z6]{(z7-z6) yscaled 3}...
+ z7{right}...0.5[z8,z7]{(z8-z7) yscaled 3}...
+ z8{right};
+ cullit; unfill (x8+1,top y8+1)--(x8+1,bot y8-1)
+ --(rt x8+1,bot y8-1)--(rt x8+1,top y8+1)--cycle;
+ labels(2,3,4,5,6,7,8); penlabels(1);
+endchar;
+
+beginchar(arrow_squig_right,
+ 6*3.5u#+arrow_height#+2appr#,v_center(spread1#+rth#));
+ "Right squig-arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(right,0),both);
+ pickup rule.nib;
+ y2=y1;
+ y3=y5=y7=math_axis-0.5spread1;
+ y4=y6=y8=math_axis+0.5spread1;
+ x8=appr; x2-x8=6*3.5u;
+ x2-x3=x3-x4=x4-x5=x5-x6=x6-x7=x7-x8;
+ autorounded;
+ draw z1---z2...0.5[z3,z2]{(z3-z2) yscaled 2}...
+ z3{left}...0.5[z4,z3]{(z4-z3) yscaled 3}...
+ z4{left}...0.5[z5,z4]{(z5-z4) yscaled 3}...
+ z5{left}...0.5[z6,z5]{(z6-z5) yscaled 3}...
+ z6{left}...0.5[z7,z6]{(z7-z6) yscaled 3}...
+ z7{left}...0.5[z8,z7]{(z8-z7) yscaled 3}...
+ z8{left};
+ cullit; unfill (x8-1,top y8+1)--(x8-1,bot y8-1)
+ --(lft x8-1,bot y8-1)--(lft x8-1,top y8+1)--cycle;
+ labels(2,3,4,5,6,7,8); penlabels(1);
+endchar;
+
+beginchar(arrow_squig_left_right,
+ 7*3.5u#+2*arrow_height#+2appr#,v_center(spread1#+rth#));
+ "Left right squig-arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0),both);
+ arrow_head10(straight_path(right,0),both);
+ pickup rule.nib;
+ y2=y1; y9=y10;
+ y3=y5=y7=math_axis+0.5spread1;
+ y4=y6=y8=math_axis-0.5spread1;
+ x9-x2=7*3.5u; 0.5[x2,x9]=0.5w;
+ x2-x3=x3-x4=x4-x5=x5-x6=x6-x7=x7-x8=x8-x9;
+ autorounded;
+ draw z1---z2...0.5[z3,z2]{(z3-z2) yscaled 3}...
+ z3{right}...0.5[z4,z3]{(z4-z3) yscaled 3}...
+ z4{right}...0.5[z5,z4]{(z5-z4) yscaled 3}...
+ z5{right}...0.5[z6,z5]{(z6-z5) yscaled 3}...
+ z6{right}...0.5[z7,z6]{(z7-z6) yscaled 3}...
+ z7{right}...0.5[z8,z7]{(z8-z7) yscaled 3}...
+ z8{right}...0.5[z9,z8]{(z9-z8) yscaled 3}...
+ z9---z10;
+ labels(2,3,4,5,6); penlabels(1,7);
+endchar;
+
+beginchar(arrow_curve_top_left,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Top-left curved arrow";
+ pickup tiny.nib;
+ bot y1=bot y3=-d-eps; y2+0.5rth=h+o;
+ rt x1=w-appr; x2=0.5w; lft x3=appr;
+ z0=(z2-z1) yscaled 3;
+ tmp_path:=z1{z0}...z2{left}...z3{(z3-z2) yscaled 3};
+ arrow_head4(tmp_path,both);
+ pos1(rth,angle z0-90); pos2(rth,90);
+ filldraw stroke z1e{z0}...z2e{left}
+ ...z4e{direction arrow_time of tmp_path};
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrow_curve_top_right,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Top-right curved arrow";
+ pickup tiny.nib;
+ bot y1=bot y3=-d-eps; y2+0.5rth=h+o;
+ lft x1=appr; x2=0.5w; rt x3=w-appr;
+ z0=(z2-z1) yscaled 3;
+ tmp_path:=z1{z0}...z2{right}...z3{(z3-z2) yscaled 3};
+ arrow_head4(tmp_path,both);
+ pos1(rth,angle z0-90); pos2(rth,-90);
+ filldraw stroke z1e{z0}...z2e{right}
+ ...z4e{direction arrow_time of tmp_path};
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrow_curve_top_left_right,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Top-left-right curved arrow";
+ pickup tiny.nib;
+ bot y1=bot y3=-d-eps; y2+0.5rth=h+o;
+ rt x1=w-appr; x2=0.5w; lft x3=appr;
+ tmp_path:=z1{(z2-z1) yscaled 3}...z2{left}...z3{(z3-z2) yscaled 3};
+ arrow_head0(reverse tmp_path,both); t:=2-arrow_time;
+ arrow_head4(tmp_path,both);
+ pickup rule.nib;
+ draw subpath (t,arrow_time) of tmp_path;
+ labels(1,2,3); penlabels(0,4);
+endchar;
+
+beginchar(arrow_curve_bot_left,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Bot-left curved arrow";
+ pickup tiny.nib;
+ top y1=top y3=h+eps; y2-0.5rth=-d-o;
+ rt x1=w-appr; x2=0.5w; lft x3=appr;
+ z0=(z2-z1) yscaled 3;
+ tmp_path:=z1{z0}...z2{left}...z3{(z3-z2) yscaled 3};
+ arrow_head4(tmp_path,both);
+ pos1(rth,angle z0-90); pos2(rth,90);
+ filldraw stroke z1e{z0}...z2e{left}
+ ...z4e{direction arrow_time of tmp_path};
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrow_curve_bot_right,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Bot-right curved arrow";
+ pickup tiny.nib;
+ top y1=top y3=h+eps; y2-0.5rth=-d-o;
+ lft x1=appr; x2=0.5w; rt x3=w-appr;
+ z0=(z2-z1) yscaled 3;
+ tmp_path:=z1{z0}...z2{right}...z3{(z3-z2) yscaled 3};
+ arrow_head4(tmp_path,both);
+ pos1(rth,angle z0-90); pos2(rth,-90);
+ filldraw stroke z1e{z0}...z2e{right}
+ ...z4e{direction arrow_time of tmp_path};
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrow_curve_bot_left_right,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Bot-left-right curved arrow";
+ pickup tiny.nib;
+ top y1=top y3=h+eps; y2-0.5rth=-d-o;
+ rt x1=w-appr; x2=0.5w; lft x3=appr;
+ tmp_path:=z1{(z2-z1) yscaled 3}...z2{left}...z3{(z3-z2) yscaled 3};
+ arrow_head0(reverse tmp_path,both); t:=2-arrow_time;
+ arrow_head4(tmp_path,both);
+ pickup rule.nib;
+ draw subpath (t,arrow_time) of tmp_path;
+ labels(1,2,3); penlabels(0,4);
+endchar;
+
+beginchar(arrow_loop_up_left,
+ 16u#+2appr#,v_center(12u#));
+ "Up-left loop-arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0),both);
+ lft x8l=w-appr-hround 6u; bot y8=-d;
+ pos7(rth,180); pos8(rth,180);
+ y1=y2=y3=y7; x2=x6=x7=x8;
+ filldraw stroke z8e..z7e;
+ pickup rule.nib; autorounded;
+ top y5=h; rt x4=w-appr;
+ y4=y6=0.5[y3,y5]; x3=x5=0.5[x4,x6];
+ draw z1..z2..z3 right_to_up z4
+ up_to_left z5 left_to_down z6..z7;
+ labels(1,2,3,4,5,6); penlabels(7,8);
+endchar;
+
+beginchar(arrow_loop_up_right,
+ 16u#+2appr#,v_center(12u#));
+ "Up-right loop-arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(right,0),both);
+ rt x8r=appr+hround 6u; bot y8=-d;
+ pos7(rth,180); pos8(rth,180);
+ y1=y2=y3=y7; x2=x6=x7=x8;
+ filldraw stroke z8e..z7e;
+ pickup rule.nib; autorounded;
+ top y5=h; lft x4=appr;
+ y4=y6=0.5[y3,y5]; x3=x5=0.5[x4,x6];
+ draw z1..z2..z3 left_to_up z4
+ up_to_right z5 right_to_down z6..z7;
+ labels(1,2,3,4,5,6); penlabels(7,8);
+endchar;
+
+beginchar(arrow_loop_down_left,
+ 16u#+2appr#,v_center(12u#));
+ "Down-left loop-arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0),both);
+ lft x8r=w-appr-hround 6u; top y8=h;
+ pos7(rth,0); pos8(rth,0);
+ y1=y2=y3=y7; x2=x6=x7=x8;
+ filldraw stroke z8e..z7e;
+ pickup rule.nib; autorounded;
+ bot y5=-d; rt x4=w-appr;
+ y4=y6=0.5[y3,y5]; x3=x5=0.5[x4,x6];
+ draw z1..z2..z3 right_to_down z4
+ down_to_left z5 left_to_up z6..z7;
+ labels(1,2,3,4,5,6); penlabels(7,8);
+endchar;
+
+beginchar(arrow_loop_down_right,
+ 16u#+2appr#,v_center(12u#));
+ "Down-right loop-arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(right,0),both);
+ rt x8l=appr+hround 6u; top y8=h;
+ pos7(rth,0); pos8(rth,0);
+ y1=y2=y3=y7; x2=x6=x7=x8;
+ filldraw stroke z8e..z7e;
+ pickup rule.nib; autorounded;
+ bot y5=-d; lft x4=appr;
+ y4=y6=0.5[y3,y5]; x3=x5=0.5[x4,x6];
+ draw z1..z2..z3 left_to_down z4
+ down_to_right z5 right_to_up z6..z7;
+ labels(1,2,3,4,5,6); penlabels(7,8);
+endchar;
+
+beginchar(arrow_circle_left,
+ arithmetic_bounds);
+ "Left circle-arrow";
+ arrow_head_fitting:=true;
+ a:=6.75u; t:=0.25;
+ pickup rule.nib;
+ x0=x1=x3=good.x 0.5w;
+ y0=y2=y4=math_axis;
+ y1-y0=y0-y3=x4-x0=x0-x2=round(a-0.5rth);
+ tmp_path:=subpath (t,8-t) of
+ (z1 left_to_down z2 down_to_right
+ z3 right_to_up z4 up_to_left z1);
+ pickup tiny.nib;
+ arrow_head5(tmp_path,both);
+ pickup rule.nib;
+ cutdraw subpath(0,arrow_time) of tmp_path;
+ labels(1,2,3,4); penlabels(1);
+endchar;
+
+beginchar(arrow_circle_right,
+ arithmetic_bounds);
+ "Right circle-arrow";
+ arrow_head_fitting:=true;
+ a:=6.75u; t:=0.25;
+ pickup rule.nib;
+ x0=x1=x3=good.x 0.5w;
+ y0=y2=y4=math_axis;
+ y1-y0=y0-y3=x2-x0=x0-x4=round(a-0.5rth);
+ tmp_path:=subpath (t,8-t) of
+ (z1 right_to_down z2 down_to_left
+ z3 left_to_up z4 up_to_right z1);
+ pickup tiny.nib;
+ arrow_head5(tmp_path,both);
+ pickup rule.nib;
+ cutdraw subpath(0,arrow_time) of tmp_path;
+ labels(1,2,3,4); penlabels(1);
+endchar;
+
+beginchar(arrow_left_to_right,
+ 16u#+2appr#,v_center(12u#));
+ "Left to right arrow";
+ arrow_head_fitting:=true;
+ pickup rule.nib;
+ x1=x5=w-appr; lft x3=appr; top y2=h-vround 0.5u; y1-y5=spread1;
+ 0.5[y1,y5]=0.5[y2,y4]=y3=math_axis;
+ x2=x4=3/8[appr,w-appr];
+ tmp_path:=z1{(z2-z1) yscaled 2}...z2 left_to_down
+ z3 down_to_right z4...z5{(z5-z4) yscaled 2};
+ pickup tiny.nib;
+ arrow_head6(tmp_path,both);
+ pickup rule.nib;
+ cutdraw subpath (0,arrow_time) of tmp_path;
+ labels(1,2,3,4,5); penlabels(6);
+endchar;
+
+beginchar(arrow_right_to_left,
+ 16u#+2appr#,v_center(12u#));
+ "Right to left arrow";
+ arrow_head_fitting:=true;
+ pickup rule.nib;
+ x1=x5=appr; rt x3=w-appr; top y4=h-vround 0.5u; y5-y1=spread1;
+ 0.5[y1,y5]=0.5[y2,y4]=y3=math_axis;
+ x2=x4=5/8[appr,w-appr];
+ tmp_path:=z1{(z2-z1) yscaled 2}...z2 right_to_up
+ z3 up_to_left z4...z5{(z5-z4) yscaled 2};
+ pickup tiny.nib;
+ arrow_head6(tmp_path,both);
+ pickup rule.nib;
+ cutdraw subpath (0,arrow_time) of tmp_path;
+ labels(1,2,3,4,5); penlabels(6);
+endchar;
+
+beginchar(arrow_up_to_down,
+ 12u#+2appr#,asc_height#,asc_depth#);
+ "Up to down arrow";
+ arrow_head_fitting:=true;
+ pickup rule.nib;
+ y1=y5=-d; top y3=h; lft x4=appr+hround 0.5u; x1-x5=spread1;
+ 0.5[x1,x5]=0.5[x2,x4]=x3=0.5w;
+ y2=y4=5/8[-d,h];
+ tmp_path:=z1{(z2-z1) xscaled 2}...z2 up_to_left
+ z3 left_to_down z4...z5{(z5-z4) xscaled 2};
+ pickup tiny.nib;
+ arrow_head6(tmp_path,both);
+ pickup rule.nib;
+ cutdraw subpath (0,arrow_time) of tmp_path;
+ labels(1,2,3,4,5); penlabels(6);
+endchar;
+
+beginchar(arrow_down_to_up,
+ 12u#+2appr#,asc_height#,asc_depth#);
+ "Down to up arrow";
+ arrow_head_fitting:=true;
+ pickup rule.nib;
+ y1=y5=h; bot y3=-d; lft x2=appr+hround 0.5u; x5-x1=spread1;
+ 0.5[x1,x5]=0.5[x2,x4]=x3=0.5w;
+ y2=y4=3/8[-d,h];
+ tmp_path:=z1{(z2-z1) xscaled 2}...z2 down_to_right
+ z3 right_to_up z4...z5{(z5-z4) xscaled 2};
+ pickup tiny.nib;
+ arrow_head6(tmp_path,both);
+ pickup rule.nib;
+ cutdraw subpath (0,arrow_time) of tmp_path;
+ labels(1,2,3,4,5); penlabels(6);
+endchar;
+
+% HARPOONS
+
+beginchar(harpoon_left_up,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Left up-harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0),right);
+ rt x2=w-appr; y2=y1; pos2(rth,90);
+ filldraw stroke z1e..z2e;
+ penlabels(1,2);
+endchar;
+
+beginchar(harpoon_right_up,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Right up-harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(right,0),left);
+ lft x2=appr; y2=y1; pos2(rth,-90);
+ filldraw stroke z1e..z2e;
+ penlabels(1,2);
+endchar;
+
+beginchar(harpoon_left_down,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Left down-harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0),left);
+ rt x2=w-appr; y2=y1; pos2(rth,90);
+ filldraw stroke z1e..z2e;
+ penlabels(1,2);
+endchar;
+
+beginchar(harpoon_right_down,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Right down-harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(right,0),right);
+ lft x2=appr; y2=y1; pos2(rth,-90);
+ filldraw stroke z1e..z2e;
+ penlabels(1,2);
+endchar;
+
+beginchar(harpoon_up_left,
+ 7u#+2appr#,asc_height#,asc_depth#);
+ "Upward left-harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(up,0),left);
+ bot y2=-d; x2=x1; pos2(rth,0);
+ filldraw stroke z1e..z2e;
+ penlabels(1,2);
+endchar;
+
+beginchar(harpoon_down_left,
+ 7u#+2appr#,asc_height#,asc_depth#);
+ "Upward left-harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(down,0),right);
+ top y2=h; x2=x1; pos2(rth,180);
+ filldraw stroke z1e..z2e;
+ penlabels(1,2);
+endchar;
+
+beginchar(harpoon_up_right,
+ 7u#+2appr#,asc_height#,asc_depth#);
+ "Downward right-harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(up,0),right);
+ bot y2=-d; x2=x1; pos2(rth,0);
+ filldraw stroke z1e..z2e;
+ penlabels(1,2);
+endchar;
+
+beginchar(harpoon_down_right,
+ 7u#+2appr#,asc_height#,asc_depth#);
+ "Downward right-harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(down,0),left);
+ top y2=h; x2=x1; pos2(rth,180);
+ filldraw stroke z1e..z2e;
+ penlabels(1,2);
+endchar;
+
+beginchar(harpoons_left_left,
+ 16u#+2appr#,v_center(2spread1#+rth#));
+ "Left-left harpoons";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0) shifted (0,0.5spread1),right);
+ rt x2=w-appr; y2=y1; pos2(rth,90);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(left,0) shifted (0,-0.5spread1),left);
+ rt x4=w-appr; y4=y3; pos4(rth,90);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(harpoons_right_right,
+ 16u#+2appr#,v_center(2spread1#+rth#));
+ "Right-right harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(right,0) shifted (0,0.5spread1),left);
+ lft x2=appr; y2=y1; pos2(rth,-90);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(right,0) shifted (0,-0.5spread1),right);
+ lft x4=appr; y4=y3; pos4(rth,-90);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(harpoons_left_right,
+ 16u#+2appr#,v_center(2spread1#+rth#));
+ "Left-right harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0) shifted (0,0.5spread1),right);
+ rt x2=w-appr; y2=y1; pos2(rth,90);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(right,0) shifted (0,-0.5spread1),right);
+ lft x4=appr; y4=y3; pos4(rth,-90);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(harpoons_right_left,
+ 16u#+2appr#,v_center(2spread1#+rth#));
+ "Right-left harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(right,0) shifted (0,0.5spread1),left);
+ lft x2=appr; y2=y1; pos2(rth,-90);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(left,0) shifted (0,-0.5spread1),left);
+ rt x4=w-appr; y4=y3; pos4(rth,90);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(harpoons_up_up,
+ 7u#+spread1#+2appr#,asc_height#,asc_depth#);
+ "Upward-upward hapoons";
+ pickup tiny.nib;
+ arrow_head1(straight_path(up,0) shifted (-0.5spread1,0),left);
+ bot y2=-d; x2=x1; pos2(rth,0);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(up,0) shifted (0.5spread1,0),right);
+ bot y4=-d; x4=x3; pos4(rth,0);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(harpoons_down_down,
+ 7u#+spread1#+2appr#,asc_height#,asc_depth#);
+ "Downward-downward hapoons";
+ pickup tiny.nib;
+ arrow_head1(straight_path(down,0) shifted (-0.5spread1,0),right);
+ top y2=h; x2=x1; pos2(rth,180);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(down,0) shifted (0.5spread1,0),left);
+ top y4=h; x4=x3; pos4(rth,180);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(harpoons_up_down,
+ 7u#+spread1#+2appr#,asc_height#,asc_depth#);
+ "Upward-downward hapoons";
+ pickup tiny.nib;
+ arrow_head1(straight_path(up,0) shifted (-0.5spread1,0),left);
+ bot y2=-d; x2=x1; pos2(rth,0);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(down,0) shifted (0.5spread1,0),left);
+ top y4=h; x4=x3; pos4(rth,180);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(harpoons_down_up,
+ 7u#+spread1#+2appr#,asc_height#,asc_depth#);
+ "Downward-upward hapoons";
+ pickup tiny.nib;
+ arrow_head1(straight_path(down,0) shifted (-0.5spread1,0),right);
+ top y2=h; x2=x1; pos2(rth,180);
+ filldraw stroke z1e..z2e;
+ arrow_head3(straight_path(up,0) shifted (0.5spread1,0),right);
+ bot y4=-d; x4=x3; pos4(rth,0);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+%
+% T. Chaundy uniquely
+%
+
+beginchar(harpoon_left_bar,
+ 16u#+2appr#,v_center(2spread1#+rth#));
+ "Left-bar harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0) shifted (0,0.5spread1),right);
+ rt x2=w-appr; y2=y1; pos2(rth,90);
+ filldraw stroke z1e..z2e;
+ lft x3=appr; rt x4=w-appr;
+ y4=y3=math_axis-0.5spread1;
+ pos3(rth,90); pos4(rth,90);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(harpoon_right_bar,
+ 16u#+2appr#,v_center(2spread1#+rth#));
+ "Right-bar harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(right,0) shifted (0,0.5spread1),left);
+ lft x2=appr; y2=y1; pos2(rth,-90);
+ filldraw stroke z1e..z2e;
+ lft x3=appr; rt x4=w-appr;
+ y4=y3=math_axis-0.5spread1;
+ pos3(rth,90); pos4(rth,90);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(harpoon_bar_left,
+ 16u#+2appr#,v_center(2spread1#+rth#));
+ "Bar-left harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0) shifted (0,-0.5spread1),left);
+ rt x2=w-appr; y2=y1; pos2(rth,90);
+ filldraw stroke z1e..z2e;
+ lft x3=appr; rt x4=w-appr;
+ y4=y3=math_axis+0.5spread1;
+ pos3(rth,90); pos4(rth,90);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(harpoon_bar_right,
+ 16u#+2appr#,v_center(2spread1#+rth#));
+ "Bar-right harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(right,0) shifted (0,-0.5spread1),right);
+ lft x2=appr; y2=y1; pos2(rth,-90);
+ filldraw stroke z1e..z2e;
+ lft x3=appr; rt x4=w-appr;
+ y4=y3=math_axis+0.5spread1;
+ pos3(rth,90); pos4(rth,90);
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(harpoon_left_right,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Left-right harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(left,0),right);
+ arrow_head2(straight_path(right,0),right);
+ filldraw z1l--z2r--z2l--z1r--cycle;
+endchar;
+
+beginchar(harpoon_right_left,
+ 16u#+2appr#,v_center(spread1#+rth#));
+ "Right-left harpoon";
+ pickup tiny.nib;
+ arrow_head1(straight_path(right,0),left);
+ arrow_head2(straight_path(left,0),left);
+ filldraw z1l--z2r--z2l--z1r--cycle;
+endchar;
+
+% ARROW KIT
+
+beginchar(maps_to_char,0,v_center(spread1#+rth#));
+ "Maps to char";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+ lft x1l=lft x2l=appr; x3=x1r; x4=x3+ceiling 0.5u;
+ y3=y4=math_axis; 0.5[y1,y2]=y3;
+ top y1-bot y2=arrow_width;%2vround 0.60arrow_width;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(maps_from_char,0,v_center(spread1#+rth#));
+ "Maps from char";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,-90); pos4(rth,-90);
+ rt x1r=rt x2r=-appr; x3=x1l; x4=x3-ceiling 0.5u;
+ y3=y4=math_axis; 0.5[y1,y2]=y3;
+ top y1-bot y2=arrow_width; %2vround 0.60arrow_width;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(relbar_char,12u#+2appr#,v_center(spread1#+rth#));
+ "Relation bar char";
+ pickup tiny.nib; pos1(rth,90); pos2(rth,90);
+ y1=y2=math_axis; lft x1=appr; rt x2=w-appr;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+%
+% trop \'ecras\'es \`a mon go\^ut.
+%
+
+beginchar(hook_left,3u#+2appr#,v_center(spread1#+rth#));
+ "Left hook";
+ pickup tiny.nib; pos1(rth,90); pos2(rth,0); pos3(rth,-90);
+ y3=math_axis; y1-y3=vround min(1.4spread1,3u);
+ y2=0.5[y1,y3]; lft x1=lft x3=appr; rt x2r=w-appr;
+ filldraw stroke z1e right_to_down z2e down_to_left z3e;
+ penlabels(1,2,3);
+endchar;
+
+beginchar(hook_right,3u#+2appr#,v_center(spread1#+rth#));
+ "Right hook";
+ pickup tiny.nib; pos1(rth,-90); pos2(rth,0); pos3(rth,90);
+ y3=math_axis; y1-y3=vround min(1.4spread1,3u);
+ y2=0.5[y1,y3]; rt x1=rt x3=w-appr; lft x2l=appr;
+ filldraw stroke z1e left_to_down z2e down_to_right z3e;
+ penlabels(1,2,3);
+endchar;
+
+beginchar(diag_up,16u#+2appr#,asc_height#,asc_depth#);
+ "Diagonal up";
+ pickup rule.nib;
+ lft x1=appr; rt x2=w-appr; bot y1=-d; top y2=h;
+ draw z1..z2; labels(1,2);
+endchar;
+
+beginchar(diag_down,16u#+2appr#,asc_height#,asc_depth#);
+ "Diagonal down";
+ pickup rule.nib;
+ lft x1=appr; rt x2=w-appr; top y1=h; bot y2=-d;
+ draw z1..z2; labels(1,2);
+endchar;
+
+% DOUBLE ARROWS
+
+% for horizontal arrows...
+
+double_arrow_width := 2ceiling 0.70spread1+spread1+rth1;
+double_arrow_height := round 6.5u;
+double_arrow_tense := 0.65;
+double_arrow_flatness:= 0.25;
+
+beginchar(double_arrow_left,
+ 16u#+2appr#,v_center(2spread1#+rth#));
+ "Left double arrow";
+ pickup tiny.nib;
+ double_arrow_head1((appr,math_axis),left);
+ pos2r(rth,90); pos2l(rth,90);
+ rt x2r=rt x2l=w-appr; y2r=y1r; y2l=y1l;
+ filldraw stroke z1r.e..z2r.e;
+ filldraw stroke z1l.e..z2l.e;
+ penlabels(2r,2l);
+endchar;
+
+beginchar(double_arrow_right,
+ 16u#+2appr#,v_center(2spread1#+rth#));
+ "Right double arrow";
+ pickup tiny.nib;
+ double_arrow_head1((w-appr,math_axis),right);
+ pos2r(rth,-90); pos2l(rth,-90);
+ lft x2r=lft x2l=appr; y2r=y1r; y2l=y1l;
+ filldraw stroke z1r.e..z2r.e;
+ filldraw stroke z1l.e..z2l.e;
+ penlabels(2r,2l);
+endchar;
+
+beginchar(double_arrow_left_right,
+ 16u#+2appr#,v_center(2spread1#+rth#));
+ "Left-right double arrow";
+ pickup tiny.nib;
+ double_arrow_head1((appr-o,math_axis),left);
+ double_arrow_head2((w-appr+o,math_axis),right);
+ filldraw z1r.r--z1r.l--z2l.r--z2l.l--cycle;
+ filldraw z1l.r--z1l.l--z2r.r--z2r.l--cycle;
+endchar;
+
+beginchar(double_arrow_left_not,
+ 16u#+2appr#,v_center(2spread1#+rth#));
+ "Left double arrow";
+ pickup tiny.nib;
+ double_arrow_head1((appr,math_axis),left);
+ pos2r(rth,90); pos2l(rth,90);
+ rt x2r=rt x2l=w-appr; y2r=y1r; y2l=y1l;
+ filldraw stroke z1r.e..z2r.e;
+ filldraw stroke z1l.e..z2l.e;
+ v_adjust(3r,4l,y1,double_arrow_width);% to be checked
+ lft x4l-appr=hround 7u; w-appr-rt x3r=hround 5u;
+ adjust_slanted_bar(4l,3r,4r,3l)(rth-tiny,-1);
+ filldraw stroke z3e..z4e;
+ penlabels(2r,2l,3,4);
+endchar;
+
+beginchar(double_arrow_right_not,
+ 16u#+2appr#,v_center(2spread1#+rth#));
+ "Right double arrow";
+ pickup tiny.nib;
+ double_arrow_head1((w-appr,math_axis),right);
+ pos2r(rth,-90); pos2l(rth,-90);
+ lft x2r=lft x2l=appr; y2r=y1r; y2l=y1l;
+ filldraw stroke z1r.e..z2r.e;
+ filldraw stroke z1l.e..z2l.e;
+ v_adjust(3r,4l,y1,double_arrow_width);% to be checked
+ lft x4l=appr+hround 5u; w-rt x3r=appr+hround 7u;
+ adjust_slanted_bar(4l,3r,4r,3l)(rth-tiny,-1);
+ filldraw stroke z3e..z4e;
+ penlabels(2r,2l,3,4);
+endchar;
+
+beginchar(double_arrow_left_right_not,
+ 16u#+2appr#,v_center(2spread1#+rth#));
+ "Left-right double arrow";
+ pickup tiny.nib;
+ double_arrow_head1((appr-o,math_axis),left);
+ double_arrow_head2((w-appr+o,math_axis),right);
+ filldraw z1r.r--z1r.l--z2l.r--z2l.l--cycle;
+ filldraw z1l.r--z1l.l--z2r.r--z2r.l--cycle;
+ v_adjust(3r,4l,y1,double_arrow_width);% to be checked
+ lft x4l=w-rt x3r=appr+hround 6.5u;
+ adjust_slanted_bar(4l,3r,4r,3l)(rth-tiny,-1);
+ filldraw stroke z3e..z4e;
+ penlabels(3,4);
+endchar;
+
+% for horizontal arrows...
+
+double_arrow_width := 2ceiling 0.70spread1+spread1+rth1;
+double_arrow_height := round 6.5u;
+double_arrow_tense := 0.65;
+double_arrow_flatness:= 0.25;
+
+beginchar(double_arrow_up,
+ 9u#+2appr#,asc_height#,asc_depth#);
+ "Up double arrow";
+ pickup tiny.nib;
+ double_arrow_head1((hround 0.5(w-rth)+0.5rth,
+ h+o),up);
+ pos2r(rth,0); pos2l(rth,0);
+ bot y2r=bot y2l=-d; x2r=x1r; x2l=x1l;
+ filldraw stroke z1r.e..z2r.e;
+ filldraw stroke z1l.e..z2l.e;
+ penlabels(2r,2l);
+endchar;
+
+beginchar(double_arrow_down,
+ 9u#+2appr#,asc_height#,asc_depth#);
+ "Down double arrow";
+ pickup tiny.nib;
+ double_arrow_head1((hround 0.5(w-rth)+0.5rth,
+ -d-o),down);
+ pos2r(rth,180); pos2l(rth,180);
+ top y2r=top y2l=h; x2r=x1r; x2l=x1l;
+ filldraw stroke z1r.e..z2r.e;
+ filldraw stroke z1l.e..z2l.e;
+ penlabels(2r,2l);
+endchar;
+
+beginchar(double_arrow_up_down,
+ 9u#+2appr#,body_height#,paren_depth#);
+ "Up-down double arrow";
+ pickup tiny.nib;
+ double_arrow_head1((hround 0.5(w-rth)+0.5rth,
+ h+o),up);
+ double_arrow_head2((hround 0.5(w-rth)+0.5rth,
+ -d-o),down);
+ filldraw z1r.r--z1r.l--z2l.r--z2l.l--cycle;
+ filldraw z1l.r--z1l.l--z2r.r--z2r.l--cycle;
+endchar;
+
+beginchar(Relbar_char,12u#+2appr#,v_center(2spread1#+rth#));
+ "Double relation bar char";
+ 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
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(Maps_to_char,0,v_center(2spread1#+rth#));
+ "Double maps to char";
+ 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; x3=x5r=x1r; x4=x6=x3+ceiling 0.5u;
+ y3=y4=math_axis+0.5spread1; y5=y6=math_axis-0.5spread1;
+ 0.5[y1,y2]=math_axis;
+ top y1-bot y2=arrow_width % 2vround 0.60arrow_width
+ +spread1;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e; penlabels(1,2,3,4,5,6);
+endchar;
+
+beginchar(Maps_from_char,0,v_center(2spread1#+rth#));
+ "Double maps from char";
+ 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=-appr; x3=x5r=x1l; x4=x6=x3-ceiling 0.5u;
+ y3=y4=math_axis+0.5spread1; y5=y6=math_axis-0.5spread1;
+ 0.5[y1,y2]=math_axis;
+ top y1-bot y2=arrow_width % 2vround 0.60arrow_width
+ +spread1;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e; penlabels(1,2,3,4,5,6);
+endchar;
+
+% EXTENSIBLE ARROWS (revoir les parametres)
+
+use_rule1;
+
+arrow_width := 2ceiling 0.70spread1+rth;
+arrow_height# := 4u#;
+arrow_height := round 4u;
+arrow_breadth := rth;
+arrow_stress := 0.65;
+arrow_tense1 := 0.75;
+arrow_tense2 := 0.875;
+
+beginchar(arrow_top,10u#+2appr#,0,dh#);
+ pickup tiny.nib;
+ a:=hround rth1+0.2dw; save rth; rth:=a;
+ lft x2l=hround 0.5(w-rth);
+ y2=-d-eps; pos2(rth,0); top y3=h; x3=x2;
+ arrow_head1(z2..z3,both);
+ filldraw stroke z1e--z2e; penlabels(1,2);
+endchar;
+
+beginchar(arrow_bot,10u#+2appr#,0,dh#);
+ pickup tiny.nib;
+ a:=hround rth1+0.2dw; save rth; rth:=a;
+ lft x2r=hround 0.5(w-rth);
+ y2=h+eps; pos2(rth,180); bot y3=-d; x3=x2;
+ arrow_head1(z2..z3,both);
+ filldraw stroke z1e--z2e; penlabels(1,2);
+endchar;
+
+beginchar(arrow_mod,10u#+2appr#,0,dh#);
+ pickup tiny.nib;
+ a:=hround rth1+0.2dw; save rth; rth:=a;
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ y1=h+eps; y2=-d-eps; pos1(rth,0); pos2(rth,0);
+ filldraw stroke z1e--z2e; penlabels(1,2);
+endchar;
+
+% for horizontal arrows...
+
+double_arrow_width := 2ceiling 0.70spread1+spread1+rth;
+double_arrow_height := round 6.5u;
+double_arrow_tense := 0.65;
+double_arrow_flatness:= 0.25;
+
+beginchar(double_arrow_top,
+ 12u#+2appr#,0,dh#);
+ "double arrow top";
+ pickup tiny.nib;
+ double_arrow_head1((hround 0.5(w-rth)+0.5rth,
+ h+o),up);
+ pos2r(rth,0); pos2l(rth,0);
+ y2r=y2l=-d-1-eps; x2r=x1r; x2l=x1l;
+ filldraw stroke z1r.e..z2r.e;
+ filldraw stroke z1l.e..z2l.e;
+ penlabels(2r,2l);
+endchar;
+
+beginchar(double_arrow_bot,
+ 12u#+2appr#,0,dh#);
+ "double arrow bot";
+ pickup tiny.nib;
+ double_arrow_head1((hround 0.5(w-rth)+0.5rth,
+ -d-o),down);
+ pos2r(rth,180); pos2l(rth,180);
+ y2r=y2l=h+1+eps; x2r=x1r; x2l=x1l;
+ filldraw stroke z1r.e..z2r.e;
+ filldraw stroke z1l.e..z2l.e;
+ penlabels(2r,2l);
+endchar;
+
+beginchar(double_arrow_mod,
+ 12u#+2appr#,0,dh#);
+ "double arrow extension's module";
+ pickup tiny.nib;
+ x3-x1=x4-x2=spread1;
+ 0.5[x1,x3]=0.5[x2,x4]=hround 0.5(w-rth)+0.5rth;
+ pos1(rth,0); pos2(rth,0); pos3(rth,0); pos4(rth,0);
+ y1=y3=h+1+eps; y2=y4=-d-1-eps;
+ filldraw stroke z1e..z2e;
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+endinput;
+
+beginchar(arrow_up_not,
+ 7u#+2appr#,asc_height#,asc_depth#);
+ "Negated upward arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(up,0),both);% corrected 2002/07/29
+ bot y2=-d; x2=x1; pos2(rth,0);
+ filldraw stroke z1e..z2e;
+%
+ x3r=x3l=x1c.l; x4r=x4l=x1c.r; 0.5[y3l,y4r]=0.5[-d,h];
+ y1c.r-y4r=vround 1/3(y1c.r-0.5[-d,h]);
+ a:=rth-tiny; b:=abs(z4r-z3l);
+ y3r-y3l=y4r-y4l=a/(((x4r-x3l)/b)*((b+-+a)/b)+((y4r-y3l)/b)*(a/b));
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrow_down_not,
+ 7u#+2appr#,asc_height#,asc_depth#);
+ "Negated downward arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(down,o),both);% corrected 2002/07/29
+ top y2=h; x2=x1; pos2(rth,180);
+ filldraw stroke z1e..z2e;
+%
+ x3r=x3l=x1c.r; x4r=x4l=x1c.l; 0.5[y3l,y4r]=0.5[-d,h];
+ y3l-y1c.r=vround 1/3(0.5[-d,h]-y1c.r);
+ a:=rth-tiny; b:=abs(z4r-z3l);
+ y3r-y3l=y4r-y4l=a/(((x4r-x3l)/b)*((b+-+a)/b)+((y4r-y3l)/b)*(a/b));
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(arrow_up_down_not,
+ 7u#+2appr#,asc_height#,asc_depth#);
+ "Negated Upward-Downward arrow";
+ pickup tiny.nib;
+ arrow_head1(straight_path(up,o),both);% corrected 2002/07/29
+ arrow_head2(straight_path(down,o),both);% corrected 2002/07/29
+ filldraw z1l--z2r--z2l--z1r--cycle;;
+%
+ x3r=x3l=x1c.l; x4r=x4l=x1c.r; 0.5[y3l,y4r]=0.5[-d,h];
+ y1c.r-y4r=vround 1/3(y1c.r-0.5[-d,h]);
+ a:=rth-tiny; b:=abs(z4r-z3l);
+ y3r-y3l=y4r-y4l=a/(((x4r-x3l)/b)*((b+-+a)/b)+((y4r-y3l)/b)*(a/b));
+ filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(double_arrow_up_not,
+ 9u#+2appr#,asc_height#,asc_depth#);
+ "Negated Up double arrow";
+ pickup tiny.nib;
+ double_arrow_head1((hround 0.5(w-rth)+0.5rth,
+ h+o),up);
+ pos2r(rth,0); pos2l(rth,0);
+ bot y2r=bot y2l=-d; x2r=x1r; x2l=x1l;
+ filldraw stroke z1r.e..z2r.e;
+ filldraw stroke z1l.e..z2l.e;
+ penlabels(2r,2l);
+%
+ rt x4r=rt x4l=x1a.l; x3l=x3r=2x1-x4r;
+ 0.5[y3l,y4r]=0.5[-d,h];
+ y1a.l-top y4r=vround 1/5(y1a.l-0.5[-d,h]);
+ a:=rth-tiny; b:=abs(z4r-z3l);
+ y3r-y3l=y4r-y4l=a/(((x4r-x3l)/b)*((b+-+a)/b)+((y4r-y3l)/b)*(a/b));
+ filldraw stroke z3e..z4e;
+ penlabels(3,4);
+endchar;
+
+beginchar(double_arrow_down_not,
+ 9u#+2appr#,asc_height#,asc_depth#);
+ "Negated down double arrow";
+ pickup tiny.nib;
+ double_arrow_head1((hround 0.5(w-rth)+0.5rth,
+ -d-o),down);
+ pos2r(rth,180); pos2l(rth,180);
+ top y2r=top y2l=h; x2r=x1r; x2l=x1l;
+ filldraw stroke z1r.e..z2r.e;
+ filldraw stroke z1l.e..z2l.e;
+ penlabels(2r,2l);
+%
+ lft x3r=lft x3l=x1a.l; x4l=x4r=2x1-x3r;
+ 0.5[y3l,y4r]=0.5[-d,h];
+ bot y3l-y1a.l=vround 1/5(0.5[-d,h]-y1a.l);
+ a:=rth-tiny; b:=abs(z4r-z3l);
+ y3r-y3l=y4r-y4l=a/(((x4r-x3l)/b)*((b+-+a)/b)+((y4r-y3l)/b)*(a/b));
+ filldraw stroke z3e..z4e;
+ penlabels(3,4);
+endchar;
+
+beginchar(double_arrow_up_down_not,
+ 9u#+2appr#,body_height#,paren_depth#);
+ "Negated up-down double arrow";
+ pickup tiny.nib;
+ double_arrow_head1((hround 0.5(w-rth)+0.5rth,
+ h+o),up);
+ double_arrow_head2((hround 0.5(w-rth)+0.5rth,
+ -d-o),down);
+ filldraw z1r.r--z1r.l--z2l.r--z2l.l--cycle;
+ filldraw z1l.r--z1l.l--z2r.r--z2r.l--cycle;
+%
+ rt x4r=rt x4l=x1a.l; x3l=x3r=2x1-x4r;
+ 0.5[y3l,y4r]=0.5[-d,h];
+ y1a.l-top y4r=vround 1/5(y1a.l-0.5[-d,h]);
+ a:=rth-tiny; b:=abs(z4r-z3l);
+ y3r-y3l=y4r-y4l=a/(((x4r-x3l)/b)*((b+-+a)/b)+((y4r-y3l)/b)*(a/b));
+ filldraw stroke z3e..z4e;
+ penlabels(3,4);
+endchar;
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathastr.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathastr.mf
new file mode 100644
index 00000000000..f037c718c95
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathastr.mf
@@ -0,0 +1,946 @@
+% mathematical symbols by Anthony Phan.
+% file: mathastr.mf (mathematical astronomical symbols)
+% last modification: May 16, 2005.
+% Only known charcodes will be generated.
+
+% stem_corr had been added (darkness).
+% also vair_corr and slab.
+
+%astro := 1;
+
+% from cmbase.mf
+
+% super_arc.r(suffix $, $$) and super_arc.l(suffix $, $$)
+% have the same effect as a right_to_down
+
+vardef pulled_super_arc.r(suffix $, $$)(expr superpull) =
+ pair center, corner;
+ if y$ = y$r: center = (x$$r, y$r); corner = (x$r, y$$r);
+ else: center = (x$r, y$$r); corner = (x$$r, y$r); fi
+ z$r{corner-z$r}...superness[center, corner]{z$$r-z$r}
+ ...{z$$r-corner}z$$r
+enddef;
+
+vardef pulled_super_arc.l(suffix $, $$)(expr superpull) =
+ pair center, corner, outer_point;
+ if y$ = y$r: center = (x$$l, y$l); corner = (x$l, y$$l);
+ outer_point = superness[(x$$r, y$r), (x$r, y$$r)];
+ else: center = (x$l, y$$l); corner = (x$$l, y$l);
+ outer_point = superness[(x$r, y$$r), (x$$r, y$r)]; fi
+ z$l{corner-z$l}
+ ...superpull[superness[center, corner], outer_point]{z$$l-z$l}
+ ...{z$$l-corner}z$$l
+enddef;
+
+vardef pulled_arc@#(suffix $, $$) =
+ pulled_super_arc@#($, $$)(superpull)
+enddef;
+
+% let's go
+
+use_rule4;
+
+boolean serifs;
+if astro > 0.75: serifs := true; else: serifs := false; fi
+
+astro.hair := hround astro[rth, hair];
+astro.vair := vround astro[rth, vair];
+astro.stem := hround astro[rth, stem];
+astro.light_stem := astro[rth, 0.9[vair, 0.85stem]];
+astro.curve := hround astro[rth, curve];
+astro.vair' := vround astro[rth, vair'];
+astro.cap_hair := vround astro[rth, cap_hair];
+astro.cap_stem := hround astro[rth, cap_stem];
+astro.cap_curve := hround astro[rth, cap_curve];
+astro.rth := astro[rth, rth];
+astro.beak := astro[0, 0.38cap_height-astro.cap_hair];
+astro.slab := vround astro[rth, slab];
+
+superpull := astro*1/6;
+arrow_breadth := astro[0, vair];
+arrow_stress := astro[1, 0.7];
+arrow_tense1 := astro[1, 0.75];
+arrow_tense2 := astro[1, 0.875];
+
+% absolutely okay
+beginchar(astro_sun, 13u#+2appr#, cap_height#, 0);
+ "Sun";
+ italcorr 0; % italcorr 0.6cap_height#*slant-.5u#;
+ autorounded;
+ pickup null.nib;
+% circle
+ penpos1(astro.vair', 90);
+ penpos2(hround astro[rth, cap_curve-stem_corr], 180);
+ penpos3(vround astro[rth, vair+1.5vair_corr], -90);
+ penpos4(hround astro[rth, cap_curve-stem_corr], 0);
+ y1r = h+o; y3r = -o; y2 = y4 = 0.5h;
+ x2r = appr; x4r = w-appr; x1 = x3 = 0.5[x2, x4];
+ y2l := y4l := astro[y2, 0.52h];
+ penstroke pulled_arc.e(1, 2) & pulled_arc.e(2, 3)
+ & pulled_arc.e(3, 4) & pulled_arc.e(4, 1) & cycle;
+% dot
+ adjust_dot5((x1, y2), astro[2.7rth, 1.3dtsz], true, true);
+ dot(5, 5');
+ penlabels(1, 2, 3, 4);
+endchar;
+
+% okay
+beginchar(astro_left_moon, 10u#+2appr#, cap_height#, 0);
+ "Left moon (Moon)";
+ italcorr 0; % italcorr cap_height#*slant-.5u#;
+ save tmp_path, a, t; path tmp_path[];
+%
+% Two solutions may be considered for
+% this construction. The first (and the
+% one which is done here) is to put the
+% two centers of circles at a predeterminated
+% distance $a$ from each others (namely $a = 4u$)
+% and do the construction hoping that edges
+% will fit the right bound.
+% The second one consists in calculating that
+% distance $a$ to make sure that edges will lie
+% on the right bound (the calculations are shown
+% commentated). The problem with this method
+% is that there is no control of the clear part's
+% width of the drawing. Moreover, when the inner
+% radius become too small there is no more solution
+% to that problem (see below).
+%
+%% The actual width of the drawing must be 10u.
+%% The problem is to calculate the distance
+%% between the two centers to make it work.
+%% Alas when the two radius are too far from
+%% each over, this problem has no solution.
+%%
+%% 6.5u = radius of great circle.
+%% 3.5u = 10u-6.5u = (inner width)-radius.
+%% 6.5u-rth = radius of small circle.
+%%
+% b = (3.5u)**2+(rth**2)-2*6.5u*rth;
+% if b> = 0: a = hround(3.5u+sqrt b);
+% else: a = hround(3.5u); fi
+ a = hround(4u-rth+astro.rth);
+ penpos2(vround astro.rth, 90);
+ penpos3(hround astro.rth, 180);
+ penpos4(vround astro.rth, -90);
+ penpos1(hround astro.rth, 0);
+ x3r = appr; x1r-x3r = 13u; y2r = h+o; y4r = -o;
+ y1 = y3 = 0.5[y2, y4]; x2 = x4 = 0.5[x1, x3];
+ tmp_path1 = z1r up_to_left z2r left_to_down z3r
+ down_to_right z4r right_to_up z1r..cycle;
+ tmp_path2 = z1l up_to_left z2l left_to_down z3l
+ down_to_right z4l right_to_up z1l..cycle;
+ tmp_path3 = tmp_path1 shifted (a, 0);
+ tmp_path4 = tmp_path2 shifted (a, 0);
+%
+% The presence of epsilons makes almost certain
+% that paths won't have double points causing
+% trouble with filling commands.
+%
+ (t1-eps, t4-eps) = (subpath (0, 4) of tmp_path1)
+ intersectiontimes (subpath (0, 4) of tmp_path4);
+ (t2-4+eps, t3-4+eps) = (subpath (4, 8) of tmp_path1)
+ intersectiontimes (subpath (4, 8) of tmp_path4);
+ (t5-eps, t8-eps) = (subpath (0, 4) of tmp_path2)
+ intersectiontimes (subpath (0, 4) of tmp_path3);
+ (t6-4+eps, t7-4+eps) = (subpath (4, 8) of tmp_path2)
+ intersectiontimes (subpath (4, 8) of tmp_path3);
+ fill subpath (t1, t2) of tmp_path1
+ ..reverse subpath(t4, t3) of tmp_path4..cycle;
+ unfill subpath (t5, t6) of tmp_path2
+ ..reverse subpath(t8, t7) of tmp_path3..cycle;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(astro_right_moon, 10u#+2appr#, cap_height#, 0);
+ "Right moon";
+ italcorr 0; % italcorr cap_height#*slant-.5u#;
+ save tmp_path, a, t; path tmp_path[];
+ a = -hround(4u-rth+astro.rth);
+ penpos2(vround astro.rth, 90);
+ penpos3(hround astro.rth, 0);
+ penpos4(vround astro.rth, -90);
+ penpos1(hround astro.rth, 180);
+ x3 = w-appr-0.5rth; x1r-x3r = -13u; y2r = h+o; y4r = -o;
+ y1 = y3 = 0.5[y2, y4]; x2 = x4 = 0.5[x1, x3];
+ tmp_path1 = z1r up_to_left z2r left_to_down z3r
+ down_to_right z4r right_to_up z1r..cycle;
+ tmp_path2 = z1l up_to_left z2l left_to_down z3l
+ down_to_right z4l right_to_up z1l..cycle;
+ tmp_path3 = tmp_path1 shifted (a, 0);
+ tmp_path4 = tmp_path2 shifted (a, 0);
+ (t1-eps, t4-eps) = (subpath (0, 4) of tmp_path1)
+ intersectiontimes (subpath (0, 4) of tmp_path4);
+ (t2-4+eps, t3-4+eps) = (subpath (4, 8) of tmp_path1)
+ intersectiontimes (subpath (4, 8) of tmp_path4);
+ (t5-eps, t8-eps) = (subpath (0, 4) of tmp_path2)
+ intersectiontimes (subpath (0, 4) of tmp_path3);
+ (t6-4+eps, t7-4+eps) = (subpath (4, 8) of tmp_path2)
+ intersectiontimes (subpath (4, 8) of tmp_path3);
+ fill subpath (t1, t2) of tmp_path1
+ ..reverse subpath(t4, t3) of tmp_path4..cycle;
+ unfill subpath (t5, t6) of tmp_path2
+ ..reverse subpath(t8, t7) of tmp_path3..cycle;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(astro_full_moon, 13u#+2appr#, cap_height#, 0);
+ "Full moon";
+ italcorr 0; % italcorr 0.6cap_height#*slant-.5u#;
+ autorounded;
+% circle
+ penpos1(vround astro.rth, 90);
+ penpos2(hround astro.rth, 180);
+ penpos3(vround astro.rth, -90);
+ penpos4(hround astro.rth, 0);
+ y1r = h+o; y3r = -o; y2 = y4 = 0.5h;
+ x2r = appr; x4r = w-appr; x1 = x3 = 0.5[x2, x4];
+ y2l := y4l := astro[y2, y2];
+ penstroke z1e left_to_down z2e down_to_right
+ z3e right_to_up z4e up_to_left z1e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(astro_new_moon, 13u#+2appr#, cap_height#, 0);
+ "New moon";
+ italcorr 0; % italcorr cap_height#*slant-.5u#;
+ autorounded;
+ x4 = w-appr; x2 = appr; y1 = h+o; y3 = -o;
+ y2 = y4 = 0.5h; x1 = x3 = 0.5[x2, x4];
+ fill z1 left_to_down z2 down_to_right z3
+ right_to_up z4 up_to_left z1..cycle;
+ labels(1, 2, 3, 4);
+endchar;
+
+% okay
+beginchar(astro_mercury, 9u#+2appr#, cap_height#, 0);
+ "Mercury";
+ italcorr 0; % italcorr cap_height#*slant-.5u#;
+ save a; a = astro.light_stem;
+ ensure_centering_of(a);
+% circle
+ penpos1(astro.vair, 90);
+ penpos2(astro.curve, 180);
+ penpos3(astro.vair, -90);
+ penpos4(astro.curve, 0);
+ y1r = cap_height+oo;
+ y3r = vround astro[0.30cap_height, cap_height-x_height]-oo;
+ y2 = y4 = 0.5[y1, y3];
+ x2r = appr; x4r = w-appr; x1 = x3 = 0.5[x2, x4];
+ y2l := y4l := astro[y2, 0.52[y3, y1]];
+ penstroke pulled_arc.e(1, 2) & pulled_arc.e(2, 3)
+ & pulled_arc.e(3, 4) & pulled_arc.e(4, 1) & cycle;
+% queue
+ tmp_path := pulled_arc.r(1, 2) & pulled_arc.r(2, 3)
+ & pulled_arc.r(3, 4) & pulled_arc.r(4, 1) & cycle;
+ pickup crisp.nib;
+ bot y5 = -o; bot y6l = bot y7l = vround(0.5[-d, y3r]-0.5a);% a little higher
+ pos5(hround a, 0); pos6(vround a, 90); pos7(vround a, 90);
+ x5 = x3; x5l-x6 = x7-x5r = hround 0.5(x1-x2l);
+ save t;
+ forsuffixes $ = , r, l:
+ t$ = xpart(tmp_path intersectiontimes (z5$..(x5$, y2)));
+ endfor
+ filldraw subpath (t.r, t.l) of tmp_path--z5l--z5r--cycle;
+ filldraw stroke z6e..z7e;
+% horns
+ tmp_path := reverse tmp_path;
+ save p; path p.r, p.l;
+ a := astro[rth, stem];
+ pos8(a, 90); pos9(hround 0.5[a, astro.vair], 180);
+ pos10(astro.vair, -90); pos11(hround 0.5[a, astro.vair], 0);
+ lft x9r = appr; x8 = x10 = x1; rt x11r = w-appr;
+ y9 = y11 = 0.5[y8, y10] = y1;
+ top y8 = vround max(1.22cap_height, y1r+a);
+ p.r = z8r left_to_down z9r down_to_right
+ z10r right_to_up z11r up_to_left z8r;
+ p.l = z8l right_to_down z11l down_to_left
+ z10l left_to_up z9l up_to_right z8l;
+ t1 = xpart(p.r intersectiontimes (z8..(x9r, y8)));
+ (t2, t3-4) = p.r intersectiontimes subpath (4, 8) of tmp_path;
+ (t5, t4-4) = p.l intersectiontimes subpath (4, 8) of tmp_path;
+ t6-6 = xpart(subpath (6, 8) of p.l intersectiontimes
+ ((point t1 of p.r)..(x1, y2)));
+ t7 = xpart(p.r intersectiontimes (z8..(x11r, y8)));
+ (t8, t9) = p.r intersectiontimes subpath (0, 4) of tmp_path;
+ (t11, t10) = p.l intersectiontimes subpath (0, 4) of tmp_path;
+ t12 = xpart(subpath (0, 2) of p.l intersectiontimes
+ ((point t7 of p.r)..(x1, y2)));
+ interim turningcheck := 0;% I hate turning numbers
+ filldraw subpath (t1, t2) of p.r
+ --subpath (t3, t4) of tmp_path
+ --subpath (t5, t6) of p.l -- cycle;
+ filldraw subpath (t12, t11) of p.l
+ --subpath (t10, t9) of tmp_path
+ --subpath (t8, t7) of p.r -- cycle;
+ penlabels(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
+endchar;
+
+% okay
+beginchar(astro_venus, 9u#+2appr#, cap_height#, 0);
+ "Venus";
+ italcorr 0; % italcorr cap_height#*slant-.5u#;
+ save a, t; a = astro.light_stem;
+ ensure_centering_of(a);
+% circle
+ penpos1(astro.vair, 90);
+ penpos2(astro.curve, 180);
+ penpos3(astro.vair', -90);
+ penpos4(astro.curve, 0);
+ y1r = cap_height+oo;
+ y3r = vround astro[0.30cap_height, cap_height-x_height]-oo;
+ y2 = y4 = 0.5[y1, y3];
+ x2r = appr; x4r = w-appr; x1 = x3 = 0.5[x2, x4];
+ y2l := y4l := astro[y2, 0.52[y3, y1]];
+ penstroke pulled_arc.e(1, 2) & pulled_arc.e(2, 3)
+ & pulled_arc.e(3, 4) & pulled_arc.e(4, 1)& cycle;
+% queue
+ tmp_path := pulled_arc.r(1, 2) & pulled_arc.r(2, 3)
+ & pulled_arc.r(3, 4) & pulled_arc.r(4, 1) & cycle;
+ pickup crisp.nib;
+ bot y5 = -o; bot y6l = bot y7l = vround(0.5[-d, y3r]-0.5a);% a little higher
+ pos5(hround a, 0); pos6(vround a, 90); pos7(vround a, 90);
+ x5 = x3; x5l-x6 = x7-x5r = hround 0.5(x1-x2l);
+ forsuffixes $ = , r, l:
+ t$ = xpart(tmp_path intersectiontimes (z5$..(x5$, y2)));
+ endfor
+ filldraw subpath (t.r, t.l) of tmp_path--z5l--z5r--cycle;
+ filldraw stroke z6e..z7e;
+ penlabels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+% absolutely okay
+beginchar(astro_earth, 13u#+2appr#, cap_height#, 0);
+ "Earth";
+ italcorr 0; % italcorr 0.6cap_height#*slant-.5u#;
+ save a; a = astro.light_stem;
+ ensure_centering_of(a);
+ pickup null.nib;
+ autorounded;
+% circle
+ penpos1(astro.vair', 90);
+ penpos2(hround astro[rth, cap_curve-2stem_corr], 180);
+ penpos3(vround astro[rth, vair+1.5vair_corr], -90);
+ penpos4(hround astro[rth, cap_curve-2stem_corr], 0);
+ y1r = h+o; y3r = -o; y2 = y4 = 0.5h;
+ x2r = appr; x4r = w-appr; x1 = x3 = 0.5[x2, x4];
+ y2l := y4l := astro[y2, 0.52h];
+ penstroke pulled_arc.e(1, 2) & pulled_arc.e(2, 3)
+ & pulled_arc.e(3, 4) & pulled_arc.e(4, 1) & cycle;
+% cross
+ tmp_path := z1 left_to_down z2 down_to_right
+ z3 right_to_up z4 up_to_right z1;
+ penpos5(hround a, 0); penpos6(vround a, 90);
+ x5 = x6 = 0.5w;
+ y5 = y6 = vround(y2-0.5vround a)+0.5vround a;
+ forsuffixes $ = , r, l:
+ z7$ = tmp_path intersectionpoint (z5$..(x5$, y1r));
+ z8$ = tmp_path intersectionpoint (z5$..(x5$, y3r));
+ z9$ = tmp_path intersectionpoint (z6$..(x2r, y6$));
+ z10$ = tmp_path intersectionpoint (z6$..(x4r, y6$));
+ endfor
+ fill z7r..z7..z7l--z8l..z8..z8r--cycle;
+ fill z9r..z9..z9l--z10l..z10..z10r--cycle;
+ penlabels(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+endchar;
+
+% almost okay (see arrows dimensions)
+beginchar(astro_mars, 9u#+2appr#, body_height#, 0);
+ "Mars";
+ italcorr 0; % italcorr body_height#*slant-.5u#;
+ save a; a = astro.light_stem;
+ % ensure_centering_of(a);% just for homogeneity
+ % circle
+ penpos1(astro.vair, 90);
+ penpos2(astro.curve, 180);
+ penpos3(astro.vair', -90);
+ penpos4(astro.curve, 0);
+ y1r = vround astro[0.70cap_height, x_height]+oo;
+ y3r = -oo;
+ y2 = y4 = 0.5[y1, y3];
+ x2r = appr; x4r = w-appr; x1 = x3 = 0.5[x2, x4];
+ y2l := y4l := astro[y2, 0.52[y3, y1]];
+ penstroke pulled_arc.e(1, 2) & pulled_arc.e(2, 3)
+ & pulled_arc.e(3, 4) & pulled_arc.e(4, 1) & cycle;
+ % arrow
+ tmp_path := pulled_arc.r(1, 2) & pulled_arc.r(2, 3)
+ & pulled_arc.r(3, 4) & pulled_arc.r(4, 1) & cycle;
+ z6 = (x1, y2); top y7 = body_height+o; rt x7 = w-appr;
+ arrow_height := vround astro[0.2cap_height, 0.3cap_height];
+ arrow_width := max(4.9rth, rth+3u);
+ save rth; rth = a;
+ arrow_head5(z6..z7, both);
+ z6r-z6 = z5r-z5; z6-z6l = z5-z5l;
+ save t;
+ forsuffixes $ = r, l:
+ t$ = xpart(tmp_path intersectiontimes (z6$..z5$));
+ endfor
+ filldraw if t.l>t.r: subpath (t.r, t.l) of tmp_path
+ else: subpath (t.r, 8) of tmp_path & subpath (0, t.l) of tmp_path fi
+ --z5l--z5r--cycle;
+ penlabels(1, 2, 3, 4, 6, 7);
+endchar;
+
+% humm
+beginchar(astro_jupiter, 10u#+2appr#, asc_height#, desc_depth#);
+ "Jupiter";
+ italcorr 0; % italcorr body_height#*slant-.5u#;
+ pickup crisp.nib;
+ %
+ top y1r = h; bot y2l = -d;
+ rt x1r = w-appr-.5u;
+ lft x2l = appr+3u;
+ adjust_slanted_bar(1r, 2l, 1l, 2r)(astro[rth, cap_stem]-crisp, -1);
+ z1r-z1 = z1-z1l; z2r-z2 = z2-z2l;
+ filldraw stroke z1e..z2e;
+ %
+ top y3r-bot y3l = top y4r-bot y4l = astro.cap_hair;
+ z3r-z3l = whatever*(z1-z2);
+ bot y3l = bot y4l = bot y5l = vround 0.0h;
+ lft x5l = appr-0.5u;
+ adjust_slanted_bar(1l, 5l, 0, 5)(0.5(astro.cap_hair-crisp), -1);
+ z5r-z5 = z5-z5l;
+ top y8 = h-0.5rth; lft x8 = appr;
+ z0' = 0.72[z5, z1l]; z6 = 0.25[z5, z1l];
+ pos6(astro.cap_hair, angle(z1l-z5)-90);
+ pos8(astro.cap_curve, angle(z8-z0')-90);
+ x4l = x5; z4r-z4l = whatever*(z6-z5); z3 = 0.5[z3l, z3r];
+ filldraw stroke z5e---z6e{z0'-z6}...{z8-z0'}z8e;
+ %
+ if serifs:
+ save beak_jut, bracket, cap_jut;
+ cap_jut = hround astro[0, 1.8u];
+ bracket = 0.5cap_jut;
+ serif(1, 2, bracket, cap_jut, astro.slab, true, dish,
+ cap_jut, astro.slab, true, dish);
+ serif(2, 1, bracket, cap_jut, astro.slab, true, dish,
+ cap_jut, astro.slab, true, dish);
+ z3l = whatever[z1r, z2r];
+ beak_jut = (astro.beak+astro.slab)*(x1-x2)/(y1-y2);
+ arm3(astro.beak, beak_jut, astro.slab, beak_darkness, up, w-appr+0.75u);
+ else: x3l = 0.8[x2, x1];
+ fi
+ filldraw stroke z3e..z4e;
+ labels(0, 0'); penlabels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+% humm
+beginchar(astro_saturn, 9.5u#+2appr#, body_height#, 0);
+ "Saturn";
+ italcorr 0; % italcorr body_height#*slant-.5u#;
+ % curve
+ pickup crisp.nib;
+ pos1(astro.cap_hair, 180); pos2(astro.cap_hair, 90);
+ pos3(hround 0.43[astro.cap_hair, astro.cap_stem], 0);
+ pos5(hround 0.44[astro.cap_hair, astro.cap_stem], 0);
+ pos6(astro.cap_hair, 90);
+ pos7(hround 0.44[astro.cap_hair, astro.cap_stem], 180);
+ pos10(astro.cap_stem, 0);
+ lft x10l = appr+hround 1.5u;
+ x10r = x1l;
+ rt x3r = rt x7l = w-appr;
+ x2 = (astro[0.5,0.57])[x1l, x3l];
+ rt x5r+eps = hround astro[x2, x10r+0.5[astro.cap_hair, astro.cap_stem]];
+ x6 = 0.5[x5, x7];
+ %
+ % Construction with tangent circles
+ %
+ save d, k, R; k = (x7-x5)/(x3-x1);
+ k' = (1+k-2sqrt k)/((1-k)**2);
+ bot y6l = -o;
+ top y2r = vround 0.8h+o;
+ R = k'*(y2-y6);
+ y3 = y2-R; bot y1 = bot y10 = vround y3;
+ y5 = y7 = y6+k*R;
+ z4 = (1/(1+k))[(x2, y1), (x6, y5)]; d = R/(x2-x1);
+ pos4(astro.cap_stem, angle((y1-y5)/d, (x6-x2)*d)-90);
+ % stem
+ save rth; rth = astro.cap_stem;
+ arrow_height := vround astro[h-cap_height, 0.2cap_height]+o;
+ arrow_width := rth+hround 2(2.25u)+0.5;
+ arrow_head9(z10..(x10, h+o-pen_top), left);
+ filldraw stroke z9e..z10e;
+ %
+ x7 := x7r+1;
+ tmp_path := z6l right_to_up z7l;
+ t := xpart(tmp_path intersectiontimes (z7..(x7, y6l)));
+ autorounded;
+ filldraw subpath (0, t) of tmp_path
+ --z7--z7r down_to_left z6r--cycle;
+ filldraw stroke z1e up_to_right z2e right_to_down
+ z3e...z4e{((y5-y1)/d, (x2-x6)*d)}
+ ...z5e down_to_right z6e;
+ penlabels(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+endchar;
+
+% almost okay (see arrows dimensions)
+beginchar(astro_uranus, 9u#+2appr#, body_height#, 0);
+ "Uranus";
+ italcorr 0; % italcorr body_height#*slant-.5u#;
+ save a;
+ a = astro.light_stem;
+ ensure_centering_of(a);% just for homogeneity
+% circle
+ penpos1(astro.vair, 90);
+ penpos2(hround astro[rth, curve-stem_corr], 180);
+ penpos3(astro.vair', -90);
+ penpos4(hround astro[rth, curve-stem_corr], 0);
+ y1r = vround astro[0.70cap_height, x_height]+oo;
+ y3r = -oo;
+ y2 = y4 = 0.5[y1, y3];
+ x2r = appr; x4r = w-appr; x1 = x3 = 0.5[x2, x4];
+ y2l := y4l := astro[y2, 0.52[y3, y1]];
+ penstroke pulled_arc.e(1, 2) & pulled_arc.e(2, 3)
+ & pulled_arc.e(3, 4) & pulled_arc.e(4, 1) & cycle;
+% dot
+ adjust_dot5((x1, y2), astro[1.6rth, dtsz], true, true);
+ dot(5, 5');
+% arrow
+ tmp_path := pulled_arc.r(1, 2) & pulled_arc.r(2, 3)
+ & pulled_arc.r(3, 4) & pulled_arc.r(4, 1) & cycle;
+ arrow_height := vround astro[0.2cap_height, 0.3cap_height]+eps;
+ arrow_width := max(4.9rth, rth+3u);
+ save rth; rth = hround a;
+ arrow_head6(z1..(x1, body_height+o-pen_top), both);
+ save t;
+ forsuffixes $ = , r, l:
+ t$ = xpart(tmp_path intersectiontimes (z6$..(x6$, y2)));
+ endfor
+ pickup crisp.nib;
+ filldraw subpath (t.r, 8) of tmp_path
+ & subpath (0, t.l) of tmp_path --z6l--z6r--cycle;
+ penlabels(1, 2, 3, 4, 6, 7);
+endchar;
+
+% almost okay (see arrows dimensions)
+beginchar(astro_neptune, 10.5u#+2Appr#, cap_height#, 0);
+ "Neptune";
+ italcorr 0; % italcorr cap_height#*slant-.5u#;
+ save a;
+ a = hround astro[rth, cap_stem-2stem_corr];
+ ensure_centering_of(a);
+% stems
+ x1-0.5a = hround astro[Appr, appr];
+ x3 = x7 = 0.5w;
+ x1 = x2; x4-x3 = x3-x1;
+ pickup crisp.nib;
+% arrows
+ save rth; rth = a;
+ arrow_height := vround astro[0.125cap_height, 0.25cap_height]+eps;
+ arrow_width := min(3a, x3-x1-0.5u, 2.5u+a);
+ arrow_head0((x1, 0)..(x1, h+o-pen_top), both);
+ arrow_head5((x4, 0)..(x4, h+o-pen_top), both);
+ arrow_head6((x3, 0)..(x3, h+o-pen_top), both);
+% cup and queue
+ pos1(a, 180); pos2(a, 180); pos3(astro.vair, -90); pos4(a, 0); pos7(a, 0);
+ pos8(vround astro.light_stem, 90); pos9(vround astro.light_stem, 90);
+ bot y3r = vround 0.2cap_height;
+ y1 = y0; y2 = y4 = 0.5[y1, y3]; bot y7 = -o;
+ top y8r = top y9r = vround 0.2cap_height-1;
+ x7l-x8 = x9-x7r = hround 0.5(x3-x1-a);
+ filldraw stroke z1e..z2e down_to_right z3e right_to_up z4e..z5e;
+ filldraw stroke z6e..z7e; filldraw stroke z8e..z9e;
+ penlabels(1, 2, 3, 4, 7, 8, 9);
+endchar;
+
+% The serifs are not cm compatible
+beginchar(astro_pluto, 7.75u#+Appr#+appr#, cap_height#, 0);
+ "Pluto";
+ italcorr 0; % italcorr 0.75cap_height#*slant-.5u#;
+ pickup crisp.nib;
+ %
+ % stem
+ %
+ pos1(astro.cap_stem, 0);
+ pos2(astro.cap_stem, 0);
+ top y1 = h; bot y2 = 0; lft x1l = lft x2l = Appr;
+ filldraw stroke z1e..z2e;
+ %
+ % curve
+ %
+ penpos3(astro.cap_hair, 90);
+ penpos4(astro.cap_hair, 90);
+ penpos5(astro.cap_curve, 0);
+ penpos6(astro.vair, -90);
+ penpos7(astro.vair, -90);
+ y3r = y4r = h; y5 = 0.5[y4, y6];
+ y6r = y7r = vround astro[0.275h, 0.5h-astro.vair];
+ x3 = x7 = x1; x5r = w-appr; x4 = x6 = 0.4[x3, x5];
+ penstroke z3e..pulled_arc.e(4, 5) & pulled_arc.e(5, 6)..z7e;
+ %
+ % arm or beak, and serifs
+ %
+ pos9(astro.slab, 90); pos10(astro.slab, 90); y9l = y10l = y2; x9 = x2r;
+ if serifs: x10 = 0.5w;
+ save beak_jut, bracket, cap_jut;
+ beak_jut = hround astro[0, 0.75u];
+ cap_jut = hround astro[0, 1.8u];
+ bracket = 0.5cap_jut;
+ arm10(astro.beak, beak_jut, astro.slab, beak_darkness, up, w-appr);
+ serif(1, 2, bracket, cap_jut, astro.slab, true,
+ 0, 0.5cap_jut, astro.slab, true, 0);
+ serif(2, 1, bracket, cap_jut, astro.slab, true,
+ 0, 0.5cap_jut, astro.slab, true, 0);
+ else: rt x10 = w-appr; fi
+ filldraw stroke z9e..z10e;
+ penlabels(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
+endchar;
+
+% okay
+beginchar(astro_varearth, 9u#+2appr#, cap_height#, 0);
+ "Variant Earth";
+ italcorr 0; % italcorr x_height#*slant-.5u#;
+ save a;
+ a = astro.light_stem;
+ ensure_centering_of(a);
+ % circle
+ penpos1(astro.vair, 90);
+ penpos2(astro.curve, 180);
+ penpos3(astro.vair', -90);
+ penpos4(astro.curve, 0);
+ y1r = vround astro[0.70cap_height, x_height]+oo;
+ y3r = -oo;
+ y2 = y4 = 0.5[y1, y3];
+ x2r = appr; x4r = w-appr; x1 = x3 = 0.5[x2, x4];
+ y2l := y4l := astro[y2, 0.52[y3, y1]];
+ penstroke pulled_arc.e(1, 2) & pulled_arc.e(2, 3)
+ & pulled_arc.e(3, 4) & pulled_arc.e(4, 1) & cycle;
+ % head
+ tmp_path := pulled_arc.r(1, 2) & pulled_arc.r(2, 3)
+ & pulled_arc.r(3, 4) & pulled_arc.r(4, 1) & cycle;
+ pickup crisp.nib;
+ top y5 = h+o; top y6r = top y7r = vround(0.5[h, y1r]+0.5o+0.5a);
+ pos5(hround a, 0); pos6(vround a, 90); pos7(vround a, 90);
+ x5 = x1; x5l-x6 = x7-x5r = hround 0.5(x1-x2l);
+ save t;
+ forsuffixes $ = , r, l:
+ t$ = xpart(tmp_path intersectiontimes (z5$..(x5$, y2)));
+ endfor
+ filldraw subpath (t.r, 8) of tmp_path
+ & subpath (0, t.l) of tmp_path --z5l--z5r--cycle;
+ filldraw stroke z6e..z7e;
+ penlabels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+beginchar(astro_aries, 13u#+2appr#, cap_height#, 0);
+ "Aries";
+ italcorr 0; % italcorr 0.7x_height#*slant-.5u#;
+ save a, b;
+ a = 10; b = hround astro[1.2rth,astro.cap_stem];
+ ensure_centering_of(b);
+ x1 = x2 = x3 = 0.5w; y3 = 0.5h;
+ if serifs:
+ save bracket, cap_jut;
+ pickup crisp.nib;
+ cap_jut = hround astro[0, 1.8u];
+ bracket = 0.5cap_jut;
+ bot y2=0;
+ pos2(b, 0); pos3(b, 0);
+ serif(2, 3, bracket, cap_jut, astro.slab, true, dish,
+ cap_jut, astro.slab, true, dish);
+ filldraw stroke z2e..z3e;
+ else:
+ pickup tiny.nib;
+ bot y1 = -d-o; y2-y1 = o;
+ pos1(max(0.75b, tiny+eps), 0);
+ pos2(b, 0); pos3(b, 0);
+ filldraw stroke z1e--z2e--z3e;
+ penlabels(1);
+ fi
+ pickup tiny.nib;
+ pos3a(astro.light_stem, 0); pos4a(vround astro.light_stem, 90);
+ pos5a(astro.curve, 180); pos6a(astro.cap_hair, 270-a);
+ pos3b(astro.light_stem, 180); pos4b(vround astro.light_stem, 90);
+ pos5b(astro.curve, 0); pos6b(astro.cap_hair, -90+a);
+ y3 = y3a = y3b;
+ top y4a.r = top y4b.r = h+o;
+ y5a = y5b = 0.6[y6a, y4a];
+ bot y6a.r = bot y6b.r = vround 0.5h;
+ lft x3a.l = 0.5(w-b); rt x3b.l = 0.5(w+b);
+ x4a = 0.6[x3a, x5a]; x4b = 0.6[x3b, x5b];
+ lft x5a.r = appr; rt x5b.r = w-appr;
+ x6a.r = good.x 0.5[x5a.r, x3a.l];
+ x3a.l-x6a.r = x6b.r-x3b.l;
+ filldraw stroke z3a.e up_to_left z4a.e
+ & pulled_arc.e(4a, 5a)...z6a.e{dir -a};
+ filldraw stroke z3b.e up_to_right z4b.e
+ & pulled_arc.e(4b, 5b)...z6b.e{dir(180+a)};
+ penlabels(1, 2, 3, 3a, 4a, 5a, 6a, 3b, 4b, 5b, 6b);
+endchar;
+
+% okay
+beginchar(astro_taurus, 9u#+2appr#, cap_height#, 0);
+ "Taurus";
+ italcorr 0; % italcorr x_height#*slant-.5u#;
+% circle
+ penpos1(astro.vair, 90);
+ penpos2(astro.curve, 180);
+ penpos3(astro.vair', -90);
+ penpos4(astro.curve, 0);
+ y1r = vround astro[0.70cap_height, x_height]+oo;
+ y3r = -oo;
+ y2 = y4 = 0.5[y1, y3];
+ x2r = appr; x4r = w-appr; x1 = x3 = 0.5[x2, x4];
+ y2l := y4l := astro[y2, 0.52[y3, y1]];
+ penstroke pulled_arc.e(1, 2) & pulled_arc.e(2, 3)
+ & pulled_arc.e(3, 4) & pulled_arc.e(4, 1) & cycle;
+% head
+ pickup crisp.nib;
+ pos5(astro.hair, 180);
+ pos6(vround astro.light_stem, -90);
+ pos7(astro.hair, 0);
+ top y5 = top y7 = h+o; bot y6r = y1l;
+ lft x5r = appr; rt x7r = w-appr; x6 = x1;
+ filldraw stroke z5e down_to_right z6e right_to_up z7e;
+ penlabels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+beginchar(astro_gemini, 11u#+2appr#, cap_height#, 0);
+ "Gemini";
+ italcorr 0; % italcorr asc_height#*slant-.5u#;
+ pickup crisp.nib;
+ save c, bracket;
+ bracket = 0.5hround astro[0, 1.8u];
+ c = hround 0.25(w-2appr-2astro.stem);
+ % stems
+ pos1(astro.stem, 0); pos2(astro.stem, 0);
+ pos3(astro.stem, 0); pos4(astro.stem, 0);
+ top y1 = top y3 = h; bot y2 = bot y4 = 0;
+ lft x1l = lft x2l = appr+c; rt x3r = rt x4r = w-appr-c;
+ filldraw stroke z1e..z2e;
+ filldraw stroke z3e..z4e;
+ % serifs
+ if serifs:
+ serif(1, 2, bracket, c, astro.slab, true, dish, 0.0c, astro.slab, true, 0);
+ serif(2, 1, bracket, c, astro.slab, true, dish, 0.0c, astro.slab, true, 0);
+ serif(3, 4, bracket, 0.0c, astro.slab, true, 0, c, astro.slab, true, dish);
+ serif(4, 3, bracket, 0.0c, astro.slab, true, 0, c, astro.slab, true, dish);
+ filldraw z1e--z1f--z3c--z3d--cycle;
+ filldraw z2e--z2f--z4c--z4d--cycle;
+ else:
+ pos5(astro.slab, 90); pos6(astro.slab, 90);
+ pos7(astro.slab, 90); pos8(astro.slab, 90);
+ lft x5r = lft x7l = appr; rt x6r = rt x8l = w-appr;
+ y5r = y6r = y1; y7l = y8l = y2;
+ filldraw stroke z5e..z6e;
+ filldraw stroke z7e..z8e;
+ penlabels(5, 6, 7, 8);
+ fi
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(astro_cancer, 13u#+2appr#, cap_height#, 0);
+ "Cancer";
+ italcorr 0; % italcorr 0.7x_height#*slant-.5u#;
+ labels(1, 2, 3, 4);
+endchar;
+
+beginchar(astro_leo, 13u#+2appr#, cap_height#, 0);
+ "Leo";
+ italcorr 0; % italcorr 0.7x_height#*slant-.5u#;
+ pickup crisp.nib;
+ pos1(astro.cap_hair,0);
+ pos2(astro.vair,90);
+ pos3(astro.cap_hair,180);
+ pos4(astro.vair,-90);
+ pos5(astro.cap_hair,180);
+ pos6(astro.cap_curve,180);
+ pos7(astro.vair,90);
+ pos8(astro.cap_curve,0);
+ pos9(astro.cap_hair,0);
+ pos10(astro.vair,90);
+ pos11(astro.cap_hair,180);
+ bot y4r=bot y10.l=-o; top y7r=h+o;top y2r=vround 0.3h+o;
+ y1=y3=y5=y9=0.5[y2, y4]; y6=y8=0.6[y1,y7]; y11=good.y y9;
+ lft x3r=appr; rt x11l=w-appr;
+ lft x6r=w-rt x8r=appr+hround(2.5u-0.5astro.cap_curve);
+ rt x1r-lft x3r=rt x11l-lft x9l=hround 5u;
+ x5=x1; x2=x4=0.5[x1,x3]; x10=0.5[x9,x11];
+ x7=0.5[x6, x8];
+ filldraw stroke z1e up_to_left z2e left_to_down z3e down_to_right z4e
+ right_to_up z1e;
+ filldraw stroke z5e{up}...pulled_arc.e(6,7)&pulled_arc.e(7,8)...z9e
+ down_to_right z10e right_to_up z11e;
+ penlabels(1,2,3,4,5,6,7,8,9,10,11);
+endchar;
+
+beginchar(astro_virgo, 13u#+2appr#, cap_height#, 0);
+ "Virgo";
+ italcorr 0; % italcorr 0.7x_height#*slant-.5u#;
+ labels(1, 2, 3, 4);
+endchar;
+
+beginchar(astro_libra, 13u#+2appr#, cap_height#, 0);
+ "Libra";
+ italcorr 0; % italcorr 0.7x_height#*slant-.5u#;
+ pickup crisp.nib;
+ save a, b;
+ % horizontal stems
+ top y1r-bot y1l = astro.slab;
+ y1=0.5[y1r, y1l]; x1 = x1l= x1r;
+ forsuffixes $ = 2, 3, 4, 5, 6:
+ y$r-y$l = y1r-y1l; y$ = 0.5[y$r, y$l]; x$ = x$l = x$r;
+ endfor
+ bot y1l = 0; y1 = y2;
+ y3-y1= vround astro[0.375x_height, 0.2x_height]; y3 = y4 = y5 = y6;
+ rt x4= hround(0.5w-astro[1.5u, 1u]); x5 = w-x4; lft x1= appr; rt x2=w-appr;
+ % ellipses $(x-x_0)^2/a^2+(y-y_0)^2/b^2=1$
+ pos8(astro.curve, 180); pos9(astro.vair, 90); pos10(astro.curve, 0);
+ top y9r=h+o; lft x8r=w-rt x10r=appr+hround(2u-0.5astro.curve);
+ x0 = x9 = 0.5w; y7l = y7r = y11l = y11r = y4r; x7l = x4r; x11l = x5r;
+ % inner ellipse
+ a = x10l-x0;
+ b*(1+-+((x11l-x0)/a)) = (-b+y9l-y7l);
+ y0 = y8 = y10 = y9l-b;
+ z7'l=unitvector((y7l-y0)/b/b, -(x7l-x0)/a/a);
+ z11'l=unitvector((y11l-y0)/b/b, -(x11l-x0)/a/a);
+ % outer ellipse
+ a := x10r-x0;
+ b := y9r-y0;
+ x0-x7r = x11r-x0 = a*(1+-+((y11r-y0)/b));
+ z7'r=unitvector((y7r-y0)/b/b, -(x7r-x0)/a/a);
+ z11'r=unitvector((y11r-y0)/b/b, -(x11r-x0)/a/a);
+ % draw things
+ if serifs: x3=x7r; x6=x11r;
+ arm3(astro.beak, -astro[0, 0.75u], -astro.slab,
+ beak_darkness, up, appr-0.75u);
+ arm6(astro.beak, astro[0, 0.75u], astro.slab,
+ beak_darkness, up, w-appr+0.75u);
+ else: x3=x1; x6=x2;
+ fi
+ filldraw stroke z1e..z2e;
+ filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e;
+ filldraw stroke z7e{z7'e}...pulled_arc.e(8, 9)
+ & pulled_arc.e(9, 10)...z11e{z11'e};
+ penlabels(0, 1, 2, 3, 4,5,6,7,8,9,10,11);
+endchar;
+
+%iff false:
+beginchar(astro_scorpio,15u#+2appr#,cap_height#,0.5desc_depth#);
+ "Scorpio";
+% italcorr .5[bar_height#,x_height#]*slant-serif_fit#+.5stem#-2u#;
+% adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
+% numeric shaved_stem; shaved_stem=hround(mfudged.stem-2stem_corr);
+ pickup crisp.nib;
+ pos1(astro.cap_stem,0); pos2(astro.cap_stem,0);
+ pos3(astro.cap_stem,0); pos4(astro.cap_stem,0);
+ pos5(astro.cap_stem,0); pos6(astro.cap_stem,0);
+ pos6'(astro.cap_stem,180); pos7(astro.vair,-90);
+ lft x1l=appr+hround(1.5u-.5astro.cap_stem);
+ x5-x3=x3-x1=hround 5u; x1=x2; x3=x4; x5=x6;
+ bot y2=0; y2=y4; y6=0.25x_height; y1=y3=y5=0.7h;
+ for $ = 3, 5:
+ pos[$]a(astro.cap_hair, 180); top y[$]b.r-bot y[$]b.l=astro.vair;
+ rt x[$]a.l=x[$-2]r; y[$]a=astro[0.7h,0.55h]; top y[$]b.r=h+o;
+ x[$]b.r=astro[0.5[x[$]a, x[$]], 0.5[rt x[$]a.l, rt x[$]r]];
+ z[$]b.l= whatever[z[$]a.l, z[$]b.r];
+ x[$]b = x[$]b.r; y[$]b=0.5[y[$]b.l, y[$]b.r];
+ filldraw stroke z[$]a.e{up}...z[$]b.e{right}
+ & pulled_arc.e([$]b, [$])..z[$+1]e;
+ endfor
+ lft x1a=appr-hround u; top y1a.r=h+o; pos1a(astro.vair,90);
+ filldraw stroke pulled_arc.e(1a, 1)..z2e;
+ z6=z6'; bot y7r=-d; x7=0.5[x6,w];
+ save rth; rth = astro.hair;
+ arrow_height := vround astro[0.125cap_height, 0.25cap_height]+eps;
+ arrow_width := 3.5u;
+ arrow_head8(z7{right}...(w,0.25x_height){up}, both);
+ filldraw stroke pulled_arc.e(6',7)...{z8a-z8}z8e;
+ if serifs:
+ save beak_jut, bracket, cap_jut;
+ cap_jut = hround astro[0, 1.8u];
+ bracket = 0.5cap_jut;
+ serif(2, 1, bracket, cap_jut, astro.slab, true, dish,
+ cap_jut-0.5u, astro.slab, true, dish);
+ serif(4, 3, bracket, cap_jut-0.5u, astro.slab, true, dish,
+ cap_jut-0.5u, astro.slab, true, dish);
+ fi
+ penlabels(1,1a,2,3,3a,3b,4,5,5a,5b,6,7);
+endchar;
+
+beginchar(astro_sagittarius, 13u#+2appr#, cap_height#, 0);
+ "Sagittarius";
+ italcorr 0; % italcorr 0.7x_height#*slant-.5u#;
+ save a, rth; a= angle(w-2appr,h+2o); rth=astro.light_stem;
+ pickup crisp.nib; lft x1l=appr; bot y1r=-o;
+ pos1(astro.light_stem, a-90);
+ arrow_height := vround astro[0.2cap_height, 0.3cap_height]+eps;
+ arrow_width := max(4.9rth, rth+3u);
+ arrow_head2((appr,-o)..(w-appr, h+o), both);
+ pos3(astro.light_stem,a); pos4(astro.light_stem,a);
+ z3-z2c.l=whatever*(z2-z1); z0=1/3[z1,z2]; z3-z0=whatever*dir(a+90);
+ z3-z0=z0-z4;
+% autorounded;
+ filldraw stroke z1e..z2e;
+ filldraw stroke z3e..z4e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(astro_capricorn, 13u#+2appr#, cap_height#, 0);
+ "Capricorn";
+ italcorr 0; % italcorr 0.7x_height#*slant-.5u#;
+ labels(1, 2, 3, 4);
+endchar;
+
+beginchar(astro_aquarius, 13u#+2appr#, cap_height#, 0);
+ "Aquarius";
+ italcorr 0; % italcorr 0.7x_height#*slant-.5u#;
+ labels(1, 2, 3, 4);
+endchar;
+
+beginchar(astro_pisces, 13u#+2appr#, cap_height#, 0);
+ "Pisces";
+ italcorr 0; % italcorr 0.7x_height#*slant-.5u#;
+ pickup crisp.nib;
+ pos1(astro.vair, 90); pos2(astro.curve,0); pos3(astro.vair, -90);
+ pos4(astro.vair, 90); pos5(astro.curve,180); pos6(astro.vair, -90);
+ pos7(vround astro.light_stem,90); pos8(vround astro.light_stem,90);
+ top y1r=top y4r=h+o; bot y3r=bot y6r=-o;
+ top y7r=top y8r=vround(0.5h+0.5astro.light_stem); y2=y5=y7;
+ lft x3=lft x1=appr; rt x4=rt x6=w-appr;
+ lft x2l=w-rt x5l=appr+hround(4u-.5astro.curve);
+ lft x7=w-rt x8=appr+hround u;
+ filldraw stroke pulled_arc.e(1,2)&pulled_arc.e(2,3);
+ filldraw stroke pulled_arc.e(4,5)&pulled_arc.e(5,6);
+ filldraw stroke z7e..z8e;
+ penlabels(1, 2, 3, 4,5,6,7,8);
+endchar;
+
+% The next symbol is intended to figure ``cemetery''
+% in the theory of Markov processes.
+% Usualy, this concept is represented by a partial derivative
+% symbol or a Greek lowercase delta. It seems that
+% no specific symbol has been designed before.
+
+use_rule1;
+beginchar(cemetery, 10u#+2appr#, cap_height#, 0);
+ "Cemetery symbol";
+ pickup rule.nib;
+ ensure_centering_of(rth);
+ x1 = x2 = 0.5w;
+ lft x5 = appr; rt x8 = w-appr; bot y5 = bot y8 = 0;
+ y1 = h; x3 = w-x4 = appr+hround 1.5u;
+ y2 = good.y 0.2[y5, y1]; y3 = y4 = good.y 2/3[top y2, y1];
+ z6 = 0.5[z5, z2]; z7 = 0.5[z8, z2];
+ tmp_path := z5{right}...z6{0.5(x2-x6), y2-y6}...z2{right}
+ ...z7{0.5(x7-x2), y7-y2}...z8{right};
+ draw tmp_path;
+ penpos1(rth, 0); penpos2(rth, 0);
+ penpos3(rth, 90); penpos4(rth, 90);
+ penstroke z1e..z2e; penstroke z3e..z4e;
+ save a, b, c, number_of_slashes; a = max(h, w);
+ pickup crisp.nib;
+ x5' = good.x appr; x8' = good.x w-appr; y5 = y5'; y8 = y8';
+ pos5(rth, 90); pos5'(rth, 90); pos8(rth, 90); pos8'(rth, 90);
+ filldraw stroke z5e..z5'e; filldraw stroke z8e..z8'e;
+ pickup fine.nib;
+ number_of_slashes = 6; c = hround((x8-x5)/(number_of_slashes+1));
+ number_of_slashes := round((x8-x5)/max(c, 1))-1;
+ for i = 1 upto number_of_slashes:
+ bot y[i+8]l = 0; x[i+8]l = x5+i*c;
+ z[i+8]r = tmp_path intersectionpoint (z[i+8]l..z[i+8]l+(a, a));
+ draw z[i+8]l..z[i+8]r; penlabels([i+8]);
+ endfor;
+ penlabels(1, 2, 3, 4, 5, 8, 5', 8'); labels(6, 7);
+endchar;
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathastrotest10.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathastrotest10.mf
new file mode 100644
index 00000000000..7e88651e7f2
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathastrotest10.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: matha10.mf (math serie A at 10 points)
+% last modification: May 16, 2005.
+
+font_identifier:="matha"; font_size 10pt#;
+font_coding_scheme "matha";
+
+input mathprmt;
+input mathastrotestdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathastrotestdrv.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathastrotestdrv.mf
new file mode 100644
index 00000000000..1df430d3d4a
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathastrotestdrv.mf
@@ -0,0 +1,67 @@
+% mathematical symbols by Anthony Phan.
+% file: mathastrotestdrv.mf (test file for astonomical/logical symbols)
+% last modification: May 16, 2005.
+
+mode_setup;
+math_setup;
+
+% ASTRONOMICAL SYMBOLS
+
+% mathastr.mf
+
+astro_sun :=hex"00";
+astro_mercury :=hex"01";
+astro_venus :=hex"02";
+astro_earth :=hex"03";
+astro_mars :=hex"04";
+astro_jupiter :=hex"05";
+astro_saturn :=hex"06";
+astro_uranus :=hex"07";
+astro_neptune :=hex"08";
+astro_pluto :=hex"09";
+astro_varearth :=hex"0A";
+astro_left_moon :=hex"0B";
+astro_right_moon:=hex"0C";
+astro_full_moon :=hex"0D";
+astro_new_moon :=hex"0E";
+%cemetery :=hex"0F";
+%ligtable cemetery:cemetery kern-2(u#+letter_fit#);
+
+astro_aries :=hex"10";
+astro_taurus :=hex"11";
+astro_gemini :=hex"12";
+astro_cancer := hex"13";
+astro_leo := hex"14";
+astro_virgo := hex"15";
+astro_libra := hex"16";
+astro_scorpio := hex"17";
+astro_sagittarius := hex"18";
+astro_capricornus := hex"19";
+astro_aquarius := hex"1A";
+astro_pisces := hex"1B";
+
+extra_endchar := "";
+standard_proofing;
+
+extra_endchar := extra_endchar & "; charcode := charcode+code_offset;";
+
+astro:=0/7; code_offset:=0*32; input mathastr;
+astro:=1/7; code_offset:=1*32; input mathastr;
+astro:=2/7; code_offset:=2*32; input mathastr;
+astro:=3/7; code_offset:=3*32; input mathastr;
+astro:=4/7; code_offset:=4*32; input mathastr;
+astro:=5/7; code_offset:=5*32; input mathastr;
+astro:=6/7; code_offset:=6*32; input mathastr;
+astro:=7/7; code_offset:=7*32; input mathastr;
+
+% parameters for TFM files.
+
+font_slant=0;
+font_x_height=x_height#;
+%font_normal_stretch=3u#;
+%font_normal_shrink=2u#;
+font_quad=18u#+4letter_fit#;
+font_extra_space=2u#;
+font_normal_space=6u#+2letter_fit#;
+
+end.
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathasym.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathasym.mf
new file mode 100644
index 00000000000..e78f764498e
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathasym.mf
@@ -0,0 +1,421 @@
+% 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;
+
+use_rule1;
+make_sim_picture;
+
+% standard
+% beginchar(hex"20",6u#+2letter_fit#,0,0);
+% "Normal space";
+% endchar;
+
+%
+% Usual binary operators.
+%
+
+currentlocation_:=hex"00";
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Plus sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+ lft x1l=hround 0.5(w-rth); x2=x1;
+ lft x3=Appr; x1-x3=x4-x1=y1-y3=y3-y2; y3=y4=math_axis;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Minus sign";
+ pickup tiny.nib; pos1(rth,90); pos2(rth,90);
+ y1=y2=math_axis; lft x1=Appr; rt x2=w-Appr;
+ filldraw stroke z1e..z2e; penlabels(1,2,3,4);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Times sign";
+ pickup rule.nib; x0=good.x 0.5w;
+ pickup tiny.nib; rt x0'=w-Appr; y0=y0'=math_axis;
+ z1-z0=z0-z2=(z0'-z0) rotated 45; z3-z0=z0-z4=(z0'-z0) rotated -45;
+ pos1(rth+2eps,-45); pos2(rth+2eps,-45);
+ pos3(rth+2eps,45); pos4(rth+2eps,45);
+ filldraw stroke z1e..z2e; filldraw stroke z4e..z3e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Division sign";
+ pickup tiny.nib;
+ lft x1=Appr; rt x2=w-Appr;
+ y2=y1=math_axis; pos1(rth,90); pos2(rth,90);
+ filldraw stroke z1e..z2e;
+ pickup null.nib;
+ adjust_dot3((0.5[x1,x2],y1+math_spread[0.5x_height,0.6x_height]),
+ dtsz,true,false); dot(3,3');
+ adjust_dot4((0.5[x1,x2],y1-math_spread[0.5x_height,0.6x_height]),
+ dtsz,true,false); dot(4,4');
+ penlabels(1,2);
+endchar;
+
+beginchar(currentlocation,3u#+2appr#,v_center(7u#));
+ "Centered dot";
+ pickup null.nib;
+ adjust_dot1((0.5w,math_axis),dtsz,false,false);
+ dot(1,1');
+endchar;
+
+% known as \circ
+
+beginchar(currentlocation,7u#+2appr#,v_center(7u#));
+ "Small circle";
+ pickup rule.nib0;
+ adjust_dot1((0.5w,math_axis),max(7u,dtsz+rth0),false,false);
+ full_dot:=false; dot(1,1');
+endchar;
+
+beginchar(currentlocation,ast_size#+2appr#,v_center(ast_size#));
+ "Small asterisk";
+ autorounded;
+ interim stress:=0.5;
+ pickup null.nib;
+ numeric b,c,dag_curve,dag_stem;
+ dag_curve=ast_curve; dag_stem=ast_stem;
+ b=1.8ast_stem; c=1.4ast_stem;
+ %
+ x0=hround(0.5w-0.5dag_curve)+0.5dag_curve;
+ y0=0.5[-d,h];
+ for $=1 upto 6: z[$]=b*dir($*60+30)+z0;
+ z[$]'=c*dir($*60+60)+z0; endfor
+ filldraw for $=1 upto 6: dagger_stroke[$](round(0.5ast_size-b)+eps,
+ dag_curve,dag_stem,dir($*60+30))...z[$]'...endfor cycle;
+endchar;
+
+beginchar(currentlocation,ast_size#+2appr#,v_center(ast_size#));
+ "Small co-asterisk";
+ autorounded;
+ interim stress:=0.5;
+ pickup null.nib;
+ numeric b,c,dag_curve,dag_stem;
+ dag_curve=ast_curve; dag_stem=ast_stem;
+ b=1.8ast_stem; c=1.4ast_stem;
+ %
+ x0=hround(0.5w-0.5dag_curve)+0.5dag_curve;
+ y0=0.5[-d,h];
+ for $=1 upto 6: z[$]=b*dir($*60-60)+z0;
+ z[$]'=c*dir($*60-30)+z0; endfor
+ filldraw for $=1 upto 6: dagger_stroke[$](round(0.5ast_size-b)+eps,
+ dag_curve,dag_stem,dir($*60-60))...z[$]'...endfor cycle;
+ labels(0,1',2',3',4',5',6');
+endchar;
+
+% beginchar(currentlocation,arithmetic_bounds);
+% "Truc sign";
+% pickup tiny.nib;
+% pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+% top y1=top y3r=top y4r=h; bot y2=-d;
+% lft x1l=hround 0.5(w-rth); x2=x1;
+% lft x3=Appr; x1-x3=x4-x1; filldraw stroke z1e..z2e;
+% filldraw stroke z3e..z4e; penlabels(1,2,3,4);
+% endchar;
+
+% beginchar(currentlocation,arithmetic_bounds);
+% "curT sign";
+% pickup tiny.nib;
+% pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+% bot y1=bot y3l=bot y4l=-d; top y2=h;
+% lft x1l=hround 0.5(w-rth); x2=x1;
+% lft x3=appr; x1-x3=x4-x1; filldraw stroke z2e..z1e;
+% filldraw stroke z3e..z4e; penlabels(1,2,3,4);
+% endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Plus-minus sign";
+ numeric a; a=min(vround(rth+0.3u),0.5spread1);
+ pickup tiny.nib; pos1(rth,0); pos2(rth,0);
+ pos3(rth,90); pos4(rth,90); pos5(rth,90); pos6(rth,90);
+ lft x1l=hround 0.5(w-rth); x2=x1; lft x3=Appr;
+ x1-x3=x4-x1=y1-y3=y3-y2; y3=y4=math_axis+0.5spread1;
+ top y5r=top y6r=bot y2-a; x5=x3; x6=x4;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e; penlabels(1,2,3,4,5,6);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Minus-plus sign";
+ numeric a; a=min(vround(rth+0.3u),0.5spread1);
+ pickup tiny.nib; pos1(rth,0); pos2(rth,0);
+ pos3(rth,90); pos4(rth,90); pos5(rth,90); pos6(rth,90);
+ lft x1l=hround 0.5(w-rth); x2=x1; lft x3=Appr;
+ x1-x3=x4-x1=y1-y3=y3-y2; y3=y4=math_axis-0.5spread1;
+ bot y5l=bot y6l=top y1+a; x5=x3; x6=x4;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e; penlabels(1,2,3,4,5,6);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Left times sign";
+ pickup rule.nib; x0=good.x 0.5w;
+ pickup tiny.nib; rt x0'=w-Appr; y0=y0'=math_axis;
+ z1-z0=(z0'-z0) rotated 45; z3-z0=(z0'-z0) rotated -45;
+ pos1(rth+2eps,-45); pos2(rth+2eps,-45);
+ pos3(rth+2eps,45); pos4(rth+2eps,45);
+ lft x2l=lft x4l=hround(2x0-rt x1r);
+ z2=whatever[z0,z1]; z4=whatever[z0,z3];
+ rt x2'-lft x2l=rt x4'-lft x4l=rth;
+ z2'=whatever[z1l,z2l]; z4'=whatever[z3l,z4l];
+ filldraw z1l--z2'--z4'--z3l--z3r--z4r
+ --z4l--z2l--z2r--z1r--cycle;
+ penlabels(1,2,3,4); labels(2',4');
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Right times sign";
+ pickup rule.nib; x0=good.x 0.5w;
+ pickup tiny.nib; lft x0'=Appr; y0=y0'=math_axis;
+ z1-z0=(z0'-z0) rotated 45; z3-z0=(z0'-z0) rotated -45;
+ pos1(rth+2eps,-45); pos2(rth+2eps,-45);
+ pos3(rth+2eps,45); pos4(rth+2eps,45);
+ rt x2l=rt x4l=hround(2x0-lft x1r);
+ z2=whatever[z0,z1]; z4=whatever[z0,z3];
+ lft x2'-rt x2r=lft x4'-rt x4r=-rth;
+ z2'=whatever[z1r,z2r]; z4'=whatever[z3r,z4r];
+ filldraw z1r--z2'--z4'--z3r--z3l--z4l
+ --z4r--z2r--z2l--z1l--cycle;
+ penlabels(1,2,3,4); labels(2',4');
+endchar;
+
+beginchar(currentlocation,7u#+2appr#,v_center(7u#));
+ "Small diamond";
+ pickup tiny.nib;
+ a:=sqrt(3.14159)*0.5*max(7u,dtsz+rth0);
+ y2r=y4r=good.y math_axis; x1r=x3r=good.x 0.5w;
+ y1r-y2r=y2r-y3r=vround(0.5a*sqrt(2)-tiny)+eps;
+ x2r-x1r=x1r-x4r=hround(0.5a*sqrt(2)-tiny)+eps;
+ z1l-z1r=z3r-z3l=(rth0-tiny)/sind(45)
+ *(unitvector(z4r-z1r)+unitvector(z2r-z1r));
+ z2l-z2r=z4r-z4l=(rth0-tiny)/sind(45)
+ *(unitvector(z3r-z2r)+unitvector(z1r-z2r));
+ filldraw stroke z1e--z2e--z3e--z4e--z1e;
+ penlabels(1,2,3,4);
+endchar;
+
+% known as \bullet
+
+beginchar(currentlocation,7u#+2appr#,v_center(7u#));
+ "Small full circle";
+ pickup nullpen;
+ adjust_dot1((0.5w,math_axis),max(7u-rth0,dtsz),false,false);
+ dot(1,1');
+endchar;
+
+beginchar(currentlocation,7u#+2appr#,v_center(7u#));
+ "Small five star";
+ pickup tiny.nib;
+ draw_star.a((0.5w,math_axis),5,3.5u+o,0.2,90,false);
+ labels(a);
+endchar;
+
+beginchar(currentlocation,7u#+2appr#,v_center(7u#));
+ "Small six star";
+ pickup tiny.nib;
+ draw_star.a((0.5w,math_axis),6,3.5u+o,0.4,90,false);
+ labels(a);
+endchar;
+
+% currentlocation_:=hex"10";
+
+beginchar(currentlocation,12u#+2appr#,v_center(spread1#+rth#));
+ "Equality 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
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(currentlocation,12u#+2appr#,v_center(2spread1#+rth#));
+ "Identity sign";
+ pickup tiny.nib; for i=1 upto 6: pos[i](rth,90); endfor
+ lft x1=appr; x1=x3=x5; rt x2=w-appr; x2=x4=x6;
+ y1=y2; y3=y4; y5=y6; y3=math_axis; y1-y3=y3-y5=spread1;
+ filldraw stroke z1e..z2e; % upper bar
+ filldraw stroke z3e..z4e; % middle bar
+ filldraw stroke z5e..z6e; % lower bar
+ penlabels(1,2,3,4,5,6);
+endchar;
+
+beginchar(currentlocation,12u#+2appr#,v_center(spread1#+rth#));
+ "Similarity sign";
+ currentpicture:=sim_picture;
+endchar;
+
+beginchar(currentlocation,12u#+2appr#,v_center(2spread1#+2rth#));
+ "Similarity-similarity sign";
+ currentpicture:=(sim_picture shifted(0,0.5(spread1+rth)))
+ +(sim_picture shifted(0,-0.5(spread1+rth)));
+endchar;
+
+beginchar(currentlocation,12u#+2appr#,v_center(2spread1#+rth#));
+ "Similarity-bar sign";
+ currentpicture:=sim_picture shifted(0,vround 0.5spread1);
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90);
+ lft x1=Appr; rt x2=w-Appr; y1=y2=math_axis-spread1;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(currentlocation,12u#+2appr#,v_center(3spread1#+rth#));
+ "Similarity-equal sign";
+ currentpicture:=sim_picture shifted(0,spread1);
+ 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;
+ y3=y4=math_axis-1.5spread1; y1-y3=y2-y4=spread1;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(currentlocation,12u#+2appr#,v_center(2spread1#+rth#));
+ "Smile-frown sign";
+ pickup tiny.nib;
+ pos2(rth,90); pos5(rth,90);
+ 0.5[y2,y5]=math_axis; y2-y5=spread1;
+ y1l=y3l=y2l+0.5spread1; y4r=y6r=y5r-0.5spread1;
+ lft x1l=lft x4r=appr; rt x3l=rt x6r=w-appr; x2=x5=0.5[x1l,x3l];
+ z1'-z1l=(z2l-z1l) xscaled 1/2; z4'-z4r=(z5r-z4r) xscaled 1/2;
+ z3'-z3l=(z2l-z3l) xscaled 1/2; z6'-z6r=(z5r-z6r) xscaled 1/2;
+ pos1(rth,angle(z1'-z1l)+90); pos4(rth,angle(z4'-z4r)+90);
+ pos3(rth,angle(z3'-z3l)-90); pos6(rth,angle(z6'-z6r)-90);
+ filldraw stroke z1e{z1'-z1l}...z2e{right}...z3e{z3l-z3'};
+ filldraw stroke z4e{z4'-z4r}...z5e{right}...z6e{z6r-z6'};
+ penlabels(1,2,3,4,5,6); labels(1',3',4',6');
+endchar;
+
+beginchar(currentlocation,7u#+2appr#,asc_height#,asc_depth#);
+ "Divide sign";
+ pickup tiny.nib; pos1(rth0,0); pos2(rth0,0);
+ rt x1r=rt x2r=hround(0.5w+0.5rth0);
+ top y1=h; bot y2=-d; filldraw stroke z1e..z2e;
+ penlabels(1,2);
+endchar;
+
+% currentlocation_:=hex"18";
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Not 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
+ lft x6l=w-rt x5r=Appr+hround 1.75u;
+ top y5r=h+eps; 0.5[bot y6l,top y5r]=math_axis;
+ adjust_slanted_bar(6l,5r,6r,5l)(rth-tiny.breadth,-1);
+ filldraw stroke z5e..z6e;
+ penlabels(1,2,3,4,5,6);
+endchar;
+
+beginchar(currentlocation,12u#+2appr#,asc_height#,asc_depth#);
+ "not identity sign";
+ pickup tiny.nib; for i=1 upto 6: pos[i](rth,90); endfor
+ lft x1=appr; x1=x3=x5; rt x2=w-appr; x2=x4=x6;
+ y1=y2; y3=y4; y5=y6; y3=math_axis; y1-y3=y3-y5=spread1;
+ filldraw stroke z1e..z2e; % upper bar
+ filldraw stroke z3e..z4e; % middle bar
+ filldraw stroke z5e..z6e; % lower bar
+ lft x8l=w-rt x7r=appr+hround 1.75u;
+ top y7r=h+eps; 0.5[bot y8l,top y7r]=math_axis;
+ adjust_slanted_bar(8l,7r,8r,7l)(rth-tiny.breadth,-1);
+ filldraw stroke z7e..z8e;
+ penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Not similarity sign";
+ currentpicture:=sim_picture;
+ pickup tiny.nib;
+ lft x2l-Appr=w-Appr-rt x1r=hround 1.75u;
+ top y1r=h+eps; 0.5[bot y2l,top y1r]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny.breadth,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Not similarity-similarity sign";
+ currentpicture:=(sim_picture shifted(0,0.5(spread1+rth)))
+ +(sim_picture shifted(0,-0.5(spread1+rth)));
+ pickup tiny.nib;
+ lft x2l-Appr=w-Appr-rt x1r=hround 1.75u;
+ top y1r=h+eps; 0.5[bot y2l,top y1r]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny.breadth,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Not similarity-bar sign";
+ currentpicture:=sim_picture shifted(0,vround 0.5spread1);
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90);
+ lft x1=Appr; rt x2=w-Appr; y1=y2=math_axis-spread1;
+ filldraw stroke z1e..z2e;
+ lft x4l-Appr=w-Appr-rt x3r=hround 1.75u;
+ top y3r=h+eps; 0.5[bot y4l,top y3r]=math_axis;
+ adjust_slanted_bar(4l,3r,4r,3l)(rth-tiny.breadth,-1);
+ filldraw stroke z3e..z4e; penlabels(1,2,3,4);
+endchar;
+
+beginchar(currentlocation,12u#+2appr#,asc_height#,asc_depth#);
+ "Not similarity-equal sign";
+ currentpicture:=sim_picture shifted(0,spread1);
+ 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;
+ y3=y4=math_axis-1.5spread1; y1-y3=y2-y4=spread1;
+ lft x6l-appr=w-appr-rt x5r=hround 1.75u;
+ top y5r=h+eps; 0.5[bot y6l,top y5r]=math_axis;
+ adjust_slanted_bar(6l,5r,6r,5l)(rth-tiny.breadth,-1);
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw stroke z6e..z5e; penlabels(1,2,3,4,5,6);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Not smile-frown sign";
+ pickup tiny.nib;
+ pos2(rth,90); pos5(rth,90);
+ 0.5[y2,y5]=math_axis; y2-y5=spread1;
+ y1l=y3l=y2l+0.5spread1; y4r=y6r=y5r-0.5spread1;
+ lft x1l=lft x4r=appr; rt x3l=rt x6r=w-appr; x2=x5=0.5[x1l,x3l];
+ z1'-z1l=(z2l-z1l) xscaled 1/2; z4'-z4r=(z5r-z4r) xscaled 1/2;
+ z3'-z3l=(z2l-z3l) xscaled 1/2; z6'-z6r=(z5r-z6r) xscaled 1/2;
+ pos1(rth,angle(z1'-z1l)+90); pos4(rth,angle(z4'-z4r)+90);
+ pos3(rth,angle(z3'-z3l)-90); pos6(rth,angle(z6'-z6r)-90);
+ filldraw stroke z1e{z1'-z1l}...z2e{right}...z3e{z3l-z3'};
+ filldraw stroke z4e{z4'-z4r}...z5e{right}...z6e{z6r-z6'};
+ lft x8l=w-rt x7r=Appr+hround 1.75u;
+ top y7r=h+eps; 0.5[bot y8l,top y7r]=math_axis;
+ adjust_slanted_bar(8l,7r,8r,7l)(rth-tiny.breadth,-1);
+ filldraw stroke z7e..z8e;
+ penlabels(1,2,3,4,5,6,7,8); labels(1',3',4',6');
+endchar;
+
+beginchar(currentlocation,7u#+2appr#,asc_height#,asc_depth#);
+ "Not divide";
+ pickup tiny.nib; pos1(rth0,0); pos2(rth0,0);
+ rt x1r=rt x2r=hround(0.5w+0.5rth0);
+ top y1=h; bot y2=-d;
+ lft x3l=appr-eps; x1l-x3l=x4r-x1r; x3l=x3r; x4l=x4r;
+ h-top y4r=bot y3l+d=hround 0.15(h+d)-eps;
+ a:=rth0-tiny; b:=abs(z4r-z3l);
+ y3r-y3l=y4r-y4l=a/(((x4r-x3l)/b)*((b+-+a)/b)+((y4r-y3l)/b)*(a/b));
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar; \ No newline at end of file
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathb10.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathb10.mf
new file mode 100644
index 00000000000..09b84c5fdf1
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathb10.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathb10.mf (math serie B at 10 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathb"; font_size 10pt#;
+font_coding_scheme "mathb";
+
+input mathprmt;
+input mathbdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathb12.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathb12.mf
new file mode 100644
index 00000000000..5b76c09a478
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathb12.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathb12.mf (math serie B at 12 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathb"; font_size 10pt#;
+font_coding_scheme "mathb";
+
+input mathprmt;
+input mathbdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathb5.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathb5.mf
new file mode 100644
index 00000000000..71edb0f1675
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathb5.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathb5.mf (math serie B at 5 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathb"; font_size 5pt#;
+font_coding_scheme "mathb";
+
+input mathprmt;
+input mathbdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathb6.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathb6.mf
new file mode 100644
index 00000000000..d9e7eb041eb
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathb6.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathb6.mf (math serie B at 6 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathb"; font_size 6pt#;
+font_coding_scheme "mathb";
+
+input mathprmt;
+input mathbdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathb7.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathb7.mf
new file mode 100644
index 00000000000..3267f29cbbb
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathb7.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathb7.mf (math serie B at 7 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathb"; font_size 7pt#;
+font_coding_scheme "mathb";
+
+input mathprmt;
+input mathbdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathb8.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathb8.mf
new file mode 100644
index 00000000000..95fe675b7c3
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathb8.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathb8.mf (math serie B at 8 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathb"; font_size 8pt#;
+font_coding_scheme "mathb";
+
+input mathprmt;
+input mathbdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathb9.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathb9.mf
new file mode 100644
index 00000000000..0994cff7734
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathb9.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathb9.mf (math serie B at 9 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathb"; font_size 9pt#;
+font_coding_scheme "mathb";
+
+input mathprmt;
+input mathbdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathbase.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathbase.mf
new file mode 100644
index 00000000000..03619996ddc
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathbase.mf
@@ -0,0 +1,664 @@
+% mathematical symbols by Anthony Phan.
+% file: mathbase.mf (base file)
+% last modification: May 16, 2005.
+
+mathbase := 1; % when |mathbase| is known, this file has been input
+
+newinternal slant, currentbreadth, math_spread, superness, stress;
+slant := 0; superness := 1/sqrt 2; stress := 0.5;
+
+string main_name_string, tmp_string,
+extra_beginchar_save, extra_endchar_save;
+
+picture tmp_picture;
+path tmp_path, tmpp_path;
+
+boolean true_size, tmp_boolean, dagesh;
+true_size := false;% see mathhbrw.mf
+
+pair both; both = (1, 1);
+
+def autorounded = interim autorounding := 2 enddef;
+
+def localtransform = save currenttransform;
+ transform currenttransform; currenttransform
+enddef;
+
+numeric currentlocation_;
+
+vardef currentlocation =
+ currentlocation_ := currentlocation_+1;
+ currentlocation_-1
+enddef;
+
+def main_name_with(suffix $) =
+ scantokens(main_name_string & str$)
+enddef;
+
+def math_setup =
+ autorounding := 0; smoothing := 0;
+ appr# := u#+letter_fit#; Appr# := 1.5u#+letter_fit#;
+ numeric paren_depth#, asc_depth#, body_depth#;
+ 0.5[body_height#, -paren_depth#] = math_axis#;
+ 0.5[asc_height#, -asc_depth#] = math_axis#;
+ body_depth# := desc_depth#+body_height#-asc_height#;
+ %
+ define_pixels(u, dh, dish, stem_corr, vair_corr);
+ define_whole_blacker_pixels(hair, stem, curve,
+ cap_hair, cap_stem, cap_curve, dtsz, ast_curve, ast_stem);
+ define_whole_vertical_blacker_pixels(vair, slab);% cap_bar...
+ define_whole_vertical_pixels(body_height, asc_height,
+ cap_height, fig_height, x_height, desc_depth,
+ asc_depth, body_depth, paren_depth);
+ define_whole_pixels(letter_fit, appr, Appr,
+ crisp, tiny, fine, ast_size);
+ define_corrected_pixels(o);
+ define_horizontal_corrected_pixels(ho);
+ lowres_fix(stem, curve) 1.2;
+ lowres_fix(cap_stem, cap_curve) 1.2;
+ lowres_fix(hair, cap_hair) 1.2;
+ oo := vround(0.5o#*hppp*o_correction)+eps;
+ dw := (curve#-stem#)*hppp; bold := curve#*hppp+blacker;
+ vair' := vround(vair+vair_corr);
+ %
+ % usual pens.
+ %
+ clear_pen_memory;
+ if fine = 0: fine := 1; fi
+ null := 0;
+ forsuffixes $ = null, crisp, tiny, fine:
+ $.breadth := $;
+ pickup if $ = 0: nullpen else: pencircle scaled $ fi;
+ $ := $-eps; $.nib := savepen; breadth_[$.nib] := $;
+ endfor
+ $ := 0;
+ forever:
+ exitif unknown rth[$].#;
+ rth[$] := ceiling(rth[$].#*hppp);
+ pickup pencircle scaled rth[$];
+ rule.nib[$] := savepen;
+ $ := $+1;
+ endfor
+ %
+ % spreads
+ %
+ for $ = 0 upto 10:
+ if known spread[$].#:
+ spread[$] := 2ceiling(0.5spread[$].#*hppp);
+ fi
+ endfor
+ %
+ % current transform (slant is not taken into account)
+ %
+ currenttransform = identity
+ yscaled aspect_ratio scaled granularity;
+ %
+ % proofing
+ %
+ standard_proofing;
+ use_rule1;
+enddef;
+
+% The following environment enables people to draw a picture
+% almost like drawing a character. The resulting picture is
+% stored in $_picture and then it can be used in at any
+% place later.
+
+def beginpicture(suffix $)(expr w_sharp, h_sharp, d_sharp) =
+ begingroup
+ save picturename;
+ w := hround(w_sharp*hppp); h := vround(h_sharp*hppp);
+ d := vround(d_sharp*hppp); clearxy; clearit; clearpen;
+ string picturename; picturename = str $ &"_picture";
+ enddef;
+
+ def endpicture =
+ expandafter picture scantokens picturename;
+ scantokens picturename = currentpicture;
+ endgroup
+enddef;
+
+vardef use_rule@# =
+ rth := rth@#; rth# := rth@#.#;
+ rule.nib := rule.nib@#;
+ math_axis := vround(math_axis#*hppp-0.5rth)+0.5rth;
+enddef;
+
+def numeric_pickup_ primary q =
+ currentpen := pen_[q];
+ pen_lft := pen_lft_[q]; pen_rt := pen_rt_[q];
+ pen_top := pen_top_[q]; pen_bot := pen_bot_[q];
+ currentpen_path := pen_path_[q];
+ if known breadth_[q]: currentbreadth := breadth_[q]; fi
+enddef;
+
+%def compute_spread(expr normal_spread, big_spread) =
+% spread# := math_spread[normal_spread, big_spread];
+% spread := 2ceiling((spread#)*hppp/2)
+%enddef;
+
+def v_center(expr h_sharp) =
+ .5h_sharp+math_axis#, .5h_sharp-math_axis#
+enddef;
+
+def ensure_centering_of(expr stem) =
+ if hround 0.5(w-hround stem)+0.5hround stem<> 0.5w:
+ change_width; fi
+enddef;
+
+vardef v_adjust(suffix $, $$)(expr middle, height) =
+ top y$-middle = middle-bot y$$ = vround 0.5(height-rth)+0.5rth
+enddef;
+
+def arithmetic_bounds =
+ 12u#+2appr#, math_axis#+6u#, 6u#-math_axis#
+enddef;
+
+def padded expr del_sharp =
+ charht := charht+del_sharp; chardp := chardp+del_sharp
+enddef;
+
+%vardef pos@#(expr b, d) =
+% if known b: if b <= currentbreadth: errmessage "bad pos"; fi fi
+% save d_; pair d_; d_ = dir d;
+% z@#r-z@#l+penoffset d_ of currentpen+penoffset -d_ of currentpen = b*d_;
+% x@# = .5(x@#l+x@#r); y@# = .5(y@#l+y@#r) enddef;
+
+vardef pos@#(expr b, d) =
+ if known b: if b <= currentbreadth: errmessage "bad pos"; fi fi
+ (x@#r-x@#l, y@#r-y@#l) = (b-currentbreadth, 0) rotated d;
+ x@# = .5(x@#l+x@#r); y@# = .5(y@#l+y@#r) enddef;
+
+vardef stroke text t =
+ forsuffixes e = l, r: path_.e := t;endfor
+ if cycle path_.l:
+ errmessage "Beware: `stroke' doesn't work with cycles";
+ fi
+ path_.l -- reverse path_.r -- cycle
+enddef;
+
+% DIAGONALS
+
+def diag_width(expr $, $$) =
+ $/abs sind angle $$
+enddef;
+
+%vardef diag_height(expr $, $$) =
+% $/abs cosd angle $$
+%enddef;
+
+% $ <---> $$$; $$ <---> $$$$. sign = +1 for \, -1 for /.
+
+vardef adjust_slanted_bar(suffix $, $$, $$$, $$$$)(expr thickness, sign) =
+ save a, b;
+ if abs(y$$-y$) = thickness:
+ (a1, a2) = (z$$-z$);
+ if a1 = 0: b = 0;% b should then be infinite.
+ else: b = if sign<0: - fi (a1++a2)*((a1++a2)/2a1);
+ fi
+ else:
+ a = angle(z$$-z$);
+ b = (cosd(a)/sind(a) if sign<0: - else: + fi
+ (((y$$-y$)/(thickness)/sind(a))+-+1))
+ /(((y$$-y$)/(thickness))**2-1)*(y$$-y$);
+ fi
+ z$$$ = (x$-b, y$); z$$$$ = (x$$+b, y$$)
+enddef;
+
+% supplementary points for diagonal strokes
+% as in cm's \#. (see MetaFontbook, p. 200--201)
+% Well, ...
+
+vardef diag_stroke.@#(suffix $, $$, s)(text y_list) =
+ z$.@#--for y_ = y_list:
+ (good.x(((x$.s-x$$.s)/(y$.s-y$$.s))*(y_-y$$r)+x$$.s), y_)
+ +z$.@#-z$.s
+ --endfor z$$.@#
+enddef;
+
+% CIRCLES, ELLIPSES AND RELATED THINGS
+
+primarydef w up_to_right z =
+ w{0, ypart(z-w)}
+ ...(superness[xpart z, xpart w],
+ superness[ypart w, ypart z]){z-w}
+ ...{xpart(z-w), 0}z
+enddef;
+
+let up_to_left = up_to_right;
+let down_to_right = up_to_right;
+let down_to_left = up_to_right;
+
+primarydef w right_to_up z =
+ w{xpart(z-w), 0}
+ ...(superness[xpart w, xpart z],
+ superness[ypart z, ypart w]){z-w}
+ ...{0, ypart(z-w)}z
+enddef;
+
+let right_to_down = right_to_up;
+let left_to_up = right_to_up;
+let left_to_down = right_to_up;
+
+def ellipse_set(suffix $, @, @@, $$) =
+ alpha_ := slope*(x@-x$); beta_ := y$$-y$-slope*(x$$-x$);
+ gamma_ := alpha_/beta_;
+ y@-y$ = .5(beta_-alpha_*gamma_);
+ x@@-x$ = -2gamma_*(x@-x$)/(1+gamma_*gamma_);
+ y@@-y$$ = slope*(x@@-x$$)
+enddef;
+
+def hellipse_set(suffix $, @, @@, $$) =
+ alpha_ := (y@-y$)/slope; beta_ := x$$-x$-(y$$-y$)/slope;
+ gamma_ := alpha_/beta_;
+ x@-x$ = .5(beta_-alpha_*gamma_);
+ y@@-y$ = -2gamma_*(y@-y$)/(1+gamma_*gamma_);
+ x@@-x$$ = (y@@-y$$)/slope
+enddef;
+
+vardef adjust_elliptic_arc(suffix $, $$, $$$) =
+ save a, b;
+ if known (y$$$-y$): a = (1+-+((y$$$-y$)/(y$$-y$)));
+ x$$-x$ = (x$$$-x$)/(1+a); b = (1+-+((x$$$-x$$)/(x$$-x$)));
+ else: b = (1+-+((x$$$-x$$)/(x$$-x$)));
+ y$$$-y$ = (y$$-y$)*b; a = (1+-+((y$$$-y$)/(y$$-y$)));
+ fi
+ y$$$' = y$$; x$$$' = (((1-b)/a)*(b/a))[x$$$, x$$];
+enddef;
+
+def flatcup(expr zi, zii, ziii) =
+ zi..controls (xpart zi, flatness[ypart zi, ypart zii])
+ and (xpart zi, ypart zii)
+ ..zii..controls (xpart ziii, ypart zii)
+ and (xpart ziii, flatness[ypart ziii, ypart zii])..ziii
+enddef;
+
+% DOTS
+
+boolean full_dot; full_dot := true;
+
+def dot(suffix $, $$) =
+ autorounded;
+ if full_dot: filldraw else: draw fi
+ dot_path($, $$); full_dot := true;
+enddef;
+
+def dot_path(suffix $, $$) =
+ (x$, 0.5[y$, y$$]) down_to_right (0.5[x$, x$$], y$) right_to_up
+ (x$$, 0.5[y$, y$$]) up_to_left (0.5[x$, x$$], y$$) left_to_down
+ (x$, 0.5[y$, y$$])...cycle
+enddef;
+
+vardef adjust_dot@#(expr center, diameter, h_fit, v_fit) =
+ if v_fit: save y_min, y_max;
+ bot y_min = vround(ypart center-0.5diameter)-eps;
+ top y_max = vround(ypart center+0.5diameter)+eps;
+ y@#'-ypart center = ypart center-y@#
+ = max(y_max-ypart center, ypart center-y_min);
+ else:
+ bot y@# = vround(ypart center-0.5diameter)-eps;
+ top y@#'-bot y@# = vround diameter+2eps; fi
+ if h_fit: save x_min, x_max;
+ lft x_min = hround(xpart center-0.5diameter)-eps;
+ rt x_max = hround(xpart center+0.5diameter)+eps;
+ x@#'-xpart center = xpart center-x@#
+ = max(x_max-xpart center, xpart center-x_min);
+ else:
+ lft x@# = vround(xpart center-0.5diameter)-eps;
+ rt x@#'-lft x@# = hround(diameter)+2eps; fi
+ labels(@#, @#');
+enddef;
+
+% VERY DESIGN DEPENDENT MACROS
+
+% DAGGERS AND ASTERISKS
+
+vardef dagger_stroke@#(expr height, curve, stem, u_) =
+ save alpha, a, b, c, R;
+ alpha = angle u_-90; R = 0.5(curve-currentbreadth);
+ a = stress*(height-curve+0.5currentbreadth)+R;
+ b = 0.5(stem-currentbreadth);
+ c = (a*R-b*sqrt(a**2+b**2-R**2))/(a**2+b**2);
+ z@#c-z@# = (height-0.5currentbreadth)*u_;
+ z@#c-z@#b = R*u_; z@#d-z@#b = -a*u_; z@#a = (c*(R/a))[z@#b, z@#d];
+ penpos@#(2b, alpha); penpos@#d(2b, alpha);
+ penpos@#a(2R*(1+-+c), alpha); penpos@#b(2R, alpha);
+ penlabels(@#a, @#b, @#c, @#d, @#);
+ z@#r{u_}...z@#a.r{z@#a.r-z@#d.r}...z@#b.r{u_}...
+ (superness[z@#b, z@#b.r]+superness[z@#b, z@#c]-z@#b){z@#c-z@#b.r}
+ ...z@#c{z@#b.l-z@#b.r}...
+ (superness[z@#b, z@#b.l]+superness[z@#b, z@#c]-z@#b){z@#b.l-z@#c}
+ ...z@#b.l{-u_}...z@#a.l{z@#d.l-z@#a.l}...{-u_}z@#l
+enddef;
+
+% ARROWS
+
+numeric arrow_height, arrow_width, arrow_breadth, arrow_stress,
+arrow_tense[], arrow_time, double_arrow_height, double_arrow_width,
+double_arrow_tense, double_arrow_flatness;
+
+boolean arrow_head_fitting;
+arrow_head_fitting := false;
+
+vardef arrow_head@#(expr p, side) =
+ save a, t; numeric a[];
+ a1 = angle direction infinity of p; pos@#a(rth, a1-90);
+ z@#a = point infinity of p
+ if arrow_head_fitting: -0.5currentbreadth*dir a1 fi;
+ t := xpart(p intersectiontimes (halfcircle rotated(a1+90)
+ scaled (2arrow_stress*arrow_height-currentbreadth)
+ shifted z@#a));
+ a2 := angle direction t of p; arrow_time := t;
+ z@# = point t of p; pos@#(rth, a2-90);
+ z@#-z@#c = (1-arrow_stress)*arrow_height*dir a2;
+ z@#c.r-z@#c = z@#c-z@#c.l = 0.5(arrow_width-currentbreadth)*dir(a2-90);
+ z@#b.r-z@#c.r = z@#b.l-z@#c.l = max(arrow_breadth-currentbreadth, 0)*dir a2;
+ z@#b = p intersectionpoint (z@#b.r..z@#b.l);
+ t := xpart(p intersectiontimes (halfcircle rotated(a1+90)
+ scaled (2arrow_tense2[1, arrow_stress]*arrow_height-currentbreadth)
+ shifted z@#a));
+ a3 = angle direction t of p; z@#' = point t of p; pos@#'(rth, a3-90);
+ z@#a' = if arrow_tense1<1:
+ p intersectionpoint (halfcircle rotated(a1+90)
+ scaled(arrow_tense1[length(z@#b-z@#a), 0]*2) shifted z@#a);
+ else: z@#a; fi
+ filldraw
+ if side = right: z@#a.l{-dir a1}...{-dir a2}z@#l
+ else: z@#a...{z@#b.l-z@#a'}z@#b.l--z@#c.l{z@#'l-z@#c.l}...z@#l
+ fi --
+ if side = left: z@#r{dir a2}...z@#a.r{dir a1}
+ else: z@#r...{z@#c.r-z@#'r}z@#c.r--z@#b.r{z@#a'-z@#b.r}...z@#a
+ fi -- cycle;
+ labels(@#a'); penlabels(@#', @#a, @#b, @#c);
+ arrow_head_fitting := false;
+enddef;
+
+vardef double_arrow_head@#(expr head, vect) =
+ save a, b, u_, v_; pair u_, v_;
+ u_ = unitvector vect; v_ = u_ rotated 90;
+ z@# = z@#' = head;
+ z@#-z@#m = double_arrow_height*u_;
+ pos@#'(rth, angle u_-90);
+ pos@#m(rth, angle u_-90);
+ z@#-z@#b.r = z@#m-z@#m.b = 0.5rth*double_arrow_flatness*v_;
+ a = angle(-double_arrow_height, 0.5double_arrow_width);
+ b = (cosd(a)/sind(a)+
+ ((0.5double_arrow_width/rth/sind(a))+-+1))
+ /((0.5double_arrow_width/rth)**2-1)
+ *0.5double_arrow_width;
+ z@#c.l = double_arrow_tense[z@#m.b, z@#b.r-b*u_];
+ z@#m-z@#a.l = 0.5double_arrow_width*v_;
+ b := rth/abs sind(angle(z@#a.l-z@#c.l)-angle(-u_));
+ z@#a.r-z@#a.l = z@#c.r-z@#c.l = b*u_;
+ z@#ab = 0.5[z@#a.r, z@#c.r];
+ penpos@#b(rth, angle(z@#b.r-z@#ab)-90);
+ %
+ save p, t; path p[]; numeric t[];
+ z@#a = 0.5[z@#a.r, z@#a.l];
+ p1 = z@#a{z@#ab-z@#a.r}...{z@#b.r-z@#ab}z@#b;
+ p3 = z@#a.r{z@#ab-z@#a.r}...{z@#b.r-z@#ab}z@#b.r;
+ p5 = if (z@#b.l-z@#) dotprod v_<0:
+ z@#'l+(u_ dotprod (z@#b.l-z@#))*u_-- fi
+ z@#b.l{z@#ab-z@#b.r}...{z@#a.r-z@#ab}z@#a.l;
+ p2 = reverse p1 reflectedabout (z@#, z@#m);
+ p4 = reverse p3 reflectedabout (z@#, z@#m);
+ p6 = reverse p5 reflectedabout (z@#, z@#m);
+ t5 = xpart(p5 intersectiontimes (z@#+eps*v_ .. z@#m+eps*v_));
+ t6 = xpart(p6 intersectiontimes (z@#-eps*v_ .. z@#m-eps*v_));
+ fill p3--z@#+eps*v_--subpath (t5, length p5) of p5--cycle;
+ fill z@#-eps*v_--p4--subpath (0, t6) of p6--cycle;
+ forsuffixes $ = l, , r:
+ z@#r$ = p1 intersectionpoint
+ ((z@#'$..z@#m$) shifted (-0.5spread1*v_));
+ z@#l$ = p2 intersectionpoint
+ ((z@#'$..z@#m$) shifted (0.5spread1*v_));
+ endfor
+ penlabels(@#, @#', @#a, @#b, @#c, @#r, @#l, @#m); labels(@#ab, @#m.b);
+enddef;
+
+% ARM, BEAK and SERIFS (personal taste)
+
+% vardef arm@#(expr beak, beak_jut, breadth, darkness, orientation, x_limit) =
+% save a; a = 90;
+% if orientation = up: y@#a = min(y@#l, y@#r); y@#d = max(y@#l, y@#r);
+% y@#b-y@#d = vround beak; a := -a;
+% else: y@#a = max(y@#l, y@#r); y@#d = min(y@#l, y@#r);
+% y@#b-y@#d = -vround beak; fi
+% if x_limit>x@#: rt x@#b = hround x_limit; x@#b-x@#a = hround beak_jut;
+% else: lft x@#b = hround x_limit; x@#b-x@#a = -hround beak_jut; a := -a; fi
+% z@#c-z@#b = max(0, breadth-currentbreadth)
+% *unitvector(z@#a-z@#b)rotated a;
+% z@#d-z@#c = whatever*(z@#a-z@#b);
+% filldraw z@#c{z@#d-z@#c}...
+% if y@#l = y@#.d: darkness[z@#d, 0.5[z@#c, z@#l]]{z@#l-z@#c}
+% ...z@#l{z@#l-z@#d}--z@#r
+% else: darkness[z@#d, 0.5[z@#c, z@#r]]{z@#r-z@#c}
+% ...z@#r{z@#r-z@#d}--z@#l fi
+% --z@#a--z@#b--cycle;
+% labels(@#a, @#b, @#c, @#d);
+% enddef;
+
+vardef arm@#(expr beak, beak_jut, hair, darkness, direction, limit) =
+ y@#d = y@#r; y@#a = y@#b = y@#r if ypart direction > 0: + else: - fi vround beak;
+ y@#c = y@#l;
+ rt x@#b = hround limit; lft x@#a = hround(limit-hair);
+ x@#b-x@#c = hround beak_jut; z@#d-z@#a = whatever*(z@#c-z@#b);
+ filldraw z@#r{z@#d-z@#r}...darkness[z@#d, 0.5[z@#r, z@#a]]...
+ z@#a{z@#a-z@#d}--z@#b--z@#c--z@#l--cycle;
+ labels(@#a, @#b, @#c, @#d);
+enddef;
+
+vardef serif(suffix $, $$)
+ (expr bracket, left_jut, left_slab, dished_left, left_dish,
+ right_jut, right_slab, dished_right, right_dish) =
+ save a, b; b = cosd angle(z$$-z$);
+ a = max(0.5left_jut, 0.5right_jut, bracket);
+ if y$<y$$: top y$b = bot y$+vround left_slab;
+ top y$g = bot y$+vround right_slab;
+ y$a-y$b = y$h-y$g = bracket;
+ top y$c-bot y$d = left_slab+left_dish;
+ top y$f-bot y$e = right_slab+right_dish;
+ else: bot y$b = top y$-vround left_slab;
+ bot y$g = top y$-vround right_slab;
+ y$a-y$b = y$h-y$g = -bracket;
+ bot y$c-top y$d = -left_slab-left_dish;
+ bot y$f-top y$e = -right_slab-right_dish;
+ fi
+ if dished_left: y$c = y$b; else: y$d = y$; fi
+ if dished_right: y$f = y$g; else: y$e = y$; fi
+ if x$l<x$r: z$a = whatever[z$l, z$$l];
+ z$h = whatever[z$r, z$$r];
+ x$c = x$d = x$l-hround(left_jut-b*abs(y$b-y$));
+ x$e = x$f = x$r+hround(right_jut+b*abs(y$g-y$));
+ x$l-x$b = min(left_jut, a);
+ x$g-x$r = min(right_jut, a);
+ else: z$a = whatever[z$r, z$$r];
+ z$h = whatever[z$l, z$$l];
+ x$c = x$d = x$r-hround(left_jut-b*abs(y$b-y$));
+ x$e = x$f = x$l+hround(right_jut+b*abs(y$g-y$));
+ x$r-x$b = min(left_jut, a);
+ x$g-x$l = min(right_jut, a);
+ fi
+ filldraw z$a{z$-z$$}...z$b{left}...z$c--z$d...z${right}
+ ...z$e--z$f...z$g{left}...{z$$-z$}z$h--cycle;
+ labels($a, $b, $c, $d, $e, $f, $g, $h);
+enddef;
+
+% SIM: drawn once, used many times
+
+def make_sim_picture =
+ if unknown sim_picture:
+ beginpicture(sim, 12u#+2appr#, v_center(spread1#+rth#));
+ pickup tiny.nib;
+ save a, b;
+ a = angle(1, 1.25(h+d)/u);
+ b = angle(1, -(h+d)/4.5u);
+ pos1(hair, a+90); pos9(hair, a+90); pos5(stem, b+90);
+ bot y7l = -d-eps; top y3r = h+eps;
+ y1l = good.y 0.225[y7l, y3r]; y3r-y9r = y1l-y7l;
+ top y3r-bot y3l = top y7r-bot y7l = vround 0.5[hair, stem];
+ lft x1r = Appr-eps; rt x9l = w-Appr+eps;
+ z5 = 0.5[z1, z9];
+ forsuffixes $ = r, l: y2$ = y3$ = y4$; y6$ = y7$ = y8$;
+ z2$-z1$ = whatever*dir a; z8$-z9$ = whatever*dir a;
+ z4$-z5$ = whatever*dir b; z6$-z5$ = whatever*dir b;
+ x3$ = 0.6525[x2$, x4$]; x7$ = 0.6525[x8$, x6$];
+ endfor
+ filldraw stroke z1e..controls 0.66[z1e, z2e] and 0.66[z3e, z2e]
+ ..z3e..controls 0.4[z3e, z4e] and 1[z5e, z4e]% 1 for inflexion point
+ ..z5e..controls 1[z5e, z6e] and 0.4[z7e, z6e]
+ ..z7e..controls 0.66[z7e, z8e] and 0.66[z9e, z8e]..z9e;
+ %penlabels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+ endpicture;
+ fi
+enddef;
+
+% TRIANGLES
+
+% makes an equilateral triangle optionally fully centered.
+
+numeric triangle_foot;
+
+vardef set_triangle@#(expr orientation, a, rth, centered, fit_bounds) =
+ if orientation = left:
+ rt x1@#r = rt x3@#r = if centered:
+ hround(0.5w+0.5a/sqrt3);
+ else: hround triangle_foot; fi
+ x1@#r-x2@#r = hround(0.5a*sqrt(3)-currentbreadth)+eps;
+ y2@#r = good.y 0.5[-d, h];
+ y3@#r-y2@#r = y2@#r-y1@#r = vround(0.5(a-currentbreadth))+eps;
+ elseif orientation = right:
+ lft x1@#r = lft x3@#r = if centered:
+ hround(0.5w-0.5a/sqrt3);
+ else: hround triangle_foot; fi
+ x2@#r-x1@#r = hround(0.5a*sqrt(3)-currentbreadth)+eps;
+ y2@#r = good.y 0.5[-d, h];
+ y2@#r-y3@#r = y1@#r-y2@#r = vround(0.5(a-currentbreadth))+eps;
+ elseif orientation = down:
+ top y1@#r = top y3@#r = if centered:
+ vround(math_axis+0.5a/sqrt3);
+ else: vround triangle_foot; fi
+ y1@#r-y2@#r = hround(0.5a*sqrt(3)-currentbreadth)+eps;
+ x2@#r = good.x 0.5w;
+ x1@#r-x2@#r = x2@#r-x3@#r
+ = hround 0.5min(a-currentbreadth, w-2appr-currentbreadth+2ho)+eps;
+ else:
+ bot y1@#r = bot y3@#r = if centered:
+ vround(math_axis-0.5a/sqrt3);
+ else: vround triangle_foot; fi
+ y2@#r-y1@#r = hround(0.5a*sqrt(3)-currentbreadth)+eps;
+ x2@#r = good.x 0.5w;
+ x3@#r-x2@#r = x2@#r-x1@#r
+ = hround 0.5min(a-currentbreadth, w-2appr-currentbreadth+2ho)+eps;
+ fi
+ z1@#l-z1@#r = (rth-currentbreadth)/sind(60)
+ *(unitvector(z3@#r-z1@#r)+unitvector(z2@#r-z1@#r));
+ z2@#l-z2@#r = (rth-currentbreadth)/sind(60)
+ *(unitvector(z3@#r-z2@#r)+unitvector(z1@#r-z2@#r));
+ z3@#l-z3@#r = (rth-currentbreadth)/sind(60)
+ *(unitvector(z1@#r-z3@#r)+unitvector(z2@#r-z3@#r));
+ penlabels(1@#, 2@#, 3@#);
+enddef;
+
+% It's buggy
+vardef draw_star@#(expr center, n_edges, radius, tense, angle_init, void) =
+ save a, b, theta; theta = 360/n_edges;
+ x@# = good.x xpart center; y@# = good.y ypart center;
+ % external points
+ a = radius-0.5currentbreadth;
+ b = (1-tense)*a*cosd theta/cosd(theta/2);
+ for $ = 1 upto n_edges:
+ z@#[2$-1]l = z@#+round(a*dir(($-1)*theta+angle_init));
+ z@#[2$]l = z@#+round(b*dir(($-0.5)*theta+angle_init));
+ labels(@#[2$-1]l, @#[2$]l);
+ endfor
+ if void:
+ % internal points
+ a := (rth-currentbreadth)/
+ abs sind(angle(z@#[1]l-z@#[2]l)-angle(z@#[1]l-z@#));
+ b := (rth-currentbreadth)/
+ abs sind(angle(z@#[2]l-z@#[1]l)-angle(z@#[2]l-z@#));
+ for $ = 1 upto n_edges:
+ z@#[2$-1]l-z@#[2$-1]r = a*dir(($-1)*theta+angle_init);
+ z@#[2$]l-z@#[2$]r = b*dir(($-0.5)*theta+angle_init);
+ labels(@#[2$-1]r, @#[2$]r);
+ endfor
+ filldraw stroke for $ = 1 upto 2n_edges: z@#[$]e--endfor z@#[1]e;
+ else:
+ filldraw for $ = 1 upto 2n_edges: z@#[$]l--endfor cycle;
+ fi
+enddef;
+
+% ADMINISTRATION
+
+% PROOFING
+
+def horizontal_rules_list =
+ -body_depth, -desc_depth, x_height, cap_height, asc_height, body_height
+enddef;
+
+def makebox(text rule) =
+ for y = -d.o_, 0, h.o_:
+ rule((-xoffset, y), (w-xoffset, y)); endfor
+ for y = horizontal_rules_list:
+ rule((appr-xoffset, y), (w-appr-xoffset, y));
+ endfor
+ for x = -xoffset, appr-xoffset, w-appr-xoffset, w-xoffset:
+ rule((x, -d.o_), (x, h.o_)); endfor
+ for x = appr+u-xoffset step u until w-appr-1.5-xoffset:
+ rule((x, -d.o_), (x, h.o_)); endfor
+ if charic<>0:
+ rule((w-xoffset+charic*hppp, h.o_),
+ (w-xoffset+charic*hppp, .5[h, -d].o_)); fi
+enddef;
+
+def accents_proofing =
+ for $ = 0 upto 19:
+ makelabel("", (0.5w-xoffset, 0.5x_height)
+ +(4u*cosd($*360/20), 0.5x_height*sind($*360/20)));
+ endfor
+enddef;
+
+def diacritics_proofing =
+ if proofing>0: extra_endchar := extra_endchar&"accents_proofing;"; fi
+enddef;
+
+def standard_proofing =
+ if proofing>0: extra_endchar := "additions_to_proof;"; fi
+enddef;
+
+def additions_to_proof =
+ makelabel.lft("baseline", (-xoffset, 0));
+ if h>math_axis: makelabel.lft("math axis", (-xoffset, math_axis)); fi
+enddef;
+
+% `iff' CONSTRUCTION
+
+let semi_ = ;; let colon_ = :; let endchar_ = endchar;
+def iff expr b = if b:let next_ = use_it else:let next_ = lose_it fi; next_ enddef;
+def use_it = let : = restore_colon; enddef;
+def restore_colon = let : = colon_; enddef;
+def lose_it = let endchar = fi;
+let ; = fix_ semi_ if false enddef;
+def fix_ = let ; = semi_; let endchar = endchar_;
+enddef;
+def always_iff = let : = endgroup; killboolean enddef;
+def killboolean text t = use_it enddef;
+
+% Not the fastest solution
+def beginchar(expr c, w_sharp, h_sharp, d_sharp) =
+ iff known c:
+ begingroup
+ charcode := byte c;
+ charwd := w_sharp;
+ charht := h_sharp;
+ chardp := d_sharp;
+ w := hround(charwd*hppp);
+ h := vround(charht*hppp);
+ d := vround(chardp*hppp);
+ charic := 0; clearxy; clearit;
+ clearpen;
+ scantokens extra_beginchar;
+ enddef;
+
+ endinput;
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathbdel.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathbdel.mf
new file mode 100644
index 00000000000..0a178a37f26
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathbdel.mf
@@ -0,0 +1,1456 @@
+% mathematical symbols by Anthony Phan.
+% file: mathbdel.mf (big delimiters)
+% last modification: May 16, 2005.
+% Only known charcodes will be generated.
+
+def horizontal_rules_list =
+ 0.5[-d, h]-math_axis, 0.5[-d, h]-math_axis+x_height,
+ 0.25[-d, h], 0.5[-d, h], 0.75[-d, h] enddef;
+
+% Since I thinck that adjust_fit's strategy is too
+% complex, I just cut actual width in three parts:
+% ``visible'' width, ``internal'' adjustment and
+% finally ``external'' adjustment. Letter_fit# is
+% added automatically (there is no use of appr#'s).
+
+vardef set_width(expr inner_sharp, internal_sharp, external_sharp) =
+ internal_adjustment := hround((internal_sharp+letter_fit#)*hppp);
+ external_adjustment := hround((external_sharp+letter_fit#)*hppp);
+ inner_sharp+internal_sharp+external_sharp+2letter_fit#
+enddef;
+
+% PARENTHESIS (look at cm)
+
+def tmp_program(expr orientation, hair, stem, do_top, do_bot) =
+ pickup fine.nib;
+ pos1(hround hair, 0); pos2(hround stem, 0); pos3(hround hair, 0);
+ if orientation = left:
+ rt x1r = rt x3r = hround(w-internal_adjustment-0.25u+0.5hair);
+ lft x2l = external_adjustment+hround 0.25u;
+ else:
+ lft x1l = lft x3l = hround(internal_adjustment+0.25u-0.5hair);
+ rt x2r = w-external_adjustment-hround 0.25u;
+ fi
+ if do_top and do_bot:
+ top y1 = h; bot y3 = -d; y2 = 0.5[y1, y3];
+ filldraw stroke z1e{3(x2e-x1e), y2-y1}...z2e{down}
+ ...{3(x3e-x2e), y3-y2}z3e;
+ elseif do_top:
+ top y1 = h; y2 = -d-eps;
+ filldraw stroke z1e{3(x2e-x1e), y2-y1}...z2e{down};
+ elseif do_bot:
+ y2 = h+eps; bot y3 = -d;
+ filldraw stroke z2e{down}...{3(x3e-x2e), y3-y2}z3e;
+ else:
+ pos2'(hround stem, 0); x2' = x2;
+ y2 = h+eps; y2' = -d-eps;
+ filldraw stroke z2e..z2'e;
+ fi
+ penlabels(1, 2, 3, 2');
+enddef;
+
+beginchar(paren_left,
+ 5u#+2appr#, body_height#, paren_depth#);
+ "Left parenthesis";
+% italcorr body_height#*slant-0.5u#;
+ pickup fine.nib;
+ pos1(vair, 0); pos2(0.75[hair, stem], 0); pos3(vair, 0);
+ rt x1r = rt x3r = w-appr; lft x2l = hround(x1-4u);
+ top y1 = h; y2 = 0.5[y1, y3] = math_axis;
+ filldraw stroke z1e{3(x2e-x1e), y2-y1}...z2e{down}
+ ...{3(x3e-x2e), y3-y2}z3e;
+ penlabels(1, 2, 3);
+endchar;
+
+beginchar(paren_left_big, %7u#,
+ set_width(5u#, (1-0.25)*u#, (1+1.5)*u#), rth.frac#, 2dh#-rth.frac#);
+ "big left parenthesis";
+% adjust_fit(1.5u#, -.25u#);
+ tmp_program(left, hair, stem, true, true);
+endchar;
+
+beginchar(paren_left_Big, %9u#,
+ set_width(7u#, (1-0.25)*u#, (1+2)*u#), rth.frac#, 3dh#-rth.frac#);
+ "Big left parenthesis";
+% adjust_fit(2u#, -.25u#);
+ tmp_program(left, rth1, .5[stem, bold], true, true);
+endchar;
+
+beginchar(paren_left_bigg, %11u#,
+ set_width(9u#, (1-0.25)*u#, (1+2.5)*u#), rth.frac#, 4dh#-rth.frac#);
+ "bigg left parenthesis";
+% adjust_fit(2.5u#, -.25u#);
+ tmp_program(left, rth1+.2dw, bold, true, true);
+endchar;
+
+beginchar(paren_left_Bigg, %11.5u#,
+ set_width(9.5u#, (1-0.25)*u#, (1+3)*u#), rth.frac#, 5dh#-rth.frac#);
+ "Bigg left parenthesis";
+% adjust_fit(3u#, -.25u#);
+ tmp_program(left, rth1+.4dw, bold+dw, true, true);
+endchar;
+
+beginchar(paren_left_top, %12u#,
+ set_width(10u#, (1-0.25)*u#, (1+4)*u#), rth.frac#, 3dh#-rth.frac#);
+ "left perenthesis' extension top";
+% adjust_fit(4u#, -.25u#); pickup fine.nib;
+ tmp_program(left, rth1+.6dw, bold+2dw, true, false);
+endchar;
+
+beginchar(paren_left_bot, %12u#,
+ set_width(10u#, (1-0.25)*u#, (1+4)*u#), rth.frac#, 3dh#-rth.frac#);
+ "left parenthesis' extension bot";
+% adjust_fit(4u#, -.25u#); pickup fine.nib;
+ tmp_program(left, rth1+.6dw, bold+2dw, false, true);
+endchar;
+
+beginchar(paren_left_mid, %12u#,
+ set_width(10u#, (1-0.25)*u#, (1+4)*u#), 0, dh#);
+ "left parenthesis' extension mid";
+% adjust_fit(4u#, -.25u#); pickup fine.nib;
+ tmp_program(left, rth1+.6dw, bold+2dw, false, false);
+endchar;
+
+beginchar(paren_right,
+ 5u#+2appr#, body_height#, paren_depth#);
+ "Right parenthesis";
+% italcorr math_axis#*slant-0.5u#;
+ pickup fine.nib;
+ pos1(vair, 0); pos2(0.75[hair, stem], 0); pos3(vair, 0);
+ lft x1l = lft x3l = appr; rt x2r = hround(x1+4u);
+ top y1 = h; y2 = 0.5[y1, y3] = math_axis;
+ filldraw stroke z1e{3(x2e-x1e), y2-y1}...z2e{down}
+ ...{3(x3e-x2e), y3-y2}z3e;
+ penlabels(1, 2, 3);
+endchar;
+
+beginchar(paren_right_big, %7u#,
+ set_width(5u#, (1-0.25)*u#, (1+1.5)*u#), rth.frac#, 2dh#-rth.frac#);
+ "big right parenthesis";
+% adjust_fit(-.25u#, 1.5u#);
+ tmp_program(right, hair, stem, true, true);
+endchar;
+
+beginchar(paren_right_Big, %9u#,
+ set_width(7u#, (1-0.25)*u#, (1+2)*u#), rth.frac#, 3dh#-rth.frac#);
+ "Big right parenthesis";
+% adjust_fit(-.25u#, 2u#);
+ tmp_program(right, rth1, .5[stem, bold], true, true);
+endchar;
+
+beginchar(paren_right_bigg, %11u#,
+ set_width(9u#, (1-0.25)*u#, (1+2.5)*u#), rth.frac#, 4dh#-rth.frac#);
+ "bigg right parenthesis";
+% adjust_fit(-.25u#, 2.5u#);
+ tmp_program(right, rth1+.2dw, bold, true, true);
+endchar;
+
+beginchar(paren_right_Bigg, %11.5u#,
+ set_width(9.5u#, (1-0.25)*u#, (1+3)*u#), rth.frac#, 5dh#-rth.frac#);
+ "Bigg right parenthesis";
+% adjust_fit(-.25u#, 3u#);
+ tmp_program(right, rth1+.4dw, bold+dw, true, true);
+endchar;
+
+beginchar(paren_right_top, %12u#,
+ set_width(10u#, (1-0.25)*u#, (1.4)*u#), rth.frac#, 3dh#-rth.frac#);
+ "right parenthesis' extension top";
+% adjust_fit(-.25u#, 4u#); pickup fine.nib;
+ tmp_program(right, rth1+.6dw, bold+2dw, true, false);
+endchar;
+
+beginchar(paren_right_bot, %12u#,
+ set_width(10u#, (1-0.25)*u#, (1+4)*u#), rth.frac#, 3dh#-rth.frac#);
+ "right parenthesis' extension top";
+% adjust_fit(-.25u#, 4u#); pickup fine.nib;
+ tmp_program(right, rth1+.6dw, bold+2dw, false, true);
+endchar;
+
+beginchar(paren_right_mid, %12u#,
+ set_width(10u#, (1-0.25)*u#, (1.4)*u#), 0, dh#);
+ "big right parenthesis' extension mid";
+% adjust_fit(-.25u#, 4u#); pickup fine.nib;
+ tmp_program(right, rth1+.6dw, bold+2dw, false, false);
+endchar;
+
+% BRACKETS
+
+def tmp_program(expr orientation, stem, rth, do_top, do_bot, not_ext) =
+ pickup tiny.nib;
+ pos1(hround stem, 0); pos2(hround stem, 0);
+ pos3(vround rth, 90); pos4(vround rth, 90);
+ pos5(vround rth, 90); pos6(vround rth, 90);
+ if do_top or not_ext: top y1 = h; else: y1 = h+eps; fi
+ if do_bot or not_ext: bot y2 = -d; else: y2 = -d-eps; fi
+ y1 = y3r = y4r; y2 = y5l = y6l;
+ if orientation = left:
+ lft x1l = lft x2l = min(external_adjustment, hround 0.5(w-stem));
+ rt x3r = rt x5l = w-internal_adjustment;
+ x4r = x1r; x6l = x2r;
+ else:
+ rt x1r = rt x2r = max(w-external_adjustment, hround 0.5(w+stem));
+ lft x4r = lft x6l = internal_adjustment;
+ x3r = x1l; x5l = x2l;
+ fi
+ filldraw stroke z1e--z2e;
+ if do_top: filldraw stroke z3e--z4e; fi
+ if do_bot: filldraw stroke z5e--z6e; fi
+ penlabels(1, 2, 3, 4, 5, 6);
+enddef;
+
+% HALF BRACKETS (true heights or depths are to be discussed)
+
+% okay
+beginchar(bracket_upper_left,
+ set_width(4u#, 0.2u#, 2u#), body_height#, paren_depth#);
+ "Upper left bracket";
+ a := d; d := -vround 0.75[-d, h];
+ tmp_program(left, 0[0.95stem, 0.95cap_stem],
+ rth0, true, false, true);
+ d := a;
+endchar;
+
+% okay
+beginchar(bracket_lower_left,
+ set_width(4u#, 0.2u#, 2u#), body_height#, paren_depth#);
+ "Lower left bracket";
+ a := h; h := vround 0.25[-d, h];
+ tmp_program(left, 0[0.95stem, 0.95cap_stem],
+ rth0, false, true, true);
+ h := a;
+endchar;
+
+% okay
+beginchar(bracket_upper_right,
+ set_width(4u#, 0.2u#, 2u#), body_height#, paren_depth#);
+ "Upper right bracket";
+ a := d; d := -vround 0.75[-d, h];
+ tmp_program(right, 0[0.95stem, 0.95cap_stem],
+ rth0, true, false, true);
+ d := a;
+endchar;
+
+% okay
+beginchar(bracket_lower_right,
+ set_width(4u#, 0.2u#, 2u#), body_height#, paren_depth#);
+ "Lower right bracket";
+ a := h; h := vround 0.25[-d, h];
+ tmp_program(right, 0[0.95stem, 0.95cap_stem],
+ rth0, false, true, true);
+ h := a;
+endchar;
+
+% okay
+beginchar(bracket_upper_lower_left,
+ set_width(4u#, 0.2u#, 2u#), body_height#, paren_depth#);
+ "Upper lower left bracket";
+ a := d; d := -vround 0.75[-d, h];
+ tmp_program(left, 0[0.95stem, 0.95cap_stem],
+ rth0, true, false, true);
+ d := a;
+ clearxy;
+ a := h; h := vround 0.25[-d, h];
+ tmp_program(left, 0[0.95stem, 0.95cap_stem],
+ rth0, false, true, true);
+ h := a;
+endchar;
+
+% okay
+beginchar(bracket_upper_lower_right,
+ set_width(4u#, 0.2u#, 2u#), body_height#, paren_depth#);
+ "Upper lower right bracket";
+ a := d; d := -vround 0.75[-d, h];
+ tmp_program(right, 0[0.95stem, 0.95cap_stem],
+ rth0, true, false, true);
+ d := a;
+ clearxy;
+ a := h; h := vround 0.25[-d, h];
+ tmp_program(right, 0[0.95stem, 0.95cap_stem],
+ rth0, false, true, true);
+ h := a;
+endchar;
+
+% okay
+beginchar(bracket_left,
+ set_width(4u#, 0.2u#, 2u#), body_height#, paren_depth#);
+ "Left bracket";
+ tmp_program(left, 0[0.95stem, 0.95cap_stem],
+ rth0, true, true, true);
+endchar;
+
+beginchar(bracket_left_big,
+ set_width(4.5u#, 0.4u#, 2.5u#), rth.frac#, 2dh#-rth.frac#);
+ "big left bracket";
+ tmp_program(left, 0.125[0.95stem, 0.95cap_stem],
+ 0.125[rth0, rth1], true, true, true);
+endchar;
+
+beginchar(bracket_left_Big,
+ set_width(5u#, 0.6u#, 3u#), rth.frac#, 3dh#-rth.frac#);
+ "Big left bracket";
+ tmp_program(left, 0.25[0.95stem, 0.95cap_stem],
+ 0.25[rth0, rth1], true, true, true);
+endchar;
+
+beginchar(bracket_left_bigg,
+ set_width(5.5u#, 0.8u#, 3.5u#), rth.frac#, 4dh#-rth.frac#);
+ "bigg left bracket";
+ tmp_program(left, 0.5[0.95stem, 0.95cap_stem],
+ 0.5[rth0, rth1], true, true, true);
+endchar;
+
+beginchar(bracket_left_Bigg,
+ set_width(6u#, 1.00u#, 4u#), rth.frac#, 5dh#-rth.frac#);
+ "Bigg left bracket";
+ tmp_program(left, 0.75[0.95stem, 0.95cap_stem],
+ 0.75[rth0, rth1], true, true, true);
+endchar;
+
+beginchar(bracket_left_top,
+ set_width(7u#, 1.5u#, 5u#), rth.frac#, 3dh#-rth.frac#);
+ "left bracket's extension top";
+ tmp_program(left, 0.95cap_stem, rth1, true, false, false);
+endchar;
+
+beginchar(bracket_left_bot,
+ set_width(7u#, 1.5u#, 5u#), rth.frac#, 3dh#-rth.frac#);
+ "left bracket's extension bottom";
+ tmp_program(left, 0.95cap_stem, rth1, false, true, false);
+endchar;
+
+beginchar(bracket_left_mid,
+ set_width(7u#, 1.5u#, 5u#), 0, dh#);
+ "left bracket's extension module";
+ tmp_program(left, 0.95cap_stem, rth1, false, false, false);
+endchar;
+
+% okay
+beginchar(bracket_right,
+ set_width(4u#, 0.2u#, 2u#), body_height#, paren_depth#);
+ "Right bracket";
+ tmp_program(right, 0[0.95stem, 0.95cap_stem],
+ rth0, true, true, true);
+endchar;
+
+beginchar(bracket_right_big,
+ set_width(4.5u#, 0.4u#, 2.5u#), rth.frac#, 2dh#-rth.frac#);
+ "big right bracket";
+ tmp_program(right, 0.125[0.95stem, 0.95cap_stem],
+ 0.125[rth0, rth1], true, true, true);
+endchar;
+
+beginchar(bracket_right_Big,
+ set_width(5u#, 0.6u#, 3u#), rth.frac#, 3dh#-rth.frac#);
+ "Big right bracket";
+ tmp_program(right, 0.25[0.95stem, 0.95cap_stem],
+ 0.25[rth0, rth1], true, true, true);
+endchar;
+
+beginchar(bracket_right_bigg,
+ set_width(5.5u#, 0.80u#, 3.5u#), rth.frac#, 4dh#-rth.frac#);
+ "bigg right bracket";
+ tmp_program(right, 0.5[0.95stem, 0.95cap_stem],
+ 0.5[rth0, rth1], true, true, true);
+endchar;
+
+beginchar(bracket_right_Bigg,
+ set_width(6u#, 1.00u#, 4u#), rth.frac#, 5dh#-rth.frac#);
+ "Bigg right bracket";
+ tmp_program(right, 0.75[0.95stem, 0.95cap_stem],
+ 0.75[rth0, rth1], true, true, true);
+endchar;
+
+beginchar(bracket_right_top,
+ set_width(7u#, 1.5u#, 5u#), rth.frac#, 3dh#-rth.frac#);
+ "right bracket's extension top";
+ tmp_program(right, 0.95cap_stem, rth1, true, false, false);
+endchar;
+
+beginchar(bracket_right_bot,
+ set_width(7u#, 1.5u#, 5u#), rth.frac#, 3dh#-rth.frac#);
+ "right bracket's extension bottom";
+ tmp_program(right, 0.95cap_stem, rth1, false, true, false);
+endchar;
+
+beginchar(bracket_right_mid,
+ set_width(7u#, 1.5u#, 5u#), 0, dh#);
+ "right bracket's extension module";
+ tmp_program(right, 0.95cap_stem, rth1, false, false, false);
+endchar;
+
+% okay
+beginchar(ceiling_left,
+ set_width(4u#, 0.2u#, 2u#), body_height#, paren_depth#);
+ "Left ceiling";
+ tmp_program(left, 0[0.95stem, 0.95cap_stem],
+ rth0, true, false, true);
+endchar;
+
+beginchar(ceiling_left_big,
+ set_width(4.5u#, 0.4u#, 2.5u#), rth.frac#, 2dh#-rth.frac#);
+ "big left ceiling";
+ tmp_program(left, 0.125[0.95stem, 0.95cap_stem],
+ 0.125[rth0, rth1], true, false, true);
+endchar;
+
+beginchar(ceiling_left_Big,
+ set_width(5u#, 0.6u#, 3u#), rth.frac#, 3dh#-rth.frac#);
+ "Big left ceiling";
+ tmp_program(left, 0.25[0.95stem, 0.95cap_stem],
+ 0.25[rth0, rth1], true, false, true);
+endchar;
+
+beginchar(ceiling_left_bigg,
+ set_width(5.5u#, 0.8u#, 3.5u#), rth.frac#, 4dh#-rth.frac#);
+ "bigg left ceiling";
+ tmp_program(left, 0.5[0.95stem, 0.95cap_stem],
+ 0.5[rth0, rth1], true, false, true);
+endchar;
+
+beginchar(ceiling_left_Bigg,
+ set_width(6u#, 1.00u#, 4u#), rth.frac#, 5dh#-rth.frac#);
+ "Bigg left ceiling";
+ tmp_program(left, 0.75[0.95stem, 0.95cap_stem],
+ 0.75[rth0, rth1], true, false, true);
+endchar;
+
+% okay
+beginchar(ceiling_right,
+ set_width(4u#, 0.2u#, 2u#), body_height#, paren_depth#);
+ "Right ceiling";
+ tmp_program(right, 0[0.95stem, 0.95cap_stem], rth0, true, false, true);
+endchar;
+
+beginchar(ceiling_right_big,
+ set_width(4.5u#, 0.4u#, 2.5u#), rth.frac#, 2dh#-rth.frac#);
+ "big right ceiling";
+ tmp_program(right, 0.125[0.95stem, 0.95cap_stem],
+ 0.125[rth0, rth1], true, false, true);
+endchar;
+
+beginchar(ceiling_right_Big,
+ set_width(5u#, 0.6u#, 3u#), rth.frac#, 3dh#-rth.frac#);
+ "Big right ceiling";
+ tmp_program(right, 0.25[0.95stem, 0.95cap_stem],
+ 0.25[rth0, rth1], true, false, true);
+endchar;
+
+beginchar(ceiling_right_bigg,
+ set_width(5.5u#, 0.80u#, 3.5u#), rth.frac#, 4dh#-rth.frac#);
+ "bigg right ceiling";
+ tmp_program(right, 0.5[0.95stem, 0.95cap_stem],
+ 0.5[rth0, rth1], true, false, true);
+endchar;
+
+beginchar(ceiling_right_Bigg,
+ set_width(6u#, 1.00u#, 4u#), rth.frac#, 5dh#-rth.frac#);
+ "Bigg right ceiling";
+ tmp_program(right, 0.75[0.95stem, 0.95cap_stem],
+ 0.75[rth0, rth1], true, false, true);
+endchar;
+
+% okay
+beginchar(floor_left,
+ set_width(4u#, 0.2u#, 2u#), body_height#, paren_depth#);
+ "Left floor";
+ tmp_program(left, 0[0.95stem, 0.95cap_stem],
+ rth0, false, true, true);
+endchar;
+
+beginchar(floor_left_big,
+ set_width(4.5u#, 0.4u#, 2.5u#), rth.frac#, 2dh#-rth.frac#);
+ "big left floor";
+ tmp_program(left, 0.125[0.95stem, 0.95cap_stem],
+ 0.125[rth0, rth1], false, true, true);
+endchar;
+
+beginchar(floor_left_Big,
+ set_width(5u#, 0.6u#, 3u#), rth.frac#, 3dh#-rth.frac#);
+ "Big left floor";
+ tmp_program(left, 0.25[0.95stem, 0.95cap_stem],
+ 0.25[rth0, rth1], false, true, true);
+endchar;
+
+beginchar(floor_left_bigg,
+ set_width(5.5u#, 0.8u#, 3.5u#), rth.frac#, 4dh#-rth.frac#);
+ "bigg left floor";
+ tmp_program(left, 0.5[0.95stem, 0.95cap_stem],
+ 0.5[rth0, rth1], false, true, true);
+endchar;
+
+beginchar(floor_left_Bigg,
+ set_width(6u#, 1.00u#, 4u#), rth.frac#, 5dh#-rth.frac#);
+ "Bigg left floor";
+ tmp_program(left, 0.75[0.95stem, 0.95cap_stem],
+ 0.75[rth0, rth1], false, true, true);
+endchar;
+
+% okay
+beginchar(floor_right,
+ set_width(4u#, 0.2u#, 2u#), body_height#, paren_depth#);
+ "Right floor";
+ tmp_program(right, 0[0.95stem, 0.95cap_stem],
+ rth0, false, true, true);
+endchar;
+
+beginchar(floor_right_big,
+ set_width(4.5u#, 0.4u#, 2.5u#), rth.frac#, 2dh#-rth.frac#);
+ "big right floor";
+ tmp_program(right, 0.125[0.95stem, 0.95cap_stem],
+ 0.125[rth0, rth1], false, true, true);
+endchar;
+
+beginchar(floor_right_Big,
+ set_width(5u#, 0.6u#, 3u#), rth.frac#, 3dh#-rth.frac#);
+ "Big right floor";
+ tmp_program(right, 0.25[0.95stem, 0.95cap_stem],
+ 0.25[rth0, rth1], false, true, true);
+endchar;
+
+beginchar(floor_right_bigg,
+ set_width(5.5u#, 0.80u#, 3.5u#), rth.frac#, 4dh#-rth.frac#);
+ "bigg right floor";
+ tmp_program(right, 0.5[0.95stem, 0.95cap_stem],
+ 0.5[rth0, rth1], false, true, true);
+endchar;
+
+beginchar(floor_right_Bigg,
+ set_width(6u#, 1.00u#, 4u#), rth.frac#, 5dh#-rth.frac#);
+ "Bigg right floor";
+ tmp_program(right, 0.75[0.95stem, 0.95cap_stem],
+ 0.75[rth0, rth1], false, true, true);
+endchar;
+
+% BRACES
+
+def tmp_program(expr orientation, stem, hair, factor, superness) =
+ pickup fine.nib;
+ if orientation = left:
+ rt x5l = w-internal_adjustment;
+ lft x1 = external_adjustment;
+ else:
+ lft x5l = internal_adjustment;
+ rt x1 = w-external_adjustment;
+ fi
+ x3 = 0.5[x1, x5l];
+ y1+0.5hair = vround(0.5[-d, h]+0.5hair); pos1(hround hair, 90);
+ top y5r = h+eps; y3 = 0.5[y1l, y5r]; y2 = y2l = y1l; y1r = y2r;
+ x2 = factor[x3, x5l]; a := 0.5[angle(z3-z2), 90]; pos5(hair, a);
+ pos3(stem, angle(z3-z2) if orientation = left: + else: - fi 90);
+ forsuffixes $ = r, l:
+ z2$-z3$ = whatever*(z2-z3);
+ z4$-z3$ = whatever*(z2-z3);
+ z4$-z5$ = whatever*dir(a+90);
+ forsuffixes @ = 1, 2, 3, 4, 5:
+ x@'.$ = x@.$; y@'.$-y1 = y1-y@.$;
+ endfor
+ endfor
+ autorounded;
+ filldraw stroke z1e{x5e-x1e, 0}...
+ (z2e+(1-superness)*(z1e-z2e)+(1-superness)*(z3e-z2e)){z3e-z1e}
+ ...z3e{z3e-z2e}...
+ (z4e+(1-superness)*(z3e-z4e)+(1-superness)*(z5e-z4e)){z5e-z3e}
+ ...z5e{z5e-z4e};
+ filldraw stroke z1'e{x5'e-x1'e, 0}...
+ (z2'e+(1-superness)*(z1'e-z2'e)+(1-superness)*(z3'e-z2'e)){z3'e-z1'e}
+ ...z3'e{z3'e-z2'e}...
+ (z4'e+(1-superness)*(z3'e-z4'e)+(1-superness)*(z5'e-z4'e)){z5'e-z3'e}
+ ...z5'e{z5'e-z4'e};
+% filldraw stroke z1e{x5e-x1e, 0}..
+% controls 0.5[z1e, z2e] and z2e ..z3e..
+% controls z4e and 0.5[z5e, z4e] ..z5e;
+% filldraw stroke z1'e{x5'e-x1'e, 0}..
+% controls 0.5[z1'e, z2'e] and z2'e ..z3'e..
+% controls z4'e and 0.5[z5'e, z4'e] ..z5'e;
+ penlabels(1, 2, 3, 4, 5, 1', 2', 3', 4', 5');
+enddef;
+
+beginchar(brace_left,
+ set_width(5u#, 1.5u#, 1.5u#), body_height#, paren_depth#);
+ "left brace";
+ tmp_program(left, 0[stem, cap_stem],
+ 0[hair, rth1], 0.5, superness);
+endchar;
+
+beginchar(brace_left_big,
+ set_width(6u#, 1.75*u#, 1.75*u#), rth.frac#, 2dh#-rth.frac#);
+ "big left brace";
+ tmp_program(left, 0.125[stem, cap_stem],
+ 0.125[hair, rth1], 0.5, superness);
+endchar;
+
+beginchar(brace_left_Big,
+ set_width(7u#, 2*u#, 2*u#), rth.frac#, 3dh#-rth.frac#);
+ "Big left brace";
+ tmp_program(left, 0.25[stem, cap_stem],
+ 0.25[hair, rth1], 0.5, superness);
+endchar;
+
+beginchar(brace_left_bigg,
+ set_width(8u#, 2.25*u#, 2.25*u#), rth.frac#, 4dh#-rth.frac#);
+ "bigg left brace";
+ tmp_program(left, 0.5[stem, cap_stem],
+ 0.5[hair, rth1], 0.5, superness);
+endchar;
+
+beginchar(brace_left_Bigg,
+ set_width(9u#, 2.5*u#, 2.5*u#), rth.frac#, 5dh#-rth.frac#);
+ "Bigg left brace";
+ tmp_program(left, 0.75[stem, cap_stem],
+ 0.75[hair, rth1], 0.5, superness);
+endchar;
+
+beginchar(brace_left_top,
+ set_width(10u#, 3*u#, 3*u#), 0, 1.5dh#);
+ "left brace's extension top";
+ a := cap_stem;
+ pickup fine.nib;
+ top y1l = h; top y1l-y2 = 0.5(h+d); y3 = -d-eps;
+ rt x1 = w-internal_adjustment;
+ x2 = x3 = hround(0.5[external_adjustment, w-internal_adjustment]-0.5a)+0.5a;
+ pos1(rth1, -90); pos2(a, 0); pos3(a, 0);
+ filldraw stroke z1e left_to_down z2e..z3e;
+ penlabels(1, 2, 3);
+endchar;
+
+beginchar(brace_left_bot,
+ set_width(10u#, 3*u#, 3*u#), 0, 1.5dh#);
+ "left brace's extension bot";
+ a := cap_stem;
+ pickup fine.nib;
+ y1 = h+eps; y2-bot y3l = 0.5(h+d); bot y3l = -d;
+ rt x3 = w-internal_adjustment;
+ x1 = x2 = hround(0.5[external_adjustment, w-internal_adjustment]-0.5a)+0.5a;
+ pos1(a, 0); pos2(a, 0); pos3(rth1, 90);
+ filldraw stroke z1e..z2e down_to_right z3e;
+ penlabels(1, 2, 3);
+endchar;
+
+beginchar(brace_left_mid,
+ set_width(10u#, 3*u#, 3*u#), 0, 3dh#);
+ "left brace's extension mid";
+ a := cap_stem;
+ pickup fine.nib;
+ y1 = h+eps;
+ y3+0.5rth1 = vround(0.5[-d, h]+0.5rth1);
+ y2-bot y3r = top y3l-y4 = 0.25(h+d); y5 = -d-eps;
+ x1 = x2 = x4 = x5 = hround(0.5[external_adjustment, w-internal_adjustment]-0.5a)+0.5a;
+ lft x3 = external_adjustment;
+ pos1(a, 0); pos2(a, 0); pos3(rth1, -90); pos4(a, 180); pos5(a, 180);
+ filldraw stroke z1e..z2e down_to_left z3e;
+ filldraw stroke z3e right_to_down z4e..z5e;
+ penlabels(1, 2, 3, 4, 5);
+endchar;
+
+beginchar(brace_left_mod,
+ set_width(10u#, 3*u#, 3*u#), 0, 0.5dh#);
+ "left brace's extension module";
+ a := cap_stem;
+ pickup fine.nib; y1 = h+eps; y2 = -d-eps;
+ x1 = x2 = hround(0.5[external_adjustment, w-internal_adjustment]-0.5a)+0.5a;
+ pos1(a, 0); pos2(a, 0); filldraw stroke z1e..z2e; penlabels(1, 2);
+endchar;
+
+beginchar(brace_right,
+ set_width(5u#, 1.5u#, 1.5u#), body_height#, paren_depth#);
+ "Right brace";
+ internal_adjustment := appr+hround 0.5u;
+ external_adjustment := appr+hround 0.5u;
+ tmp_program(right, 0[stem, cap_stem],
+ 0[hair, rth1], 0.5, superness);
+endchar;
+
+beginchar(brace_right_big,
+ set_width(6u#, 1.75*u#, 1.75*u#), rth.frac#, 2dh#-rth.frac#);
+ "big right brace";
+ tmp_program(right, 0.125[stem, cap_stem],
+ 0.125[hair, rth1], 0.5, superness);
+endchar;
+
+beginchar(brace_right_Big,
+ set_width(7u#, 2*u#, 2*u#), rth.frac#, 3dh#-rth.frac#);
+ "Big right brace";
+ tmp_program(right, 0.25[stem, cap_stem],
+ 0.25[hair, rth1], 0.5, superness);
+endchar;
+
+beginchar(brace_right_bigg,
+ set_width(8u#, 2.25*u#, 2.25*u#), rth.frac#, 4dh#-rth.frac#);
+ "bigg right brace";
+ tmp_program(right, 0.5[stem, cap_stem],
+ 0.5[hair, rth1], 0.5, superness);
+endchar;
+
+beginchar(brace_right_Bigg,
+ set_width(9u#, 2.5*u#, 2.5*u#), rth.frac#, 5dh#-rth.frac#);
+ "Bigg right brace";
+ tmp_program(right, 0.75[stem, cap_stem],
+ 0.75[hair, rth1], 0.5, superness);
+endchar;
+
+beginchar(brace_right_top,
+ set_width(10u#, 3*u#, 3*u#), 0, 1.5dh#);
+ "right brace's extension top";
+ a := cap_stem;
+ pickup fine.nib;
+ top y1r = h; top y1r-y2 = 0.5(h+d); y3 = -d-eps;
+ lft x1 = internal_adjustment;
+ x2 = x3 = hround(0.5[internal_adjustment, w-external_adjustment]-0.5a)+0.5a;
+ pos1(rth1, 90); pos2(a, 0); pos3(a, 0);
+ filldraw stroke z1e right_to_down z2e..z3e;
+ penlabels(1, 2, 3);
+endchar;
+
+beginchar(brace_right_bot,
+ set_width(10u#, 3*u#, 3*u#), 0, 1.5dh#);
+ "right brace's extension bot";
+ a := cap_stem;
+ pickup fine.nib;
+ y1 = h+eps; y2-bot y3r = 0.5(h+d); bot y3r = -d;
+ lft x3 = internal_adjustment;
+ x1 = x2 = hround(0.5[internal_adjustment, w-external_adjustment]-0.5a)+0.5a;
+ pos1(a, 0); pos2(a, 0); pos3(rth1, -90);
+ filldraw stroke z1e..z2e down_to_left z3e;
+ penlabels(1, 2, 3);
+endchar;
+
+beginchar(brace_right_mid,
+ set_width(10u#, 3*u#, 3*u#), 0, 3dh#);
+ "right brace's extension mid";
+ a := cap_stem;
+ pickup fine.nib;
+ y1 = h+eps;
+ y3+0.5rth1 = vround(0.5[-d, h]+0.5rth1);
+ y2-bot y3l = top y3r-y4 = 0.25(h+d);
+ y5 = -d-eps;
+ x1 = x2 = x4 = x5 = hround(0.5[internal_adjustment, w-external_adjustment]-0.5a)+0.5a;
+ rt x3 = w-external_adjustment;
+ pos1(a, 0); pos2(a, 0); pos3(rth1, 90); pos4(a, 180); pos5(a, 180);
+ filldraw stroke z1e..z2e down_to_right z3e;
+ filldraw stroke z3e right_to_down z4e..z5e;
+ penlabels(1, 2, 3, 4, 5);
+endchar;
+
+beginchar(brace_right_mod,
+ set_width(10u#, 3*u#, 3*u#), 0, 0.5dh#);
+ "right brace's extension module";
+ a := cap_stem;
+ pickup fine.nib; y1 = h+eps; y2 = -d-eps;
+ x1 = x2 = hround(0.5[internal_adjustment, w-external_adjustment]-0.5a)+0.5a;
+ pos1(a, 0); pos2(a, 0); filldraw stroke z1e..z2e; penlabels(1, 2);
+endchar;
+
+% ANGLES
+
+def tmp_program(expr orientation, rth) =
+ pickup tiny.nib;
+ top y1r = h+eps; y2l = good.y 0.5[-d, h]; y1r-y2l = y2l-y3r;
+ if orientation = left:
+ rt x1r = rt x3r = w-internal_adjustment+eps;
+ lft x2l = external_adjustment-eps;
+ adjust_slanted_bar(1r, 2l, 1l, 2a)(max(rth-tiny, 1), -1);
+ adjust_slanted_bar(3r, 2l, 3l, 2b)(max(rth-tiny, 1), 1);
+ else:
+ lft x1r = lft x3r = internal_adjustment-eps;
+ rt x2l = w-external_adjustment+eps;
+ adjust_slanted_bar(1r, 2l, 1l, 2a)(max(rth-tiny, 1), 1);
+ adjust_slanted_bar(3r, 2l, 3l, 2b)(max(rth-tiny, 1), -1);
+ fi
+ z2r = whatever[z1r, z2a]; z2r = whatever[z3r, z2b];
+ filldraw stroke z1e--z2e--z3e;
+ penlabels(1, 2, 3); labels(2a, 2b);
+enddef;
+
+% almost okay
+beginchar(angle_left,
+ set_width(6.5u#, 0.5u#, 0.5u#), body_height#, paren_depth#);
+ "Left angle";
+ tmp_program(left, rth0);
+endchar;
+
+beginchar(angle_left_big,
+ set_width(8u#, 0.75u#, 0.75u#), rth.frac#, 2dh#-rth.frac#);
+ "big left angle";
+ tmp_program(left, 0.125[rth0, rth2]);
+endchar;
+
+beginchar(angle_left_Big,
+ set_width(10u#, 1.0u#, 1.0u#), rth.frac#, 3dh#-rth.frac#);
+ "Big left angle";
+ tmp_program(left, 0.25[rth0, rth2]);
+endchar;
+
+beginchar(angle_left_bigg,
+ set_width(12u#, 1.25u#, 1.25u#), rth.frac#, 4dh#-rth.frac#);
+ "bigg left angle";
+ tmp_program(left, 0.5[rth0, rth2]);
+endchar;
+
+beginchar(angle_left_Bigg,
+ set_width(14u#, 1.5u#, 1.5u#), rth.frac#, 5dh#-rth.frac#);
+ "Bigg left angle";
+ tmp_program(left, 0.75[rth0, rth2]);
+endchar;
+
+% almost okay
+beginchar(angle_right,
+ set_width(6.5u#, 0.5u#, 0.5u#), body_height#, paren_depth#);
+ "Right angle";
+ tmp_program(right, rth0);
+endchar;
+
+beginchar(angle_right_big,
+ set_width(8u#, 0.75u#, 0.75u#), rth.frac#, 2dh#-rth.frac#);
+ "big right angle";
+ tmp_program(right, 0.125[rth0, rth2]);
+endchar;
+
+beginchar(angle_right_Big,
+ set_width(10u#, 1.0u#, 1.0u#), rth.frac#, 3dh#-rth.frac#);
+ "Big right angle";
+ tmp_program(right, 0.25[rth0, rth2]);
+endchar;
+
+beginchar(angle_right_bigg,
+ set_width(12u#, 1.25u#, 1.25u#), rth.frac#, 4dh#-rth.frac#);
+ "bigg right angle";
+ tmp_program(right, 0.5[rth0, rth2]);
+endchar;
+
+beginchar(angle_right_Bigg,
+ set_width(14u#, 1.5u#, 1.5u#), rth.frac#, 5dh#-rth.frac#);
+ "Bigg right angle";
+ tmp_program(right, 0.75[rth0, rth2]);
+endchar;
+
+% SLASHES
+
+vardef tmp_program(expr orientation, thickness, slash_slant) =
+ pickup tiny.nib;
+ top y1 = h; y1 = y1l = y1r; bot y2 = -d; y2 = y2l = y2r;
+ 0.5[x1, x2] = 0.5w;
+ x1-x2 = if orientation = left: - fi slash_slant*(y1-y2);
+ x1r-x1l = x2r-x2l = diag_width(thickness-tiny, z1-z2);
+ 0.5[x1l, x1r] = x1; 0.5[x2l, x2r] = x2;
+ filldraw stroke z1e..z2e;
+ penlabels(1, 2);
+enddef;
+
+beginchar(backslash,
+ set_width((body_height#+paren_depth#)*0.375
+ +(0[rth0#, rth2#]-tiny#)*(1++0.375)+tiny#,
+ 0.2u#, 0.2u#),
+ body_height#, paren_depth#);
+ "backslash";
+ tmp_program(left, 0[rth0, rth2], 0.375);
+endchar;
+
+beginchar(backslash_thick,
+ set_width((body_height#+paren_depth#)*0.375
+ +(0.95stem#-tiny#)*(1++0.375)+tiny#,
+ 0.2u#, 0.2u#),
+ body_height#, paren_depth#);
+ "Thick backslash";
+ tmp_program(left, 0.95stem, 0.375);
+endchar;
+
+beginchar(backslash_big,
+ set_width(2dh#*0.375
+ +(0.125[rth0#, rth2#]-tiny#)*(1++0.375)+tiny#,
+ 0.4u#, 0.4u#),
+ rth.frac#, 2dh#-rth.frac#);
+ "big backslash";
+ tmp_program(left, 0.125[rth0, rth2], 0.375);
+endchar;
+
+beginchar(backslash_Big,
+ set_width(3dh#*0.375
+ +(0.25[rth0#, rth2#]-tiny#)*(1++0.375)+tiny#,
+ 0.7u#, 0.7u#),
+ rth.frac#, 3dh#-rth.frac#);
+ "Big backslash";
+ tmp_program(left, 0.25[rth0, rth2], 0.375);
+endchar;
+
+beginchar(backslash_bigg,
+ set_width(4dh#*0.375
+ +(0.5[rth0#, rth2#]-tiny#)*(1++0.375)+tiny#,
+ 1.0u#, 1.0u#),
+ rth.frac#, 4dh#-rth.frac#);
+ "bigg backslash";
+ tmp_program(left, 0.5[rth0, rth2], 0.375);
+endchar;
+
+beginchar(backslash_Bigg,
+ set_width(5dh#*0.375
+ +(0.75[rth0#, rth2#]-tiny#)*(1++0.375)+tiny#,
+ 1.2u#, 1.2u#),
+ rth.frac#, 5dh#-rth.frac#);
+ "Bigg backslash";
+ tmp_program(left, 0.75[rth0, rth2], 0.375);
+endchar;
+
+beginchar(slash,
+ set_width((body_height#+paren_depth#)*0.375
+ +(0[rth0#, rth2#]-tiny#)*(1++0.375)+tiny#,
+ 0.2u#, 0.2u#),
+ body_height#, paren_depth#);
+ "slash";
+ tmp_program(right, 0[rth0, rth2], 0.375);
+endchar;
+
+beginchar(slash_thick,
+ set_width((body_height#+paren_depth#)*0.375
+ +(0.95stem#-tiny#)*(1++0.375)+tiny#,
+ 0.2u#, 0.2u#),
+ body_height#, paren_depth#);
+ "Thick slash";
+ tmp_program(right, 0.95stem, 0.375);
+endchar;
+
+beginchar(slash_big,
+ set_width(2dh#*0.375
+ +(0.125[rth0#, rth2#]-tiny#)*(1++0.375)+tiny#,
+ 0.4u#, 0.4u#),
+ rth.frac#, 2dh#-rth.frac#);
+ "big slash";
+ tmp_program(right, 0.125[rth0, rth2], 0.375);
+endchar;
+
+beginchar(slash_Big,
+ set_width(3dh#*0.375
+ +(0.25[rth0#, rth2#]-tiny#)*(1++0.375)+tiny#,
+ 0.7u#, 0.7u#),
+ rth.frac#, 3dh#-rth.frac#);
+ "Big slash";
+ tmp_program(right, 0.25[rth0, rth2], 0.375);
+endchar;
+
+beginchar(slash_bigg,
+ set_width(4dh#*0.375
+ +(0.5[rth0#, rth2#]-tiny#)*(1++0.375)+tiny#,
+ 1.0u#, 1.0u#),
+ rth.frac#, 4dh#-rth.frac#);
+ "bigg slash";
+ tmp_program(right, 0.5[rth0, rth2], 0.375);
+endchar;
+
+beginchar(slash_Bigg,
+ set_width(5dh#*0.375
+ +(0.75[rth0#, rth2#]-tiny#)*(1++0.375)+tiny#,
+ 1.2u#, 1.2u#),
+ rth.frac#, 5dh#-rth.frac#);
+ "Bigg slash";
+ tmp_program(right, 0.75[rth0, rth2], 0.375);
+endchar;
+
+%
+% blackboard bold brackets
+%
+
+def tmp_program(expr orientation, rth, thick,
+ do_top, do_bot, not_ext) =
+ save a, b;
+ a = hround(rth*(1++slant)); b = hround(thick*(1++slant));
+ y5r = y6r = h if do_top or not_ext: else: +eps fi;
+ y7r = y8r = -d if do_bot or not_ext: else: -eps fi;
+ if orientation = left:
+ forsuffixes @# = 1, 2, 3, 4: x@#r-x@# = x@#-x@#l = -0.5a; endfor
+ x1r = x2r = x5r = x7r = min(external_adjustment,
+ hround 0.5(w-a-b));
+ x1-x3 = x2-x4 = -b; x6r = x8r = w-internal_adjustment;
+ else:
+ forsuffixes @# = 1, 2, 3, 4: x@#r-x@# = x@#-x@#l = 0.5a; endfor
+ x1r = x2r = x5r = x7r = max(w-external_adjustment,
+ hround 0.5(w+a+b));
+ x1-x3 = x2-x4 = b; x6r = x8r = internal_adjustment;
+ fi
+ forsuffixes @ = 1, 1r, 1l, 3, 3r, 3l: z@ = whatever[z5r, z6r]; endfor
+ forsuffixes @ = 2, 2r, 2l, 4, 4r, 4l: z@ = whatever[z7r, z8r]; endfor
+ penpos5(rth, 90); penpos6(rth, 90);
+ penpos7(rth, -90); penpos8(rth, -90);
+ penstroke z1e..z2e; penstroke z3e..z4e;
+ if do_top: penstroke z5e..z6e; fi
+ if do_bot: penstroke z7e..z8e; fi
+ penlabels(1, 2, 3, 4, 5, 6, 7, 8);
+enddef;
+
+beginchar(bbbracket_left,
+ set_width(5u#, 0.5u#, 2u#), body_height#, paren_depth#);
+ "Left bbbracket";
+ tmp_program(left, rth0, 2.2u, true, true, true);
+endchar;
+
+beginchar(bbbracket_left_big,
+ set_width(5.5u#, 0.75u#, 2.5u#), rth.frac#, 2dh#-rth.frac#);
+ "big left bbbracket";
+ tmp_program(left, 0.125[rth0, rth1], 0.125[2.2u, 3.0u], true, true, true);
+endchar;
+
+beginchar(bbbracket_left_Big,
+ set_width(6.0u#, 1.0u#, 3u#), rth.frac#, 3dh#-rth.frac#);
+ "Big left bbbracket";
+ tmp_program(left, 0.25[rth0, rth1], 0.25[2.2u, 3.0u], true, true, true);
+endchar;
+
+beginchar(bbbracket_left_bigg,
+ set_width(6.5u#, 1.25u#, 3.5u#), rth.frac#, 4dh#-rth.frac#);
+ "bigg left bbbracket";
+ tmp_program(left, 0.5[rth0, rth1], 0.5[2.2u, 3.0u], true, true, true);
+endchar;
+
+beginchar(bbbracket_left_Bigg,
+ set_width(7.0u#, 1.5u#, 4u#), rth.frac#, 5dh#-rth.frac#);
+ "Bigg left bbbracket";
+ tmp_program(left, 0.75[rth0, rth1], 0.75[2.2u, 3.0u], true, true, true);
+endchar;
+
+beginchar(bbbracket_left_top,
+ set_width(8u#, 2u#, 5u#), rth.frac#, 3dh#-rth.frac#);
+ "Left bbbracket's extension top";
+ tmp_program(left, rth1, 3.0u, true, false, false);
+endchar;
+
+beginchar(bbbracket_left_bot,
+ set_width(8u#, 2u#, 5u#), rth.frac#, 3dh#-rth.frac#);
+ "Left bbbracket's extension bottom";
+ tmp_program(left, rth1, 3.0u, false, true, false);
+endchar;
+
+beginchar(bbbracket_left_mid,
+ set_width(8u#, 2u#, 5u#), 0, dh#);
+ "Left bbbracket's extension module";
+ tmp_program(left, rth1, 3.0u, false, false, false);
+endchar;
+
+beginchar(bbbracket_right,
+ set_width(5u#, 0.5u#, 2u#), body_height#, paren_depth#);
+ "Right bbbracket";
+ tmp_program(right, rth0, 2.2u, true, true, true);
+endchar;
+
+beginchar(bbbracket_right_big,
+ set_width(5.5u#, 0.75u#, 2.5u#), rth.frac#, 2dh#-rth.frac#);
+ "big right bbbracket";
+ tmp_program(right, 0.125[rth0, rth1], 0.125[2.2u, 3.0u], true, true, true);
+endchar;
+
+beginchar(bbbracket_right_Big,
+ set_width(6.0u#, 1.0u#, 3u#), rth.frac#, 3dh#-rth.frac#);
+ "Big right bbbracket";
+ tmp_program(right, 0.25[rth0, rth1], 0.25[2.2u, 3.0u], true, true, true);
+endchar;
+
+beginchar(bbbracket_right_bigg,
+ set_width(6.5u#, 1.25u#, 3.5u#), rth.frac#, 4dh#-rth.frac#);
+ "bigg right bbbracket";
+ tmp_program(right, 0.5[rth0, rth1], 0.5[2.2u, 3.0u], true, true, true);
+endchar;
+
+beginchar(bbbracket_right_Bigg,
+ set_width(7.0u#, 1.5u#, 4u#), rth.frac#, 5dh#-rth.frac#);
+ "Bigg right bbbracket";
+ tmp_program(right, 0.75[rth0, rth1], 0.75[2.2u, 3.0u], true, true, true);
+endchar;
+
+beginchar(bbbracket_right_top,
+ set_width(8u#, 2.0u#, 5u#), rth.frac#, 3dh#-rth.frac#);
+ "Right bbbracket's extension top";
+ tmp_program(right, rth1, 3.0u, true, false, false);
+endchar;
+
+beginchar(bbbracket_right_bot,
+ set_width(8u#, 2.0u#, 5u#), rth.frac#, 3dh#-rth.frac#);
+ "Right bbbracket's extension bottom";
+ tmp_program(right, rth1, 3.0u, false, true, false);
+endchar;
+
+beginchar(bbbracket_right_mid,
+ set_width(8u#, 2.0u#, 5u#), 0, dh#);
+ "Right bbbracket's extension module";
+ tmp_program(right, rth1, 3.0u, false, false, false);
+endchar;
+
+%
+% A poursuivre
+%
+
+beginchar(vert_sign, 3u#+2appr#, body_height#, paren_depth#);
+ "Vertical line";
+ ensure_centering_of(rth1);
+ pickup tiny.nib;
+ pos1(rth1, 0); pos2(rth1, 0); x1 = x2 = 0.5w;
+ top y1 = h; bot y2 = -d; filldraw stroke z1e..z2e;
+ penlabels(1, 2);
+endchar;
+
+beginchar(vert_mod, 3u#+2appr#, 0, dh#);
+ "Vertical line's module";
+ ensure_centering_of(rth1);
+ pickup tiny.nib;
+ pos1(rth1, 0); pos2(rth1, 0); x1 = x2 = 0.5w;
+ y1 = h+eps; y2 = -d-eps; filldraw stroke z1e..z2e;
+ penlabels(1, 2);
+endchar;
+
+beginchar(vert_thick, 3u#+2appr#, body_height#, paren_depth#);
+ "Thick vertical line";
+ ensure_centering_of(0.95stem);
+ pickup tiny.nib;
+ pos1(hround 0.95stem, 0); pos2(hround 0.95stem, 0); x1 = x2 = 0.5w;
+ top y1 = h; bot y2 = -d; filldraw stroke z1e..z2e;
+ penlabels(1, 2);
+endchar;
+
+beginchar(vert_thick_mod, 3u#+2appr#, 0, dh#);
+ "Thick vertical line's module";
+ ensure_centering_of(0.95stem);
+ pickup tiny.nib;
+ pos1(hround 0.95stem, 0); pos2(hround 0.95stem, 0);
+ x1 = x2 = 0.5w; y1 = h+eps; y2 = -d-eps; filldraw stroke z1e..z2e;
+ penlabels(1, 2);
+endchar;
+
+beginchar(vvert_sign, 5.5u#+2appr#, body_height#, paren_depth#);
+ "Double vertical line";
+ numeric a; a = max(2.5u-rth0, 2rth0);% blank space between bars
+ pickup tiny.nib;
+ pos1(rth0, 0); pos2(rth0, 0); pos3(rth0, 0); pos4(rth0, 0);
+ rt x1r = rt x2r = hround 0.5(w-a);
+ w-rt x3r = lft x1l; x3 = x4;
+ top y1 = top y3 = h; bot y2 = bot y4 = -d;
+ filldraw stroke z1e..z2e;
+ filldraw stroke z3e..z4e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(vvert_mod, 5.5u#+2appr#, 0, dh#);
+ "Double vertical line's module";
+ numeric a; a = max(2.5u-rth0, 2rth0);% blank space between bars
+ pickup tiny.nib;
+ pos1(rth0, 0); pos2(rth0, 0); pos3(rth0, 0); pos4(rth0, 0);
+ rt x1r = rt x2r = hround 0.5(w-a);
+ w-rt x3r = lft x1l; x3 = x4;
+ y1 = y3 = h+eps; y2 = y4 = -d-eps;
+ filldraw stroke z1e..z2e;
+ filldraw stroke z3e..z4e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(vvvert_sign, 9u#+2appr#, body_height#, paren_depth#);
+ "Triple vertical line";
+ ensure_centering_of(rth0);
+ numeric a; a = max(2.75u-rth0, 2rth0);% blank space between bars
+ pickup tiny.nib;
+ pos1(rth0, 0); pos2(rth0, 0);
+ pos3(rth0, 0); pos4(rth0, 0);
+ pos5(rth0, 0); pos6(rth0, 0);
+ x3 = x4 = 0.5w; x1 = x2; x5 = x6;
+ lft x5l-rt x3r = lft x3l-rt x1r = hround a;
+ top y1 = top y3 = top y5 = h;
+ bot y2 = bot y4 = bot y6 = -d;
+ filldraw stroke z1e..z2e;
+ filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e;
+ penlabels(1, 2, 3, 4, 5, 6);
+endchar;
+
+beginchar(vvvert_mod, 9u#+2appr#, 0, dh#);
+ "Triple vertical line's module";
+ ensure_centering_of(rth0);
+ numeric a; a = max(2.75u-rth0, 2rth0);% blank space between bars
+ pickup tiny.nib;
+ pos1(rth0, 0); pos2(rth0, 0);
+ pos3(rth0, 0); pos4(rth0, 0);
+ pos5(rth0, 0); pos6(rth0, 0);
+ x3 = x4 = 0.5w; x1 = x2; x5 = x6;
+ lft x5l-rt x3r = lft x3l-rt x1r = hround a;
+ y1 = y3 = y5 = h+eps; y2 = y4 = y6 = -d-eps;
+ filldraw stroke z1e..z2e;
+ filldraw stroke z3e..z4e;
+ filldraw stroke z5e..z6e;
+ penlabels(1, 2, 3, 4, 5, 6);
+endchar;
+
+beginchar(left_filet, 4stem#+2appr#, 0, dh#);
+ "extensible left filet";
+ pickup fine.nib;
+ y1r = y1l = 0; y5r = y5l = -d;
+ forsuffixes $ = r, l: y2$ = 0.25[y1r, y5r];
+ y3$ = 0.5[y1r, y5r]; y4$ = 0.75[y1r, y5r]; endfor
+ x1l = x5l = x4r = good.x 0.5w;
+ x1l-lft x3l = rt x2r-x4r = 2stem;
+ x2l = x4l = 0.5[x1l, x3l]; x1r = x3r = x5r = 0.5[x2r, x4r];
+ filldraw z1l{down}...z2l{(z3l-z1l)xscaled 2}...z3l{down}
+ ...z4l{(z5l-z3l)xscaled 2}...z5l{down}--
+ z5r{(z4r-z5r)xscaled 2}...z4r{up}...
+ z3r{(z2r-z3r)xscaled 2}...z2r{up}...
+ z1r{(z1r-z2r)xscaled 2}--cycle;
+ penlabels(1, 2, 3, 4, 5);
+endchar;
+
+beginchar(right_filet, 4stem#+2appr#, 0, dh#);
+ "extensible right filet";
+ pickup fine.nib;
+ y1r = y1l = 0; y5r = y5l = -d;
+ forsuffixes $ = r, l: y2$ = 0.25[y1r, y5r];
+ y3$ = 0.5[y1r, y5r]; y4$ = 0.75[y1r, y5r]; endfor
+ x1r = x5r = x2l = good.x 0.5w;
+ x2l-lft x4l = rt x3r-x1r = 2stem;
+ x1l = x3l = x5l = 0.5[x2l, x4l]; x2r = x4r = 0.5[x1r, x3r];
+ filldraw z1r{down}...z2r{(z3r-z1r)xscaled 2}...z3r{down}
+ ...z4r{(z5r-z3r)xscaled 2}...z5r{down}--
+ z5l{(z4l-z5l)xscaled 2}...z4l{up}...
+ z3l{(z2l-z3l)xscaled 2}...z2l{up}...
+ z1l{(z1l-z2l)xscaled 2}--cycle;
+ penlabels(1, 2, 3, 4, 5);
+endchar;
+
+% HORIZONTAL BRACES (almost okay, check xdvi problems)
+
+beginchar(overbrace_left, 0.75dh#+appr#, cap_stem#, dh#);
+ "overbrace's left piece";
+ pickup fine.nib;
+ pos1(rth1, 180); pos2(cap_stem, 90);
+ bot y2l = vround (0.5[-d, h]-0.5cap_stem);
+ bot y1r = vround(y2-min(5u, 0.4dh+0.5cap_stem));
+ lft x1r = appr; x2 = w+eps;
+ filldraw stroke z1e up_to_right z2e;
+ penlabels(1, 2);
+endchar;
+
+beginchar(overbrace_mid, 1.5dh#, cap_stem#, dh#);
+ "overbrace's middle piece";
+ pickup fine.nib;
+ pos1(cap_stem, -90); pos2(rth1, 0); pos3(cap_stem, 90);
+ bot y1r = bot y3l = vround (0.5[-d, h]-0.5cap_stem);
+ top y2 = vround(y3+min(5u, 0.4dh+0.5cap_stem));
+ x2 = hround 0.5(w-rth1); x1 = -eps; x3 = w+eps;
+ filldraw stroke z1e right_to_down z2e;
+ filldraw stroke z3e left_to_down z2e;
+ penlabels(1, 2, 3);
+endchar;
+
+beginchar(overbrace_right, 0.75dh#+appr#, cap_stem#, dh#);
+ "overbrace's right piece";
+ pickup fine.nib;
+ pos1(rth1, 0); pos2(cap_stem, 90);
+ bot y2l = vround (0.5[-d, h]-0.5cap_stem);
+ bot y1r = vround(y2-min(5u, 0.4dh+0.5cap_stem));
+ rt x1r = w-appr; x2 = -eps;
+ filldraw stroke z1e up_to_left z2e;
+ penlabels(1, 2);
+endchar;
+
+% 4u# ???
+beginchar(overbrace_mod, 0.5dh#, cap_stem#, dh#);
+ "overbrace's module piece";
+ pickup fine.nib;
+ pos1(cap_stem, 90); pos2(cap_stem, 90);
+ bot y1l = bot y2l = vround (0.5[-d, h]-0.5cap_stem);
+ x1 = -eps; x2 = w+eps;
+ filldraw stroke z1e..z2e; penlabels(1, 2);
+endchar;
+
+beginchar(underbrace_left, 0.75dh#+appr#, cap_stem#, dh#);
+ "underbrace's left piece";
+ pickup fine.nib;
+ pos1(rth1, 0); pos2(cap_stem, 90);
+ bot y2l = vround (0.5[-d, h]-0.5cap_stem);
+ top y1l = vround(y2+min(5u, 0.4dh+0.5cap_stem));
+ lft x1l = appr; x2 = w+eps;
+ filldraw stroke z1e down_to_right z2e;
+ penlabels(1, 2);
+endchar;
+
+beginchar(underbrace_mid, 1.5dh#, cap_stem#, dh#);
+ "underbrace's middle piece";
+ pickup fine.nib;
+ pos1(cap_stem, 90); pos2(rth1, 0); pos3(cap_stem, -90);
+ bot y1l = bot y3r = vround (0.5[-d, h]-0.5cap_stem);
+ bot y2 = vround(y3-min(5u, 0.4dh+0.5cap_stem));
+ x2 = hround 0.5(w-rth1); x1 = -eps; x3 = w+eps;
+ filldraw stroke z1e right_to_down z2e;
+ filldraw stroke z3e left_to_down z2e;
+ penlabels(1, 2, 3);
+endchar;
+
+beginchar(underbrace_right, 0.75dh#+appr#, cap_stem#, dh#);
+ "underbrace's right piece";
+ pickup fine.nib;
+ pos1(rth1, 180); pos2(cap_stem, 90);
+ bot y2l = vround (0.5[-d, h]-0.5cap_stem);
+ top y1l = vround(y2+min(5u, 0.4dh+0.5cap_stem));
+ rt x1l = w-appr; x2 = -eps;
+ filldraw stroke z1e down_to_left z2e;
+ penlabels(1, 2);
+endchar;
+
+% 4u# ???
+beginchar(underbrace_mod, 0.5dh#, cap_stem#, dh#);
+ "underbrace's module piece";
+ pickup fine.nib;
+ pos1(cap_stem, 90); pos2(cap_stem, 90);
+ bot y1l = bot y2l = vround (0.5[-d, h]-0.5cap_stem);
+ x1 = -eps; x2 = w+eps;
+ filldraw stroke z1e..z2e; penlabels(1, 2);
+endchar;
+
+% RADICALS
+rth := ceiling(rth.frac#*hppp);
+
+vardef tmp_program =
+% imperative coordinates
+ save a, b, c, f, sl; a = 2.75; b = 1.25;% slope factors
+ pickup crisp.nib; x1' = w; lft x5l = appr;
+ top y1r = h; y1' = h-0.5rth; bot y2r = bot y3r = -d-eps;
+ top y4l = vround 0.5[-d, h]+o; y5l = good.y 0.75[y2r, y4l];
+% numerical calculus
+ c = a*(y4l-y5l)+b*(y4l-y2r)+y1'-y2r;
+ vardef f(expr sl) =
+ sl*c-(1++(b*sl))*(curve-crisp)+0.5(rth-crisp)*(1+(1++sl))<x1'-x5l
+ enddef;
+ sl = solve f(0, (x1'-x5l)/(y1'-y5l));
+% setting other key points
+ x4l = good.x(x5l+a*sl*(y4l-y5l));
+ x2r = good.x(x1'-sl*(y1'-y2r)+0.5(rth-crisp)*(1++sl));
+ penpos1((rth-crisp)*(1++sl), 0);
+ pos5(min(hair, rth), angle(z4l-z5l)-90);
+ rt x2r-lft x3r = rth; z1r-z2r = whatever*(sl, 1);
+ adjust_slanted_bar(3r, 4l, 3, 4)(curve-crisp, -1);
+ z1l-z2l = whatever*(z1r-z2r); z2l = whatever[z3, z4l];
+ z4r-z5r = whatever*(z4l-z5l); z4r = whatever[z3r, z4];
+ z3l = 0.5[z2l, z4l];% it's not an interesting point
+ filldraw stroke z1e--z2e--z3e--z4e--z5e;
+ penlabels(1, 2, 3, 4, 5); labels(1');
+enddef;
+
+beginchar(radical_sign,
+ 15u#+letter_fit#, rth.frac#, body_height#+paren_depth#-rth.frac#);
+ "radical sign";
+ tmp_program;
+endchar;
+
+beginchar(radical_big,
+ 18u#+letter_fit#, rth.frac#, 2dh#-rth.frac#);
+ "big radical sign";
+ tmp_program;
+endchar;
+
+beginchar(radical_Big,
+ 18u#+letter_fit#, rth.frac#, 3dh#-rth.frac#);
+ "Big radical sign";
+ tmp_program;
+endchar;
+
+beginchar(radical_bigg,
+ 18u#+letter_fit#, rth.frac#, 4dh#-rth.frac#);
+ "bigg radical sign";
+ tmp_program;
+endchar;
+
+beginchar(radical_Bigg,
+ 18u#+letter_fit#, rth.frac#, 5dh#-rth.frac#);
+ "Bigg radical sign";
+ tmp_program;
+endchar;
+
+beginchar(radical_bot, 19u#+letter_fit#, 0, 3dh#);
+ "Extensible radical sign---bottom";
+ % imperative coordinates
+ save a, b, c, f, sl; a = 1; b = 1;% slope factors
+ pickup crisp.nib;
+ rt x1r = rt x2r = hround(w-6u+0.5rth); lft x5l = appr;
+ top y1r = h+1+eps; bot y2r = bot y3r = -d-eps;
+ top y4l = vround 0.9[-d, h]+o; y5l = good.y 0.75[y2r, y4l];
+% numerical calculus
+ c = a*(y4l-y5l)+b*(y4l-y2r);
+ vardef f(expr sl) =
+ sl*c-(1++(b*sl))*(curve-crisp)+0.5(rth-crisp)<x1r-x5l
+ enddef;
+ sl = solve f(0, (x1r-x5l)/(y1r-y5l));
+% setting other key points
+ x4l = good.x(x5l+a*sl*(y4l-y5l)); x3r = x1l;
+ pos1(rth, 0); pos5(min(hair, rth), angle(z4l-z5l)-90);
+ adjust_slanted_bar(3r, 4l, 3, 4)(curve-crisp, -1);
+ z1l-z2l = whatever*(z1r-z2r); z2l = whatever[z3, z4l];
+ z4r-z5r = whatever*(z4l-z5l); z4r = whatever[z3r, z4];
+ z3l = 0.5[z2l, z4l];% it's not an interesting point
+ filldraw stroke z1e--z2e--z3e--z4e--z5e;
+ penlabels(1, 2, 3, 4, 5);
+endchar;
+
+beginchar(radical_mod, 19u#+letter_fit#, 0, dh#);
+ "Extensible radical sign---module";
+ pickup crisp.nib; rt x1r = rt x2r = hround(w-6u+0.5rth);
+ y1 = h+1+eps; y2 = -d-1-eps; pos1(rth, 0); pos2(rth, 0);
+ filldraw stroke z1e..z2e; penlabels(1, 2);
+endchar;
+
+beginchar(radical_top, 19u#+letter_fit#, rth.frac#, dh#-rth.frac#);
+ "Extensible radical sign---top";
+ pickup crisp.nib; rt x3r = rt x2r = hround(w-6u+0.5rth);
+ x1 = good.x(w+0.5); bot y1r = bot y2r = 0; y3 = -d-1-eps;
+ x2l = x3l; y1l = y2l; pos1(rth, -90); pos3(rth, 0);
+ filldraw stroke z1e--z2e--z3e; penlabels(1, 2, 3);
+endchar;
+
+beginchar(group_left,
+ set_width(4u#, 0.2u#, 2u#), body_height#, paren_depth#);
+ "Left group";
+ a := hround 0[0.95stem, 0.95cap_stem];
+ pickup fine.nib;
+ top y1l = h; bot y4l = -d;
+ y2 = 0.75[y4r, y1r]; y3 = 0.25[y4r, y1r];
+ rt x1 = rt x4 = w-internal_adjustment;
+ lft x2l = lft x3l = external_adjustment;
+ pos1(rth0, -90); pos2(a, 0); pos3(a, 0); pos4(rth0, 90);
+ filldraw stroke z1e left_to_down
+ z2e..z3e down_to_right z4e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(group_left_big,
+ set_width(4.5u#, 0.4u#, 2.5u#), rth.frac#, 2dh#-rth.frac#);
+ "big left group";
+ a := hround 0.125[0.95stem, 0.95cap_stem];
+ pickup fine.nib;
+ top y1l = h; bot y4l = -d;
+ y2 = 0.75[y4r, y1r]; y3 = 0.25[y4r, y1r];
+ rt x1 = rt x4 = w-internal_adjustment;
+ lft x2l = lft x3l = external_adjustment;
+ pos1(rth0, -90); pos2(a, 0); pos3(a, 0); pos4(rth0, 90);
+ filldraw stroke z1e left_to_down
+ z2e..z3e down_to_right z4e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(group_right,
+ set_width(4u#, 0.2u#, 2u#), body_height#, paren_depth#);
+ "Right group";
+ a := hround 0[0.95stem, 0.95cap_stem];
+ pickup fine.nib;
+ top y1r = h; bot y4r = -d;
+ y2 = 0.75[y4l, y1l]; y3 = 0.25[y4l, y1l];
+ lft x1 = lft x4 = internal_adjustment;
+ rt x2r = rt x3r = w-external_adjustment;
+ pos1(rth0, 90); pos2(a, 0); pos3(a, 0); pos4(rth0, -90);
+ filldraw stroke z1e right_to_down
+ z2e..z3e down_to_left z4e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(group_right_big,
+ set_width(4.5u#, 0.4u#, 2.5u#), rth.frac#, 2dh#-rth.frac#);
+ "big right group";
+ a := hround 0.125[0.95stem, 0.95cap_stem];
+ pickup fine.nib;
+ top y1r = h; bot y4r = -d;
+ y2 = 0.75[y4l, y1l]; y3 = 0.25[y4l, y1l];
+ lft x1 = lft x4 = internal_adjustment;
+ rt x2r = rt x3r = w-external_adjustment;
+ pos1(rth0, 90); pos2(a, 0); pos3(a, 0); pos4(rth0, -90);
+ filldraw stroke z1e right_to_down
+ z2e..z3e down_to_left z4e;
+ penlabels(1, 2, 3, 4);
+endchar;
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathbdrv.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathbdrv.mf
new file mode 100644
index 00000000000..43915e90c4b
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathbdrv.mf
@@ -0,0 +1,298 @@
+% mathematical symbols by Anthony Phan.
+% file: mathbdrv.mf (driver file for mathb serie)
+% last modification: May 16, 2005.
+
+mode_setup;
+
+math_setup;
+
+% Activate to allow characters with undefined code.
+% (for proof mode compilation)
+% let iff=always_iff;
+
+% BINARY OPERATORS
+
+currentlocation_ := 0;
+input mathbsym;
+
+% RELATIONS
+
+varnot_sign := hex"7F";
+
+% mathsymb.mf
+
+top_dot_equal_sign := hex"10";
+bot_dot_equal_sign := hex"11";
+top_bot_dot_equal_sign := hex"12";
+rising_dots_equal_sign := hex"13";
+falling_dots_equal_sign := hex"14";
+colon_equal_sign := hex"15";
+equal_colon_sign := hex"16";
+bump_equal := hex"17";
+pump_equal := hex"18";
+Bump_equal := hex"19";
+circ_equal_sign := hex"1A";
+equal_circ_sign := hex"1B";
+triangle_equal_sign := hex"1C";
+correspondance_sign := hex"1D";
+
+% MISCELLANEOUS
+
+Dominated_curly := hex"CE";
+Dominating_curly := hex"CF";
+
+% mathsymb.mf
+
+%times_left_three := hex"56";
+%times_right_three := hex"57";
+
+between_sign := hex"20";
+smile_sign := hex"21";
+frown_sign := hex"22";
+var_hash_sign := hex"23";
+times_left_three := hex"24";
+times_right_three := hex"25";
+pitchfork_sign := hex"26";
+bowtie_sign := hex"27";
+
+%between_sign := hex"2A";
+
+VDash_sign := hex"28";
+DashV_sign := hex"29";
+VDash_not := hex"2A";
+DashV_not := hex"2B";
+Vvdash_sign := hex"2C";
+dashVv_sign := hex"2D";
+Vvdash_not := hex"2E";
+dashVv_not := hex"2F";
+
+% MISCELLANEOUS
+% maya numerals
+
+therefore_sign := hex"36";
+because_sign := hex"37";
+
+accent_circ := hex"38";
+accent_dot := hex"39";
+accent_ddot := hex"3A";
+accent_dddot := hex"3B";
+accent_ddddot := hex"3C";
+
+angle_sign := hex"3D";
+measured_angle := hex"3E";
+spherical_angle := hex"3F";
+
+% ASTRONOMICAL SYMBOLS
+
+% mathastr.mf
+
+astro_sun := hex"40";
+astro_mercury := hex"41";
+astro_venus := hex"42";
+astro_earth := hex"43";
+astro_mars := hex"44";
+astro_jupiter := hex"45";
+astro_saturn := hex"46";
+astro_uranus := hex"47";
+astro_neptune := hex"48";
+astro_pluto := hex"49";
+astro_varearth := hex"4A";
+astro_left_moon := hex"4B";
+astro_right_moon := hex"4C";
+astro_full_moon := hex"4D";
+astro_new_moon := hex"4E";
+cemetery := hex"4F";
+ligtable cemetery:cemetery kern-2(u#+letter_fit#);
+
+astro_aries := hex"50";
+astro_taurus := hex"51";
+astro_gemini := hex"52";
+%astro_cancer := hex"53";
+astro_leo := hex"54";
+%astro_virgo := hex"55";
+astro_libra := hex"56";
+astro_scorpio := hex"57";
+%astro_sagittarius := hex"58";
+%astro_capricornus := hex"59";
+%astro_aquarius := hex"59";
+%astro_pisces := hex"59";
+
+% LETTER LIKE SYMBOLS
+
+% mathltlk.mf
+
+wedge_eq := hex"58";
+vee_eq := hex"59";
+wedge_eqq := hex"5A";
+vee_eqq := hex"5B";
+double_cap_sign := hex"5C";
+double_cup_sign := hex"5D";
+double_sqcap_sign := hex"5E";
+double_sqcup_sign := hex"5F";
+
+% DELIMITERS
+
+group_left := hex"70";
+group_right := hex"71";
+ceiling_left := hex"72";
+ceiling_right := hex"73";
+floor_left := hex"74";
+floor_right := hex"75";
+bracket_upper_lower_left := hex"76";
+bracket_upper_lower_right := hex"77";
+bracket_upper_left := hex"78";
+bracket_upper_right := hex"79";
+bracket_lower_left := hex"7A";
+bracket_lower_right := hex"7B";
+backslash_thick := hex"7C";
+slash_thick := hex"7D";
+vert_thick := hex"7E";
+
+% TRIANGLES AS BINARY OPERATORS
+
+triangle_small_up := hex"98";
+triangle_small_down := hex"99";
+triangle_small_left := hex"9A";
+triangle_small_right := hex"9B";
+triangle_small_full_up := hex"9C";
+triangle_small_full_down := hex"9D";
+triangle_small_full_left := hex"9E";
+triangle_small_full_right := hex"9F";
+
+% ARROWS and HARPOONS
+
+arrows_left_left := hex"D0";
+arrows_right_right := hex"D1";
+arrows_up_up := hex"D2";
+arrows_down_down := hex"D3";
+arrows_left_right := hex"D4";
+arrows_right_left := hex"D5";
+arrows_up_down := hex"D6";
+arrows_down_up := hex"D7";
+
+harpoons_left_left := hex"D8";
+harpoons_right_right := hex"D9";
+harpoons_up_up := hex"DA";
+harpoons_down_down := hex"DB";
+harpoon_left_bar := hex"DC";
+harpoon_right_bar := hex"DD";
+harpoon_bar_left := hex"DE";
+harpoon_bar_right := hex"DF";
+
+harpoon_left_right := hex"E0";
+harpoon_right_left := hex"E1";
+
+hook_left := hex"E2";
+hook_right := hex"E3";
+diag_up := hex"E4";
+diag_down := hex"E5";
+
+arrow_shift_up_left := hex"E8";
+arrow_shift_up_right := hex"E9";
+arrow_shift_down_left := hex"EA";
+arrow_shift_down_right := hex"EB";
+arrow_loop_up_left := hex"EC";
+arrow_loop_up_right := hex"ED";
+arrow_loop_down_left := hex"EE";
+arrow_loop_down_right := hex"EF";
+
+arrow_curve_top_left := hex"F0";
+arrow_curve_top_right := hex"F1";
+arrow_curve_top_left_right := hex"F2";
+arrow_curve_bot_left := hex"F3";
+arrow_curve_bot_right := hex"F4";
+arrow_curve_bot_left_right := hex"F5";
+arrow_circle_left := hex"F6";
+arrow_circle_right := hex"F7";
+arrow_squig_left := hex"F8";
+arrow_squig_right := hex"F9";
+arrow_squig_left_right := hex"FA";
+% ????????????? := hex"FB";
+arrow_left_to_right := hex"FC";
+arrow_right_to_left := hex"FD";
+arrow_up_to_down := hex"FE";
+arrow_down_to_up := hex"FF";
+
+% let the show begin :
+
+input mathastr;
+input maydigit;
+input mathltlk;
+input mathfine;
+input mathsymb;
+input mathsmsy;
+input mathbdel;
+input matharrw;
+
+main_name_string := "sqsubset";
+t := hex"80";
+forsuffixes $=,_not,_eq,_not_eq,_eq_not,
+ _eq_varnot,_eqq,_not_eqq,_eqq_not,_eqq_varnot,
+ _double,_double_not:
+ main_name_with($) := t; t := t+2; endfor;
+input mathsubs;
+
+main_name_string := "sqsupset";
+t := hex"81";
+forsuffixes $=,_not,_eq,_not_eq,_eq_not,
+ _eq_varnot,_eqq,_not_eqq,_eqq_not,_eqq_varnot,
+ _double,_double_not:
+ main_name_with($) := t; t := t+2; endfor;
+input mathsubs;
+
+main_name_string := "predecessor";
+t := hex"A0";
+forsuffixes $=,_not,_slant,_not_slant,
+ _eq,_not_eq,_eq_not,%_eq_varnot,
+ _eqq,_not_eqq,_eqq_not,_eqq_varnot,
+ _upperslant,_not_upperslant,
+ _opposite,_eq_opposite,_eqq_opposite,
+ _sim,_not_sim,_sim_not,_approx,_not_approx,_approx_not,_dot:
+ main_name_with($) := t; t := t+2; endfor;
+input mathineq;
+
+main_name_string := "successor";
+t := hex"A1";
+forsuffixes $=,_not,_slant,_not_slant,
+ _eq,_not_eq,_eq_not,%_eq_varnot,
+ _eqq,_not_eqq,_eqq_not,_eqq_varnot,
+ _upperslant,_not_upperslant,
+ _opposite,_eq_opposite,_eqq_opposite,
+ _sim,_not_sim,_sim_not,_approx,_not_approx,_approx_not,_dot:
+ main_name_with($) := t; t := t+2; endfor;
+input mathineq;
+
+main_name_string := "mbox";% ``m'' stands for medium.
+t := hex"60";
+forsuffixes $=_plus,_minus,_times,_division,
+ _dot,_circle,_asterisk,_co_asterisk,
+ _left,_right,_top,_bot,
+ _sign,_slash,_backslash,_triangle_up:
+ main_name_with($) := t; t := t+1; endfor;
+input mathmbcb;
+
+% see also:
+% _peace_and_love,_ying_yang,
+% _truc,_curt,_full_circle,_five_star,_six_star,
+% _triangle_down,_triangle_left,_triangle_right,
+% _top_dot_minus,_bot_dot_minus,_horiz,_vert,_cross,_across,
+% _wedge,_vee,
+% _black_left,_black_right,_black_top,_black_bot,
+% _black_northwest,_black_northeast,_black_southwest,_black_southeast:
+
+
+% parameters for TFM files.
+
+font_slant=0;
+font_x_height=x_height#;
+%font_normal_stretch=3u#;
+%font_normal_shrink=2u#;
+font_quad=18u#+4letter_fit#;
+font_extra_space=2u#;
+font_normal_space=6u#+2letter_fit#;
+
+end.
+
+
+
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathbigs.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathbigs.mf
new file mode 100644
index 00000000000..63b82899e5a
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathbigs.mf
@@ -0,0 +1,846 @@
+% mathematical symbols by Anthony Phan.
+% file: mathbigs.mf (large symbols)
+% last modification: May 16, 2005.
+% Only known charcodes will be generated.
+
+def horizontal_rules_list =
+ 0.5[-d, h]-math_axis, 0.5[-d, h]-math_axis+x_height,
+ 0.25[-d, h], 0.5[-d, h], 0.75[-d, h] enddef;
+
+% PARAMETERS
+
+text_rth# := 0[0.95stem#, 0.95cap_stem#];
+disp_rth# := 0.75[0.95stem#, 0.95cap_stem#];
+disp_stem# := 1.25cap_stem#;
+disp_hair# := max(rth1#, cap_hair#*(cap_curve#/cap_stem#));
+define_whole_blacker_pixels(text_rth, disp_rth, disp_stem, disp_hair);
+
+% SUMMATIONS
+
+def tmp_program(expr lowerstem, sidestem, upperstem, beak, hair, beakjut, lo) =
+ pickup crisp.nib;
+ top y1 = top y2 = h; bot y5 = bot y6 = -d;
+ bot y12 = h-vround upperstem; y12 = y13 = y13';
+ bot y14 = bot y15 = h-vround(upperstem+beak);
+ top y9 = -d+vround lowerstem; y9 = y9' = y10;
+ top y7 = top y8 = -d+vround(lowerstem+beak);
+ y3 = y12; y0 = 0.5[y12, y9];
+ rt x6 = w-appr; x6 = x7 = x15 = x1+hround beakjut;
+ lft x2 = appr; x2 = x3; rt x5 = appr-hround lo;
+ rt x7-lft x8 = rt x15- lft x14 = hround hair;
+ x0 = floor(0.5[x2, x7])+0.5;
+ x9 = x13 = 0.5[x0, x14]; x9' = x8; z13'-z14 = whatever*(z1-z15);
+ adjust_slanted_bar(3, 0, 3', 0', max(.5(sidestem-crisp), 1), 1);
+ z11-z0 = z0-z0'; z12 = whatever[z3+2(z3'-z3), z11];
+ adjust_slanted_bar(5, 11, 5', 11', max(hair-crisp, 1), -1);
+ z10 = whatever[z11, z5'];
+ z4 = whatever[z5', z11']; z4 = whatever[z3, z0'];
+ filldraw z1--z2--z3--z4--z5--z6--z7--z8{down}
+ ...beak_darkness[z9', 0.5[z8, z9]]...z9{left}
+ --z10--z11--z12--z13{right}
+ ...beak_darkness[z13', 0.5[z13, z14]]...z14{z15-z1}
+ --z15--cycle;
+ labels(0, 0', 1, 2, 3, 3', 4, 5, 5', 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
+enddef;
+
+beginchar(small_summation_sign, 8u#+2appr#, 0.8asc_height#, 0);
+ "Small summation sign";
+ tmp_program(stem, stem, hair, 0.36h-stem, hair, 0.2u, 0.5u);
+endchar;
+
+beginchar(summation_sign, 14u#+2appr#, 0, 10/6dh#);
+ "Textstyle summation sign";
+ tmp_program(cap_stem, cap_stem, cap_hair, 0.333d-d/9,
+ cap_hair, 0.4u, 5/7u);
+endchar;
+
+beginchar(Summation_sign, 18u#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle summation sign";
+ tmp_program(disp_stem, disp_stem, disp_hair, 0.333d-d/9,
+ disp_hair, 0.75u, u);
+
+endchar;
+
+% PRODUCTS AND COPRODUCTS
+
+def tmp_program(expr orientation, appr_corr,
+ stem, hair, jut, inner_jut, bracket, dish) =
+ if orientation = up: top y1 = top y3 = h; bot y2 = bot y4 = -d;
+ else: top y2 = top y4 = h; bot y1 = bot y3 = -d; fi
+ pos1(hround stem, 0); pos2(hround stem, 0);
+ pos3(hround stem, 0); pos4(hround stem, 0);
+ lft x1l = lft x2l = appr+hround(appr_corr+jut);
+ rt x3r = rt x4r = w-appr-hround(appr_corr+jut);
+ serif(1, 2, bracket, jut, hair, false, dish, 0, hair, true, 0);
+ serif(2, 1, bracket, jut, hair, true, dish, inner_jut, hair, true, dish);
+ serif(3, 4, bracket, 0, hair, false, 0, jut, hair, true, dish);
+ serif(4, 3, bracket, inner_jut, hair, true, dish, jut, hair, true, dish);
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ filldraw z1f--z3c--z3d--z1e--cycle;
+ penlabels(1, 2, 3, 4);
+enddef;
+
+beginchar(small_product_sign, 8u#+2appr#, 0.8asc_height#, 0);
+ "Small product sign";
+ pickup crisp.nib;
+ tmp_program(up, -0.875u, stem, hair, u, u, 0.5u, dish);
+endchar;
+
+beginchar(product_sign, 16u#+2appr#, 0, 10/6dh#);
+ "Textstyle product sign";
+ pickup crisp.nib;
+ tmp_program(up, 0, cap_stem, cap_hair, 1.8u, 1.8u, 0.9u, dish);
+endchar;
+
+beginchar(Product_sign, 21u#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle product sign";
+ pickup crisp.nib;
+ tmp_program(up, 0, disp_stem, disp_hair, 2.4u, 2.4u, 1.2u, dish);
+endchar;
+
+beginchar(small_coproduct_sign, 8u#+2appr#, 0.8asc_height#, 0);
+ "Small coproduct sign";
+ pickup crisp.nib;
+ tmp_program(down, -0.875u, stem, hair, u, u, 0.5u, dish);
+endchar;
+
+beginchar(coproduct_sign, 16u#+2appr#, 0, 10/6dh#);
+ "Textstyle coproduct sign";
+ pickup crisp.nib;
+ tmp_program(down, 0, cap_stem, cap_hair, 1.8u, 1.8u, 0.9u, dish);
+endchar;
+
+beginchar(Coproduct_sign, 21u#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle coproduct sign";
+ pickup crisp.nib;
+ tmp_program(down, 0, disp_stem, disp_hair, 2.4u, 2.4u, 1.2u, dish);
+endchar;
+
+% BIG PLUS, BIG TIMES
+
+beginchar(bplus_sign, 10/6dh#+2appr#, 0, 10/6dh#);
+ "Textstyle big plus sign";
+ use_rule2;
+ pickup rule.nib; y3 = y4 = good.y 0.5[-d, h];
+ pickup tiny.nib;
+ pos1(rth, 0); pos2(rth, 0); pos3(rth, 90); pos4(rth, 90);
+ lft x1l = hround 0.5(w-rth); x2 = x1;
+ lft x3 = Appr; x1-x3 = x4-x1 = y1-y3 = y3-y2;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(Bplus_sign, 14/6dh#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle big plus sign";
+ use_rule3;
+ pickup rule.nib; y3 = y4 = good.y 0.5[-d, h];
+ pickup tiny.nib;
+ pos1(rth, 0); pos2(rth, 0); pos3(rth, 90); pos4(rth, 90);
+ lft x1l = hround 0.5(w-rth); x2 = x1;
+ lft x3 = Appr; x1-x3 = x4-x1 = y1-y3 = y3-y2;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(btimes_sign, 10/6dh#+2appr#, 0, 10/6dh#);
+ "Textstyle big times sign";
+ use_rule2;
+ pickup rule.nib; x0 = good.x 0.5w;
+ y0 = y0' = good.y 0.5[-d, h];
+ pickup tiny.nib; rt x0' = w-Appr;
+ z1-z0 = z0-z2 = (z0'-z0) rotated 45; z3-z0 = z0-z4 = (z0'-z0) rotated -45;
+ pos1(rth+2eps, -45); pos2(rth+2eps, -45);
+ pos3(rth+2eps, 45); pos4(rth+2eps, 45);
+ filldraw stroke z1e..z2e; filldraw stroke z4e..z3e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(Btimes_sign, 14/6dh#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle big times sign";
+ use_rule3;
+ pickup rule.nib; x0 = good.x 0.5w;
+ y0 = y0' = good.y 0.5[-d, h];
+ pickup tiny.nib; rt x0' = w-Appr;
+ z1-z0 = z0-z2 = (z0'-z0) rotated 45; z3-z0 = z0-z4 = (z0'-z0) rotated -45;
+ pos1(rth+2eps, -45); pos2(rth+2eps, -45);
+ pos3(rth+2eps, 45); pos4(rth+2eps, 45);
+ filldraw stroke z1e..z2e; filldraw stroke z4e..z3e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+% COMPLEMENTS
+
+beginchar(bcomplement, 7.5u#+2appr#, 0, 10/6dh#);
+ "Textstyle complement";
+ autorounded; pickup tiny.nib;
+ pos1(text_rth, 0); pos2(text_rth, 0);
+ pos7(text_rth, 0); pos8(text_rth, 0);
+ h-bot y1 = top y8+d = vround 0.25(h+d);
+ y3+0.5text_rth = h+vround(o*((h+d)/cap_height))+eps;
+ y6-0.5text_rth = -d-vround(o*((h+d)/cap_height))-eps;
+ rt x1r = w-appr; x1 = x2 = x7 = x8;
+ x4 = x5 = appr+0.5text_rth; x3 = x6 = 0.5[x1, x4];
+ y2 = y4 = max(y3-x1+x3, 1/6[y1, y3]);
+ y5 = y7 = min(y6+x1-x3, 1/6[y8, y6]);
+ filldraw stroke z1e..z2e; filldraw stroke z7e..z8e;
+ pickup pencircle scaled text_rth;
+ draw flatcup(z2, z3, z4)..flatcup(z5, z6, z7);
+% z4..z5 down_to_right z6 right_to_up z7;
+ penlabels(1, 2, 7, 8); labels(3, 4, 5, 6);
+endchar;
+
+beginchar(Bcomplement, 10u#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "displaystyle complement";
+ autorounded; pickup tiny.nib;
+ pos1(disp_rth, 0); pos2(disp_rth, 0);
+ pos7(disp_rth, 0); pos8(disp_rth, 0);
+ h-bot y1 = top y8+d = vround 0.25(h+d);
+ y3+0.5disp_rth = h+vround(o*((h+d)/cap_height))+eps;
+ y6-0.5disp_rth = -d-vround(o*((h+d)/cap_height))-eps;
+ rt x1r = w-appr; x1 = x2 = x7 = x8;
+ x4 = x5 = appr+0.5disp_rth; x3 = x6 = 0.5[x1, x4];
+ y2 = y4 = max(y3-x1+x3, 1/6[y1, y3]);
+ y5 = y7 = min(y6+x1-x3, 1/6[y8, y6]);
+ filldraw stroke z1e..z2e; filldraw stroke z7e..z8e;
+ pickup pencircle scaled disp_rth;
+ draw flatcup(z2, z3, z4)..flatcup(z5, z6, z7);
+% z2 up_to_left z3 left_to_down
+% z4..z5 down_to_right z6 right_to_up z7;
+ penlabels(1, 2, 7, 8); labels(3, 4, 5, 6);
+endchar;
+
+%
+% TRUCS
+%
+
+beginchar(btruc_sign, 10/6dh#+2appr#, 0, 10/6dh#);
+ "Textstyle truc sign";
+ pickup tiny.nib;
+ pos1(rth2, 0); pos2(rth2, 0); pos3(rth2, 90); pos4(rth2, 90);
+ top y1 = top y3r = top y4r = h; bot y2 = -d;
+ lft x1l = hround 0.5(w-rth2); x2 = x1;
+ lft x3 = Appr; x1-x3 = x4-x1; filldraw stroke z1e..z2e;
+ filldraw stroke z3e..z4e; penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(Btruc_sign, 14/6dh#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle truc sign";
+ pickup tiny.nib;
+ pos1(rth3, 0); pos2(rth3, 0); pos3(rth3, 90); pos4(rth3, 90);
+ top y1 = top y3r = top y4r = h; bot y2 = -d;
+ lft x1l = hround 0.5(w-rth2); x2 = x1;
+ lft x3 = Appr; x1-x3 = x4-x1; filldraw stroke z1e..z2e;
+ filldraw stroke z3e..z4e; penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(bcurt_sign, 10/6dh#+2appr#, 0, 10/6dh#);
+ "Textstyle curT sign";
+ pickup tiny.nib;
+ pos1(rth2, 0); pos2(rth2, 0); pos3(rth2, 90); pos4(rth2, 90);
+ bot y1 = bot y3l = bot y4l = -d; top y2 = h;
+ lft x1l = hround 0.5(w-rth); x2 = x1;
+ lft x3 = appr; x1-x3 = x4-x1; filldraw stroke z2e..z1e;
+ filldraw stroke z3e..z4e; penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(Bcurt_sign, 14/6dh#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle curT sign";
+ pickup tiny.nib;
+ pos1(rth3, 0); pos2(rth3, 0); pos3(rth3, 90); pos4(rth3, 90);
+ bot y1 = bot y3l = bot y4l = -d; top y2 = h;
+ lft x1l = hround 0.5(w-rth); x2 = x1;
+ lft x3 = appr; x1-x3 = x4-x1; filldraw stroke z2e..z1e;
+ filldraw stroke z3e..z4e; penlabels(1, 2, 3, 4);
+endchar;
+
+%
+% CUPS AND CAPS : STEMS MATCH BRACKETS ONES
+%
+
+beginchar(bcap_sign, 14u#+2appr#, 0, 10/6dh#);
+ "Textstyle cap sign";
+ pickup tiny.nib;
+ pos1(text_rth, 0); pos2(text_rth, 0); pos4(text_rth, 0); pos5(text_rth, 0);
+ lft x1l = lft x2l = appr; rt x4r = rt x5r = w-appr; x3 = 0.5[x2, x4];
+ bot y1 = bot y5 = -d; y3+0.5text_rth = h+vround(o*((h+d)/cap_height))+eps;
+ y2 = y4 = max(y3-0.5(x4-x2), 0.5[y3, y1]);
+ filldraw stroke z2e..z1e; filldraw stroke z4e..z5e;
+ pickup pencircle scaled text_rth; autorounded; draw flatcup(z2, z3, z4);
+ penlabels(1, 2, 3, 4, 5);
+endchar;
+
+beginchar(Bcap_sign, 18u#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle cap sign";
+ pickup tiny.nib;
+ pos1(disp_rth, 0); pos2(disp_rth, 0); pos4(disp_rth, 0); pos5(disp_rth, 0);
+ lft x1l = lft x2l = appr; rt x4r = rt x5r = w-appr; x3 = 0.5[x2, x4];
+ bot y1 = bot y5 = -d; y3+0.5disp_rth = h+vround(o*((h+d)/cap_height))+eps;
+ y2 = y4 = max(y3-0.5(x4-x2), 0.5[y3, y1]);
+ filldraw stroke z2e..z1e; filldraw stroke z4e..z5e;
+ pickup pencircle scaled disp_rth; autorounded; draw flatcup(z2, z3, z4);
+ penlabels(1, 2, 3, 4, 5);
+endchar;
+
+beginchar(bcup_sign, 14u#+2appr#, 0, 10/6dh#);
+ "Textstyle cup sign";
+ pickup tiny.nib;
+ pos1(text_rth, 0); pos2(text_rth, 0); pos4(text_rth, 0); pos5(text_rth, 0);
+ lft x1l = lft x2l = appr; rt x4r = rt x5r = w-appr; x3 = 0.5[x2, x4];
+ top y1 = top y5 = h; y3-0.5text_rth = -d-vround(o*((h+d)/cap_height))-eps;
+ y2 = y4 = min(y3+0.5(x4-x2), 0.5[y3, y1]);
+ filldraw stroke z2e..z1e; filldraw stroke z4e..z5e;
+ pickup pencircle scaled text_rth; autorounded; draw flatcup(z2, z3, z4);
+ penlabels(1, 2, 3, 4, 5);
+endchar;
+
+beginchar(Bcup_sign, 18u#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle cup sign";
+ pickup tiny.nib;
+ pos1(disp_rth, 0); pos2(disp_rth, 0); pos4(disp_rth, 0); pos5(disp_rth, 0);
+ lft x1l = lft x2l = appr; rt x4r = rt x5r = w-appr; x3 = 0.5[x2, x4];
+ top y1 = top y5 = h; y3-0.5disp_rth = -d-vround(o*((h+d)/cap_height))-eps;
+ y2 = y4 = min(y3+0.5(x4-x2), 0.5[y3, y1]);
+ filldraw stroke z2e..z1e; filldraw stroke z4e..z5e;
+ pickup pencircle scaled disp_rth; autorounded; draw flatcup(z2, z3, z4);
+ penlabels(1, 2, 3, 4, 5);
+endchar;
+
+beginchar(bcup_plus, 14u#+2appr#, 0, 10/6dh#);
+ "Textstyle cup-plus sign";
+ ensure_centering_of(rth2);
+ %
+ pickup tiny.nib;
+ pos1(text_rth, 0); pos2(text_rth, 0); pos4(text_rth, 0); pos5(text_rth, 0);
+ lft x1l = lft x2l = appr; rt x4r = rt x5r = w-appr; x3 = 0.5[x2, x4];
+ top y1 = top y5 = h; y3-0.5text_rth = -d-vround(o*((h+d)/cap_height))-eps;
+ y2 = y4 = min(y3+0.5(x4-x2), 0.5[y3, y1]);
+ filldraw stroke z2e..z1e; filldraw stroke z4e..z5e;
+ %
+ pos6(rth2, 0); pos7(rth2, 0); pos8(rth2, 90); pos9(rth2, 90);
+ y8 = y9 = vround(0.5[-d, h]-0.5rth2)+0.5rth2;
+ x6 = x7 = 0.5w;
+ numeric a;
+ a = 0.5(min(lft x5l-rt x1r-2.6u, h+d-text_rth-1.3u)-text_rth);
+ y6-y8r = y8l-y7 = vround a; x6l-x8 = x9-x6r = hround a;
+ filldraw stroke z6e..z7e; filldraw stroke z8e..z9e;
+ %
+ pickup pencircle scaled text_rth; autorounded; draw flatcup(z2, z3, z4);
+ penlabels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+endchar;
+
+beginchar(Bcup_plus, 18u#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle cup-plus sign";
+ ensure_centering_of(rth3);
+ %
+ pickup tiny.nib;
+ pos1(disp_rth, 0); pos2(disp_rth, 0); pos4(disp_rth, 0); pos5(disp_rth, 0);
+ lft x1l = lft x2l = appr; rt x4r = rt x5r = w-appr; x3 = 0.5[x2, x4];
+ top y1 = top y5 = h; y3-0.5disp_rth = -d-vround(o*((h+d)/cap_height))-eps;
+ y2 = y4 = min(y3+0.5(x4-x2), 0.5[y3, y1]);
+ filldraw stroke z2e..z1e; filldraw stroke z4e..z5e;
+ %
+ pos6(rth3, 0); pos7(rth3, 0); pos8(rth3, 90); pos9(rth3, 90);
+ y8 = y9 = vround(0.5[-d, h]-0.5rth3)+0.5rth3;
+ x6 = x7 = 0.5w;
+ numeric a;
+ a = 0.5(min(lft x5l-rt x1r-2.9u, h+d-disp_rth-1.45u)-disp_rth);
+ y6-y8r = y8l-y7 = vround a; x6l-x8 = x9-x6r = hround a;
+ filldraw stroke z6e..z7e; filldraw stroke z8e..z9e;
+ %
+ pickup pencircle scaled disp_rth; autorounded; draw flatcup(z2, z3, z4);
+ penlabels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+endchar;
+
+beginchar(bsqcap_sign, 14u#+2appr#, 0, 10/6dh#);
+ "Textstyle square cap sign";
+ pickup tiny.nib;
+ pos1(text_rth, 180); pos4(text_rth, 0);
+ top y2r = top y3r = h; bot y1 = bot y4 = -d;
+ top y2r-bot y2l = top y3r-bot y3l = text_rth;
+ lft x1r = appr; rt x4r = w-appr;
+ x2r = x1r; x3r = x4r; x2l = x1l; x3l = x4l;
+ filldraw stroke z1e--z2e--z3e--z4e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(Bsqcap_sign, 18u#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle square cap sign";
+ pickup tiny.nib;
+ pos1(disp_rth, 180); pos4(disp_rth, 0);
+ top y2r = top y3r = h; bot y1 = bot y4 = -d;
+ top y2r-bot y2l = top y3r-bot y3l = disp_rth;
+ lft x1r = appr; rt x4r = w-appr;
+ x2r = x1r; x3r = x4r; x2l = x1l; x3l = x4l;
+ filldraw stroke z1e--z2e--z3e--z4e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(bsqcup_sign, 14u#+2appr#, 0, 10/6dh#);
+ "Textstyle square cup sign";
+ pickup tiny.nib;
+ pos1(text_rth, 180); pos4(text_rth, 0);
+ bot y2r = bot y3r = -d; top y1 = top y4 = h;
+ top y2l-bot y2r = top y3l-bot y3r = text_rth;
+ lft x1r = appr; rt x4r = w-appr;
+ x2r = x1r; x3r = x4r; x2l = x1l; x3l = x4l;
+ filldraw stroke z1e--z2e--z3e--z4e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(Bsqcup_sign, 18u#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle square cup sign";
+ pickup tiny.nib;
+ pos1(disp_rth, 180); pos4(disp_rth, 0);
+ bot y2r = bot y3r = -d; top y1 = top y4 = h;
+ top y2l-bot y2r = top y3l-bot y3r = disp_rth;
+ lft x1r = appr; rt x4r = w-appr;
+ x2r = x1r; x3r = x4r; x2l = x1l; x3l = x4l;
+ filldraw stroke z1e--z2e--z3e--z4e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(bsqcup_plus, 14u#+2appr#, 0, 10/6dh#);
+ "Textstyle square cup-plus sign";
+ ensure_centering_of(rth2);
+ %
+ pickup tiny.nib;
+ pos1(text_rth, 180); pos4(text_rth, 0);
+ bot y2r = bot y3r = -d; top y1 = top y4 = h;
+ top y2l-bot y2r = top y3l-bot y3r = text_rth;
+ lft x1r = appr; rt x4r = w-appr;
+ x2r = x1r; x3r = x4r; x2l = x1l; x3l = x4l;
+ filldraw stroke z1e--z2e--z3e--z4e;
+ %
+ pos6(rth2, 0); pos7(rth2, 0); pos8(rth2, 90); pos9(rth2, 90);
+ y8 = y9 = vround(0.5[-d, h]-0.5rth2)+0.5rth2;
+ x6 = x7 = 0.5w;
+ numeric a;
+ a = 0.5(min(lft x4l-rt x1l-2.6u, h+d-text_rth-1.3u)-text_rth);
+ y6-y8r = y8l-y7 = vround a; x6l-x8 = x9-x6r = hround a;
+ filldraw stroke z6e..z7e; filldraw stroke z8e..z9e;
+ penlabels(1, 2, 3, 4, 6, 7, 8, 9);
+endchar;
+
+beginchar(Bsqcup_plus, 18u#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle square cup-plus sign";
+ ensure_centering_of(rth3);
+ %
+ pickup tiny.nib;
+ pos1(disp_rth, 180); pos4(disp_rth, 0);
+ bot y2r = bot y3r = -d; top y1 = top y4 = h;
+ top y2l-bot y2r = top y3l-bot y3r = disp_rth;
+ lft x1r = appr; rt x4r = w-appr;
+ x2r = x1r; x3r = x4r; x2l = x1l; x3l = x4l;
+ filldraw stroke z1e--z2e--z3e--z4e;
+ %
+ pos6(rth3, 0); pos7(rth3, 0); pos8(rth3, 90); pos9(rth3, 90);
+ y8 = y9 = vround(0.5[-d, h]-0.5rth3)+0.5rth3;
+ x6 = x7 = 0.5w;
+ numeric a;
+ a = 0.5(min(lft x4l-rt x1l-2.9u, h+d-disp_rth-1.45u)-disp_rth);
+ y6-y8r = y8l-y7 = vround a; x6l-x8 = x9-x6r = hround a;
+ filldraw stroke z6e..z7e; filldraw stroke z8e..z9e;
+ penlabels(1, 2, 3, 4, 6, 7, 8, 9);
+endchar;
+
+%
+% WEDGES AND VEES
+%
+
+beginchar(bwedge_sign, 16u#+2appr#, 0, 10/6dh#);
+ "Textstyle wedge sign";
+ pickup tiny.nib;
+ lft x1 = appr; x2 = good.x 0.5w;
+ x3-x2 = x2-x1; bot y1 = -d; y1 = y3 = y4 = y6;
+ top y2 = h+vround(o*((h+d)/cap_height))+eps;
+ x6-x1 = diag_width(text_rth-tiny, z2-z1);
+ x3-x4 = diag_width(text_rth-tiny, z2-z3);
+ z5-z4 = whatever*(z2-z3); z5-z6 = whatever*(z2-z1);
+ filldraw z1--z2--z3--z4--z5--z6--cycle;
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+beginchar(Bwedge_sign, 22.4u#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle wedge sign";
+ pickup tiny.nib;
+ lft x1 = appr; x2 = good.x 0.5w;
+ x3-x2 = x2-x1; bot y1 = -d; y1 = y3 = y4 = y6;
+ top y2 = h+vround(o*((h+d)/cap_height))+eps;
+ x6-x1 = diag_width(disp_rth-tiny, z2-z1);
+ x3-x4 = diag_width(disp_rth-tiny, z2-z3);
+ z5-z4 = whatever*(z2-z3); z5-z6 = whatever*(z2-z1);
+ filldraw z1--z2--z3--z4--z5--z6--cycle;
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+beginchar(bvee_sign, 16u#+2appr#, 0, 10/6dh#);
+ "Textstyle vee sign";
+ pickup tiny.nib;
+ lft x1 = appr; x2 = good.x 0.5w;
+ x3-x2 = x2-x1; top y1 = h; y1 = y3 = y4 = y6;
+ bot y2 = -d-vround(o*((h+d)/cap_height))-eps;
+ x6-x1 = diag_width(text_rth-tiny, z2-z1);
+ x3-x4 = diag_width(text_rth-tiny, z2-z3);
+ z5-z4 = whatever*(z2-z3); z5-z6 = whatever*(z2-z1);
+ filldraw z1--z2--z3--z4--z5--z6--cycle;
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+beginchar(Bvee_sign, 22.4u#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle vee sign";
+ pickup tiny.nib;
+ lft x1 = appr; x2 = good.x 0.5w;
+ x3-x2 = x2-x1; top y1 = h; y1 = y3 = y4 = y6;
+ bot y2 = -d-vround(o*((h+d)/cap_height))-eps;
+ x6-x1 = diag_width(disp_rth-tiny, z2-z1);
+ x3-x4 = diag_width(disp_rth-tiny, z2-z3);
+ z5-z4 = whatever*(z2-z3); z5-z6 = whatever*(z2-z1);
+ filldraw z1--z2--z3--z4--z5--z6--cycle;
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+beginchar(bwedge_curly, 16u#+2appr#, 0, 10/6dh#);
+ "Textstyle curly wedge sign";
+ pickup tiny.nib;
+ x2 = hround 0.5(w-text_rth)+0.5text_rth;
+ top y2 = h+vround(o*((h+d)/cap_height))+eps;
+ pos2(text_rth, 0); bot y1r = bot y3l = -d;
+ lft x1r = appr;
+ x3l-x2r = x2l-x1r; x1l = x1r; x3l = x3r;
+ x4 = x2; pos4(text_rth, 0); y4 = 0.625[y2, y1r];
+ y1l-y1r = y3r-y3l = (text_rth-tiny)/cosd angle(z4r-z1r);
+ filldraw stroke z2e{down}...z1e{z1r-z4r};
+ filldraw stroke z2e{down}...z3e{z3l-z4l};
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(Bwedge_curly, 22.4u#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle curly wedge sign";
+ pickup tiny.nib;
+ x2 = hround 0.5(w-disp_rth)+0.5disp_rth;
+ top y2 = h+vround(o*((h+d)/cap_height))+eps;
+ pos2(disp_rth, 0); bot y1r = bot y3l = -d;
+ lft x1r = appr;
+ x3l-x2r = x2l-x1r; x1l = x1r; x3l = x3r;
+ x4 = x2; pos4(disp_rth, 0); y4 = 0.625[y2, y1r];
+ y1l-y1r = y3r-y3l = (disp_rth-tiny)/cosd angle(z4r-z1r);
+ filldraw stroke z2e{down}...z1e{z1r-z4r};
+ filldraw stroke z2e{down}...z3e{z3l-z4l};
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(bvee_curly, 16u#+2appr#, 0, 10/6dh#);
+ "Textstyle curly vee sign";
+ pickup tiny.nib;
+ x2 = hround 0.5(w-text_rth)+0.5text_rth;
+ bot y2 = -d-vround(o*((h+d)/cap_height))-eps;
+ pos2(text_rth, 0); top y1r = top y3l = h;
+ lft x1r = appr;
+ x1l = x1r; x3l = x3r; x3l-x2r = x2l-x1r;
+ x4 = x2; pos4(text_rth, 0); y4 = 0.625[y2, y1r];
+ y1r-y1l = y3l-y3r = (text_rth-tiny)/cosd angle(z4r-z1r);
+ filldraw stroke z2e{up}...z1e{z1r-z4r};
+ filldraw stroke z2e{up}...z3e{z3l-z4l};
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(Bvee_curly, 22.4u#+2appr#, 0, 14/6dh#);
+ padded bigop_padding#;
+ "Displaystyle curly vee sign";
+ pickup tiny.nib;
+ x2 = hround 0.5(w-disp_rth)+0.5disp_rth;
+ bot y2 = -d-vround(o*((h+d)/cap_height))-eps;
+ pos2(disp_rth, 0); top y1r = top y3l = h;
+ lft x1r = appr;
+ x1l = x1r; x3l = x3r; x3l-x2r = x2l-x1r;
+ x4 = x2; pos4(disp_rth, 0); y4 = 0.625[y2, y1r];
+ y1r-y1l = y3l-y3r = (disp_rth-tiny)/cosd angle(z4r-z1r);
+ filldraw stroke z2e{up}...z1e{z1r-z4r};
+ filldraw stroke z2e{up}...z3e{z3l-z4l};
+ penlabels(1, 2, 3, 4);
+endchar;
+
+% UGLY
+
+beginchar(btriangle_up, 16u#+2appr#, 0, 10/6dh#);
+ "Big triangle up";
+ pickup tiny.nib; lft x1r = appr;
+ x2r = good.x 0.5w; x3r-x2r = x2r-x1r;
+ bot y1r = -d; y1r = y3r = y1 = y3; top y2r = h+o;
+ top y1l-bot y1r = top y3l-bot y3r = rth;
+ x1-x1r = diag_width(rth-tiny, z2r-z1r);
+ x3r-x3 = diag_width(rth-tiny, z2r-z3r);
+ z2l-z1 = whatever*(z2r-z1r); z2l-z3 = whatever*(z2r-z3r);
+ z1l = whatever[z1, z2l]; z3l = whatever[z3, z2l];
+ filldraw stroke z1e--z2e--z3e--z1e; penlabels(1, 2, 3);
+endchar;
+
+beginchar(btriangle_down, 16u#+2appr#, 0, 10/6dh#);
+ "Big triangle down";
+ pickup tiny.nib; lft x1r = appr;
+ x2r = good.x 0.5w; x3r-x2r = x2r-x1r;
+ top y1r = h; y1r = y3r = y1 = y3; bot y2r = -d-o;
+ top y1r-bot y1l = top y3r-bot y3l = rth;
+ x1-x1r = diag_width(rth-tiny, z2r-z1r);
+ x3r-x3 = diag_width(rth-tiny, z2r-z3r);
+ z2l-z1 = whatever*(z2r-z1r); z2l-z3 = whatever*(z2r-z3r);
+ z1l = whatever[z1, z2l]; z3l = whatever[z3, z2l];
+ filldraw stroke z1e--z2e--z3e--z1e; penlabels(1, 2, 3);
+endchar;
+
+% INTEGRALS
+
+beginchar(bintegral_sign,6u#+2appr#,0,100/54dh#);
+ "Textstyle integral sign";
+ z.c=(0.5w,0.5[-d,h]);
+ y.t=y.tl=y.tr=h; y.b=y.bl=y.br=-d;
+ x.c-x.t=x.b-x.c=2.3u;% slope
+ x.tr-x.t=x.t-x.tl=x.br-x.b=x.b-x.bl=.5cap_stem/sind(angle(z.t-z.c));
+ z1 = 0.52[z.bl,z.tl];
+ z2 = (hround(appr+u), 0.82[-d, h]);
+ z3 = (w-appr-2.3u, 1[-d, h]);
+ z4 = (w-appr, 0.63[y3, y5]);
+ z5 = (w-appr-0.7u, vround(h-0.2dh));
+ z6 = (w-appr-2.5u, 1[-d, h]-cap_hair);
+ z7 = 0.75[z.br,z.tr];
+ x1.2=x2; z1.2-z1=whatever*(z.t-z.c);
+ y6.7=y6; z6.7-z7=whatever*(z.t-z.c);
+ path lastpath;
+ lastpath :=
+ z1..controls 0.6[z1,z1.2] and 0.5[z2,z1.2]..
+ z2..controls(x2, 0.55[y2, y3]) and (0.65[x3, x2], y3)..
+ z3..controls(0.79[x3, x4], y3) and (x4, 0.44[y4, y3])..
+ z4..controls(x4, 0.6[y4, y5]) and (0.6[x5, x4], y5)..
+ z5..controls(0.65[x5, x6], y5) and (0.6[x6, x5], y6)..
+ z6..controls 0.6[z6, z6.7] and 0.65[z7, z6.7]..
+ z7;
+ lastpath := lastpath--lastpath rotated 180 shifted (w, -d)--cycle;
+ fill lastpath;
+ labels(1,2,3,4,5,6,7,1.2,6.7);
+ charwd:=charwd-u#; italcorr 0.5u#; w:= round(charwd*hppp);
+ tmp_picture := currentpicture;
+endchar;
+
+beginchar(bintegral_double, 11.5u#+2appr#, 0, 100/54dh#);
+ "Textstyle double integral sign";
+ italcorr 0.5u#;
+ currentpicture := tmp_picture+(tmp_picture shifted (hround 6.5u, 0));
+endchar;
+
+beginchar(bintegral_triple,
+ 18u#+2appr#, 0, 100/54dh#);
+ "Textstyle triple integral sign";
+ italcorr 0.5u#;
+ currentpicture := tmp_picture+(tmp_picture shifted (hround 6.5u, 0))
+ +(tmp_picture shifted (2hround 6.5u, 0));
+endchar;
+
+beginchar(bintegral_contour, 5u#+2appr#, 0, 100/54dh#);
+ "Textstyle contour integral sign";
+ italcorr 0.5u#;
+ currentpicture := tmp_picture;
+ pickup rule.nib0;
+ rt x1 = w-appr+hround 1.5u+eps;
+ lft x3 = appr-hround 0.5u-eps; x2=x4=0.5[x1,x3];
+ top y2 = vround(0.5[-d, h]+3.5u)+eps;
+ 0.5[y2, y4] = 0.5[-d, h] = y1 = y3;
+ draw z1 up_to_left z2 left_to_down z3
+ down_to_right z4 right_to_up z1;
+ labels(1,2,3,4);
+endchar;
+
+arrow_head_fitting:= true;
+arrow_width := 2ceiling 0.70spread1+rth;
+arrow_height# := 4u#;
+arrow_height := round 4u;
+arrow_breadth := rth;
+arrow_stress := 0.65;
+arrow_tense1 := 0.75;
+arrow_tense2 := 0.875;
+
+beginchar(bintegral_contour_pos, 5u#+2appr#, 0, 100/54dh#);
+ "Textstyle positive contour integral sign";
+ italcorr 0.5u#;
+ currentpicture := tmp_picture;
+ pickup rule.nib0;
+ rt x1 = w-appr+hround 1.5u+eps;
+ lft x3 = appr-hround 0.5u-eps; x2=x4=0.5[x1,x3];
+ top y2 = vround(0.5[-d, h]+3.5u)+eps;
+ 0.5[y2, y4] = 0.5[-d, h] = y1 = y3;
+ draw z1 up_to_left z2 left_to_down z3
+ down_to_right z4 right_to_up z1;
+ pickup tiny.nib;
+ arrow_head5(subpath (0,3) of (z4 right_to_up z1 up_to_left z2), both);
+ labels(1, 2, 3, 4, 5, 5l, 5r);
+endchar;
+
+beginchar(bintegral_contour_neg, 5u#+2appr#, 0, 100/54dh#);
+ "Textstyle negative contour integral sign";
+ italcorr 0.5u#;
+ currentpicture := tmp_picture;
+ pickup rule.nib0;
+ rt x1 = w-appr+hround 1.5u+eps;
+ lft x3 = appr-hround 0.5u-eps; x2=x4=0.5[x1,x3];
+ top y2 = vround(0.5[-d, h]+3.5u)+eps;
+ 0.5[y2, y4] = 0.5[-d, h] = y1 = y3;
+ draw z1 up_to_left z2 left_to_down z3
+ down_to_right z4 right_to_up z1;
+ pickup tiny.nib;
+ arrow_head5(subpath (0,3) of (z2 right_to_down z1 down_to_left z4), both);
+ labels(1, 2, 3, 4, 5, 5l, 5r);
+endchar;
+
+beginchar(bintegral_square, 5u#+2appr#, 0, 100/54dh#);
+ "Textstyle square integral sign";
+ italcorr 0.5u#;
+ currentpicture := tmp_picture;
+ pickup tiny.nib;
+ top y1r = top y2r = vround(0.5[-d, h]+3.5u);
+ rt x2r = rt x3r = w-appr+hround 1.5u;
+ 0.5[y1r, y3r] = 0.5[y2r, y4r] = 0.5[-d, h];
+ lft x1r=lft x4r=appr-hround 0.5u;
+ rt x1l-lft x1r = rt x2r-lft x2l
+ = rt x3r-lft x3l = rt x4l-lft x4r = rth0;
+ top y1r-bot y1l = top y2r-bot y2l
+ = top y3l-bot y3r = top y4l-bot y4r = rth0;
+ filldraw stroke z1e--z2e--z3e--z4e--z1e;
+ penlabels(1, 2, 3, 4);
+endchar;
+
+beginchar(bintegral_square_pos, 5u#+2appr#, 0, 100/54dh#);
+ "Textstyle positive square integral sign";
+ italcorr 0.5u#;
+ currentpicture := tmp_picture;
+ pickup tiny.nib;
+ top y1r = top y2r = vround(0.5[-d, h]+3.5u);
+ rt x2r = rt x3r = w-appr+hround 1.5u;
+ 0.5[y1r, y3r] = 0.5[y2r, y4r] = 0.5[-d, h];
+ lft x1r=lft x4r=appr-hround 0.5u;
+ rt x1l-lft x1r = rt x2r-lft x2l
+ = rt x3r-lft x3l = rt x4l-lft x4r = rth0;
+ top y1r-bot y1l = top y2r-bot y2l
+ = top y3l-bot y3r = top y4l-bot y4r = rth0;
+ filldraw stroke z1e--z2e--z3e--z4e--z1e;
+ pickup tiny.nib; z2=0.5[z2l,z2r]; z3=0.5[z3l,z3r];
+ arrow_head5(z3..0.75[z3,z2], both);
+ penlabels(1, 2, 3, 4, 5);
+endchar;
+
+beginchar(bintegral_square_neg, 5u#+2appr#, 0, 100/54dh#);
+ "Textstyle negative square integral sign";
+ italcorr 0.5u#;
+ currentpicture := tmp_picture;
+ pickup tiny.nib;
+ top y1r = top y2r = vround(0.5[-d, h]+3.5u);
+ rt x2r = rt x3r = w-appr+hround 1.5u;
+ 0.5[y1r, y3r] = 0.5[y2r, y4r] = 0.5[-d, h];
+ lft x1r=lft x4r=appr-hround 0.5u;
+ rt x1l-lft x1r = rt x2r-lft x2l
+ = rt x3r-lft x3l = rt x4l-lft x4r = rth0;
+ top y1r-bot y1l = top y2r-bot y2l
+ = top y3l-bot y3r = top y4l-bot y4r = rth0;
+ filldraw stroke z1e--z2e--z3e--z4e--z1e;
+ pickup tiny.nib; z2=0.5[z2l,z2r]; z3=0.5[z3l,z3r];
+ arrow_head5(z2..0.75[z2,z3], both);
+ penlabels(1, 2, 3, 4, 5);
+endchar;
+
+beginchar(bintegral_dblcont, 11u#+2appr#, 0, 100/54dh#);
+ "Textstyle double contour integral sign";
+ italcorr 0.5u#;
+ currentpicture := tmp_picture+(tmp_picture shifted (hround 6u, 0));
+ pickup rule.nib0;
+ rt x1 = w-appr+hround 1.5u+eps; lft x3 = appr-hround 0.5u-eps;
+ x2 = x4 = 0.5[x1,x3];
+ top y2 = vround(0.5[-d, h]+3.5u)+eps;
+ 0.5[y2, y4] = 0.5[-d, h] = y1 = y3;
+ draw z1 up_to_left z2 left_to_down z3
+ down_to_right z4 right_to_up z1;
+ labels(1, 2, 3, 4);
+endchar;
+
+beginchar(Bintegral_sign, 12u#+2appr#,0,200/54dh#);
+% save disp_stem; disp_stem=hround 2.2u;%46/36pt;
+ z1 = (hround(0.5w-0.5disp_stem), 0.52[-d, h]);
+ z2 = (w-appr-2.6u, 1[-d, h]);
+ z3 = (w-appr, 0.63[y2, y4]);
+ z4 = (w-appr-0.9u, vround(h-0.24dh));
+ z5 = (w-appr-2.8u, 1[-d, h]-disp_hair);
+ z6 = (x1+disp_stem, 0.75[-d, h]);
+ path lastpath;
+ lastpath :=
+ z1..controls(x1, 0.6[y1, y2]) and (0.85[x2, x1], y2)..
+ z2..controls(0.79[x2, x3], y2) and (x3, 0.44[y3, y2])..
+ z3..controls(x3, 0.6[y3, y4]) and (0.6[x4, x3], y4)..
+ z4..controls(0.65[x4, x5], y4) and (0.6[x5, x4], y5)..
+ z5..controls(0.55[x5, x6], y5) and (x6, 0.8[y6, y5])..
+ z6;
+ lastpath := lastpath--lastpath shifted (-x1,0)
+ rotated 180 shifted (x6, -d)--cycle;
+ fill lastpath;
+ labels(1,2,3,4,5,6);
+ charwd:=charwd-5u#; italcorr 4.5u#; w:= round(charwd*hppp);
+ tmp_picture := currentpicture;
+ integral_x:=x1;
+endchar;
+
+beginchar(Bintegral_double, 16.5u#+2appr#, 0,200/54dh#);
+ "Displaystyle double integral sign";
+ italcorr 4.5u#;
+ currentpicture := tmp_picture+(tmp_picture shifted (hround 9.5u, 0));
+endchar;
+
+beginchar(Bintegral_triple, 26u#+2appr#, 0,200/54dh#);
+ "Displaystyle triple integral sign";
+ italcorr 4.5u#;
+ currentpicture := tmp_picture+(tmp_picture shifted (hround 9.5u, 0))
+ +(tmp_picture shifted (2hround 9.5u, 0));
+endchar;
+
+beginchar(Bintegral_contour, 7u#+2appr#, 0,200/54dh#);
+ "Displaystyle contour integral sign";
+ italcorr 4.5u#;
+ currentpicture := tmp_picture;
+ pickup rule.nib0;
+ lft x3 = appr+hround 0.75u-eps;
+ x1 = 2integral_x-x3+disp_stem;
+ x2=x4=0.5[x1,x3];
+ top y2 = vround(0.5[-d, h]+5.25u)+eps;
+ 0.5[y2, y4] = 0.5[-d, h] = y1 = y3;
+ draw z1 up_to_left z2 left_to_down z3
+ down_to_right z4 right_to_up z1;
+ labels(1,2,3,4);
+endchar;
+
+beginchar(Bintegral_dblcont, 16u#+2appr#, 0,200/54dh#);
+ "Displaystyle double contour integral sign";
+ italcorr 4.5u#;
+ currentpicture := tmp_picture+(tmp_picture shifted (hround 9u, 0));
+ pickup rule.nib0;
+ lft x3 = appr-eps;
+ x1 = 2integral_x-x3+disp_stem+hround 9u;
+ x2=x4=0.5[x1,x3];
+ top y2 = vround(0.5[-d, h]+6u)+eps;
+ 0.5[y2, y4] = 0.5[-d, h] = y1 = y3;
+ draw z1 up_to_left z2 left_to_down z3
+ down_to_right z4 right_to_up z1;
+ labels(1,2,3,4);
+endchar;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathbsym.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathbsym.mf
new file mode 100644
index 00000000000..f8855a3736d
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathbsym.mf
@@ -0,0 +1,264 @@
+% 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,
+ math_axis-0.5spread1,math_axis-0.5spread2,math_axis-0.5spread3,
+ math_axis-0.5spread4,
+ math_axis+0.5spread1,math_axis+0.5spread2,math_axis+0.5spread3,
+ math_axis+0.5spread4,
+enddef;
+
+%%% !!! marked signs are to be revised
+
+use_rule1;
+
+% standard
+
+beginchar(hex"20",6u#+2letter_fit#,0,0);
+ "Normal space";
+endchar;
+
+% hex"00"
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Top dot plus sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+ lft x1l=hround 0.5(w-rth); x2=x1;
+ lft x3=Appr; x1-x3=x4-x1=y1-y3=y3-y2; y3=y4=math_axis;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ pickup null.nib;
+ adjust_dot5((x1,y3+6.5u+0.5dtsz),dtsz,true,false); dot(5,5');
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Top dot minus sign";
+ pickup tiny.nib;
+ lft x1=Appr; rt x2=w-Appr;
+ y2=y1=math_axis; pos1(rth,90); pos2(rth,90);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+ adjust_dot3((0.5[x1,x2],y1+math_spread[0.5x_height,0.6x_height]),
+ dtsz,true,false); dot(3,3');
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Top dot times sign";
+ pickup rule.nib; x0=good.x 0.5w;
+ pickup tiny.nib; rt x0'=w-Appr; y0=y0'=math_axis;
+ z1-z0=z0-z2=(z0'-z0) rotated 45; z3-z0=z0-z4=(z0'-z0) rotated -45;
+ pos1(rth+2eps,-45); pos2(rth+2eps,-45);
+ pos3(rth+2eps,45); pos4(rth+2eps,45);
+ filldraw stroke z1e..z2e; filldraw stroke z4e..z3e;
+ pickup null.nib;
+ adjust_dot5((x0,y0+5.5u+0.5dtsz),dtsz,true,false); dot(5,5');
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Bot dot minus sign";
+ pickup tiny.nib;
+ lft x1=Appr; rt x2=w-Appr;
+ y2=y1=math_axis; pos1(rth,90); pos2(rth,90);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+ adjust_dot3((0.5[x1,x2],y1-math_spread[0.5x_height,0.6x_height]),
+ dtsz,true,false); dot(3,3');
+endchar;
+
+beginchar(currentlocation,3u#+2appr#,cap_height#,0);
+ "Cap centered dot";
+ pickup null.nib;
+ adjust_dot1((0.5w,0.5h),1.2dtsz,false,false);
+ dot(1,1');
+endchar;
+
+beginchar(currentlocation,7u#+2appr#,v_center(7u#));
+ "Small box";
+ pickup tiny.nib;
+ a:=sqrt(3.14159)*0.5*max(7u,dtsz+rth0);
+ top y1r=top y2r=vround(math_axis+0.5a);
+ bot y3r=bot y4r=top y1r-vround a;
+ lft x1r=lft x4r=hround 0.5(w-a);
+ rt x2r=rt x3r=lft x1r+hround a;
+ rt x1l-lft x1r=rt x2r-lft x2l
+ =rt x3r-lft x3l=rt x4l-lft x4r=rth0;
+ top y1r-bot y1l=top y2r-bot y2l
+ =top y3l-bot y3r=top y4l-bot y4r=rth0;
+ filldraw stroke z1e--z2e--z3e--z4e--z1e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Large asterisk";
+ autorounded;
+ interim stress:=0.5; pickup null.nib;
+ numeric b,c,dag_curve,dag_stem; spread:=12u;
+ b=2.6hair; c=0.625b; dag_curve=round 1.1cap_curve; dag_stem=hair;
+ %
+ x0=hround(0.5w-0.5dag_curve)+0.5dag_curve;
+ y0=0.5[-d,h];
+ for $=1 upto 6: z[$]=b*dir($*60+30)+z0;
+ z[$]'=c*dir($*60+60)+z0; endfor
+ filldraw for $=1 upto 6: dagger_stroke[$](round(0.5spread-b)+eps,
+ dag_curve,dag_stem,dir($*60+30))...z[$]'...endfor cycle;
+ labels(0,1',2',3',4',5',6');
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Large co-asterisk";
+ autorounded;
+ interim stress:=0.5;
+ pickup null.nib;
+ numeric b,c,dag_curve,dag_stem; spread:=12u;
+ b=2.6hair; c=0.625b; dag_curve=round 1.1cap_curve; dag_stem=hair;
+ %
+ x0=hround(0.5w-0.5dag_curve)+0.5dag_curve;
+ y0=0.5[-d,h];
+ for $=1 upto 6: z[$]=b*dir($*60-60)+z0;
+ z[$]'=c*dir($*60-30)+z0; endfor
+ filldraw for $=1 upto 6: dagger_stroke[$](round(0.5spread-b)+eps,
+ dag_curve,dag_stem,dir($*60-60))...z[$]'...endfor cycle;
+ labels(0,1',2',3',4',5',6');
+endchar;
+
+% beginchar(currentlocation,arithmetic_bounds);
+% "Top dot truc sign";
+% pickup tiny.nib;
+% pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+% top y1=top y3r=top y4r=h; bot y2=-d;
+% lft x1l=hround 0.5(w-rth); x2=x1;
+% lft x3=Appr; x1-x3=x4-x1; filldraw stroke z1e..z2e;
+% filldraw stroke z3e..z4e; pickup null.nib;
+% adjust_dot5((x1,h+u+0.5dtsz),dtsz,true,false); dot(5,5');
+% penlabels(1,2,3,4);
+% endchar;
+
+% beginchar(currentlocation,arithmetic_bounds);
+% "Top dot curT sign";
+% pickup tiny.nib;
+% pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+% bot y1=bot y3l=bot y4l=-d; top y2=h;
+% lft x1l=hround 0.5(w-rth); x2=x1;
+% lft x3=appr; x1-x3=x4-x1; filldraw stroke z2e..z1e;
+% filldraw stroke z3e..z4e; pickup null.nib;
+% adjust_dot5((x1,h+u+0.5dtsz),dtsz,true,false); dot(5,5');
+% penlabels(1,2,3,4);
+% endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Top circ plus sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+ lft x1l=hround 0.5(w-rth); x2=x1;
+ lft x3=Appr; x1-x3=x4-x1=y1-y3=y3-y2; y3=y4=math_axis;
+ filldraw stroke z1e..z2e; % stem
+ filldraw stroke z3e..z4e; % crossbar
+ pickup rule.nib0;
+ adjust_dot5((x1,y3+6u+0.5rth0+1.5u),3u+rth0,true,false);
+ full_dot:=false; dot(5,5');
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Plus circle sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+ lft x1l=hround 0.5(w-rth); x2=x1;
+ lft x3=Appr; x1-x3=x4-x1=y1-y3=y3-y2; y3=y4=math_axis;
+ filldraw stroke z1e..z2e; % stem
+ filldraw stroke z3e..z4e; % crossbar
+ pickup rule.nib; z0=(x1,y3);
+ rt x5=ceiling rt 0.75[Appr,w-Appr]+eps; y5=y0;
+ z5-z0=z0-z7; z6-z0=z0-z8=(z5-z0) rotated 90;
+ draw superellipse(z5,z6,z7,z8,superness);
+ penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Convolution sign";
+ numeric darkness; darkness=0.8;
+ pickup rule.nib; x0=good.x 0.5w;
+ pickup tiny.nib; rt x1=w-Appr; y0=y1=y1'=y1''=math_axis;
+ x1'=min(x0+2.5rth,0.5[x0,x1]); x1''=min(x0+1.25rth,0.25[x0,x1]);
+ forsuffixes $=,':
+ z1$-z0=z0-z2$; z3$-z0=z0-z4$=(z1$-z0) rotated 45;
+ z5$-z0=z0-z6$=(z1$-z0) rotated 90;
+ z7$-z0=z0-z8$=(z1$-z0) rotated -45;
+ pos1$(rth,90); pos2$(rth,90); pos3$(rth,135); pos4$(rth,135);
+ pos5$(rth,0); pos6$(rth,0); pos7$(rth,45); pos8$(rth,45);
+ penlabels(1$,2$,3$,4$,5$,6$,7$,8$);
+ endfor
+ z1''-z0=z0-z2''; z3''-z0=z0-z4''=(z1''-z0) rotated 45;
+ z5''-z0=z0-z6''=(z1''-z0) rotated 90;
+ z7''-z0=z0-z8''=(z1''-z0) rotated -45;
+ pos1''(darkness*rth,90); pos2''(darkness*rth,90);
+ pos3''(darkness*rth,135); pos4''(darkness*rth,135);
+ pos5''(darkness*rth,0); pos6''(darkness*rth,0);
+ pos7''(darkness*rth,45); pos8''(darkness*rth,45);
+ penlabels(1'',2'',3'',4'',5'',6'',7'',8'');
+ filldraw stroke z2e---z2'e...z2''e---z1''e...z1'e---z1e;
+ filldraw stroke z4e---z4'e...z4''e---z3''e...z3'e---z3e;
+ filldraw stroke z5e---z5'e...z5''e---z6''e...z6'e---z6e;
+ filldraw stroke z8e---z8'e...z8''e---z7''e...z7'e---z7e;
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Divide on times sign";
+ numeric darkness; darkness=0.8;
+ pickup rule.nib; x0=good.x 0.5w;
+ pickup tiny.nib; rt x1=w-Appr; y0=y1=y1'=y1''=math_axis;
+ x1'=min(x0+2.5rth,0.5[x0,x1]); x1''=min(x0+1.25rth,0.25[x0,x1]);
+ z1-z0=z0-z2; z1'-z0=z0-z2'; z1''-z0=z0-z2'';
+ z3-z0=z0-z4=(z1-z0) rotated 45; z7-z0=z0-z8=(z1-z0) rotated 135;
+ pos1(rth,90); pos2(rth,90); pos1'(rth,90); pos2'(rth,90);
+ pos3(rth,135); pos4(rth,135); pos7(rth,225); pos8(rth,225);
+ pos1''(darkness*rth,90); pos2''(darkness*rth,90);
+ filldraw stroke z2e---z2'e...z2''e---z1''e...z1'e---z1e;
+ filldraw stroke z4e..z3e; filldraw stroke z8e..z7e;
+ pickup null.nib;
+ adjust_dot5((x0,y0+5.5u-0.5dtsz),dtsz,true,false); dot(5,5');
+ adjust_dot6((x0,y0-5.5u+0.5dtsz),dtsz,true,false); dot(6,6');
+ penlabels(1,1',1'',2,2',2'',3,4,7,8);
+endchar;
+
+beginchar(currentlocation,7u#+2appr#,v_center(7u#));
+ "Small full diamond";
+ pickup tiny.nib;
+ a:=sqrt(3.14159)*0.5*max(7u,dtsz+rth0)-0.5rth0;
+ y2=y4=good.y math_axis; x1=x3=good.x 0.5w;
+ y1-y2=y2-y3=vround(0.5a*sqrt(2)-tiny)+eps;
+ x2-x1=x1-x4=hround(0.5a*sqrt(2)-tiny)+eps;
+ fill z1--z2--z3--z4--cycle;
+ labels(1,2,3,4);
+endchar;
+
+beginchar(currentlocation,7u#+2appr#,v_center(7u#));
+ "Small full box";
+ pickup tiny.nib;
+ a:=sqrt(3.14159)*0.5*max(7u-rth0,dtsz);
+ top y1=top y2=vround(math_axis+0.5a);
+ bot y3=bot y4=top y1-vround a;
+ lft x1=lft x4=hround 0.5(w-a);
+ rt x2=rt x3=lft x1+hround a;
+ filldraw z1--z4--z3--z2--cycle;
+ labels(1,2,3,4);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Big five star";
+ pickup tiny.nib;
+ draw_star.a((0.5w,math_axis),5,6u+o,0.1,90,false);
+ labels(a);
+endchar;
+
+beginchar(currentlocation,arithmetic_bounds);
+ "Big six star";
+ pickup tiny.nib;
+ draw_star.a((0.5w,math_axis),6,6u+o,0.3,90,false);
+ labels(a);
+endchar;
+
+% hex"10"
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathc10.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathc10.mf
new file mode 100644
index 00000000000..a64516bda8e
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathc10.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathu10.mf (math serie U at 10 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathc"; font_size 10pt#;
+font_coding_scheme "mathc";
+
+input mathprmt;
+input mathcdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathcall.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathcall.mf
new file mode 100644
index 00000000000..54c2c06236e
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathcall.mf
@@ -0,0 +1,1464 @@
+% mathematical symbols by Anthony Phan.
+% file: mathcall.mf (calligraphic font)
+% last modification: May 16, 2005.
+
+%
+% LOWERCASE
+%
+% design, metrics and italic corrections checked (nov. 28, 2002).
+%
+
+cmchar "Calligraphic a";
+beginchar("a", 9u#, x_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ x_height#*slant+0.5lower_cal_width#-2u#) if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = vround 0.98h; x1 = x2 = good.x(w-2.5u); x4 = w;
+ draw z1..hook_out(2, 3, 4);
+ top y6 = x_height+oo; bot y8 = -oo; y5 = y7 = 0.5[y6, y8];
+ x5 = x1; x7 = good.x(1.25u); x6 = x8 = 0.5[x5, x7];
+ draw z5 up_to_left z6 left_to_down z7
+ down_to_right z8 right_to_up z5;
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic b";
+beginchar("b", 8u#, asc_height#, 0);
+ italcorr .75x_height#*slant+0.5curve#-u# if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h; y2 = 0.5x_height; bot y3 = -oo;
+ y4 = 0.5x_height; top y5 = x_height+oo;
+ x1 = x2 = good.x 1.5u; x3 = 0.5[x2, x4];
+ x4 = good.x(w-1.25u); x5 = 0.5[x2, x4];
+ draw z1-cal.extension--z1..z2{down}
+ ...z3{right}...z4{up}...z5{left}...z2{down};
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5);
+endchar;
+
+cmchar "Calligraphic c";
+beginchar("c", 8u#, x_height#, 0);
+ italcorr max(0.25x_height#*slant+0.5lower_cal_width#,
+ 0.85x_height#*slant+0.5lower_cal_width#-1.1u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x2-x1 = hround u; rt x2 = hround(w-1.1u);
+ if x2 > w-1.25u: x2 := good.x w-1.25u; fi
+ x3 = 0.6[x4, x2]; x4 = good.x 1.25u;
+ x5 = 0.5[x4, x6]; x6 = good.x w;
+ top y3 = h+oo; y4 = .5h; bot y5 = -oo;
+ y1 = good.y 0.65[y5, y3]; y2 = .8[y5, y3];
+ y6 = good.y 1/4x_height;
+ draw z1 ... z2 up_to_left z3 left_to_down
+ z4 down_to_right z5...z6;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+cmchar "Calligraphic d";
+beginchar("d", 9u#, asc_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ h#*slant+0.5lower_cal_width#-2u#) if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h; x1 = x2 = good.x(w-2.5u); x4 = w;
+ draw z1-cal.extension--z1---hook_out(2, 3, 4);
+ top y6 = x_height+oo; bot y8 = -oo; y5 = y7 = 0.5[y6, y8];
+ x5 = x1; x7 = good.x(1.25u); x6 = x8 = 0.5[x5, x7];
+ draw z5 up_to_left z6 left_to_down z7
+ down_to_right z8 right_to_up z5;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic e";
+beginchar("e", 8u#, x_height#, 0);
+ italcorr max(0.25x_height#*slant+0.5lower_cal_width#,
+ 0.85x_height#*slant+0.5lower_cal_width#-1.1u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ rt x1 = hround(w-1.1u); x2 = 0.6[x3, x1];
+ if x1 > w-1.25u: x1 := good.x w-1.25u; fi
+ x3 = good.x 1.25u; x4 = 0.5[x3, x5]; x5 = good.x w;
+ y1 = 0.8[y4, y2]; top y2 = h+oo; y3 = .5h; bot y4 = -oo;
+ y5 = good.y 1/4x_height;
+ draw z3 right_to_up z1 up_to_left z2
+ left_to_down z3 down_to_right z4...z5;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5);
+endchar;
+
+cmchar "Calligraphic f";
+beginchar("f", 5.5u#, asc_height#, desc_depth#);
+ italcorr asc_height#*slant+.75u#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ z88 = (0.5w-0.5u, h); z89 = (0.5w+0.5u, -d);
+ top y2 = h+oo; bot y5 = -d-oo; top y8 = top y9 = x_height;
+ y2-y0 = y6-y5 = vround 0.35min(d, h-x_height);
+ y1 = 0.5[y0, y2]; y6 = 0.5[y5, y7];
+ y3 = 0.25[x_height, y2]; y4 = 0.5[y5, y3];
+ rt x1-w = -lft x6 = hround 0.25u; x7-x6 = hround 0.5u;
+ x0 = x1; x2 = 0.4[x1, x3]; x5 = 0.4[x6, x4];
+ z3 = whatever[z88, z89]; z4 = whatever[z88, z89];
+ lft x8 = hround(lft x3-0.5stem-1.25u);
+ rt x9 = hround(rt x3+0.5stem+1.7u);
+ draw (z0--z1) softjoin (z1 up_to_left z2....z3
+ ---z4....z5{left}...z6);%...z7);
+ draw z8..z9;
+ %
+ math_fit(desc_depth#*slant+u#, x_height#*slant);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic g";
+beginchar("g", 8u#, x_height#, desc_depth#);
+ italcorr x_height#*slant+0.5lower_cal_width#-u#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = vround 0.98h;
+ top y6 = x_height+oo; bot y8 = -oo; y5 = y7 = 0.5[y6, y8];
+ x1 = x2 = x5 = good.x(w-1.5u); x4 = 1.5u;
+ x7 = good.x(1.25u); x6 = x8 = 0.5[x5, x7];
+ draw z1..desc_curve(2, 3, 4);
+ draw z5 up_to_left z6 left_to_down z7
+ down_to_right z8 right_to_up z5;
+ %
+ math_fit(-min(.3x_height#*slant+0.5curve#-u#,
+ 1.5u#-desc_depth#*slant), ic#-1/3x_height#*slant);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic h";
+beginchar("h", 9u#, asc_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ 0.75x_height#*slant+0.5lower_cal_width#-2u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h; bot y2 = -oo;
+ x1 = x2 = good.x 1.5u;
+ x4 = w-2.45u; x5 = w-2.80u; x7 = w;
+ draw z1-cal.extension--z1--z2
+ --ital_arch(2, 3, 4)...hook_out(5, 6, 7);
+ %
+ math_fit(0, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic i";
+beginchar("i", 5u#, min(10/7x_height#+0.5flare#, asc_height#), 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ (h#-0.5flare#)*slant
+ -2.5u#-0.4(h#-x_height#)*slant+0.5flare#+0.5u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = good.x(0.5w+0.30u);
+ x4 = good.x(0.5w-0.30u); x6 = w;
+ draw hook_in(1, 2, 3)...hook_out(4, 5, 6);
+ %
+ pickup fine_cal.nib;
+ cal_dot7(0.5w-0.4(h-x_height)*slant, h+1-0.5flare, flare);
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 5, 6); penlabels(7, 7');
+endchar;
+
+cmchar "Calligraphic j";
+beginchar("j", 5u#, min(10/7x_height#+0.5flare#, asc_height#), desc_depth#);
+ italcorr max(0.8x_height#*slant+0.5lower_cal_width#-u#,
+ (h#-0.5flare#)*slant
+ -1.5u#+0.5lower_cal_width#-0.6(h#-x_height#)*slant+0.5u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = x4 = good.x(w-1.5u);
+ x6 = good.x 0; x0 = rt x3;
+ draw hook_in(1, 2, 3)..desc_curve(4, 5, 6);
+ %
+ pickup fine_cal.nib;
+ cal_dot7(x0-0.5flare-0.6(h-x_height)*slant, h+1-0.5flare, flare);
+ %
+ math_fit(desc_depth#*slant, x_height#*slant+0.5stem#-u#);
+ labels(1, 2, 3, 4, 5, 6); penlabels(7, 7');
+endchar;
+
+cmchar "Calligraphic k";
+beginchar("k", 8.5u#, asc_height#, 0);
+ italcorr max(0.2x_height#*slant+0.1w#,
+ 0.95x_height#*slant-0.1w#+0.5u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h; bot y2 = -oo; x1 = x2 = good.x 1.5u;
+ draw z1-cal.extension--z1--z2;
+ %
+ rt x4 = .9w; x5 = x4-.1w; x7 = .8w; rt x8 = 1.1w;
+ y4 = .9x_height; top y5 = x_height+oo; bot y7 = -oo; y8 = .2x_height-oo;
+ (lft z6)t_ = (x2, 0.4x_height).t_+penoffset up of pen_[lower_cal.nib];
+ draw z4{up}...{left}z5..tension atleast 2..{down}z6
+ ..tension atleast 3 and atleast 2..z7{right}...{up}z8; % diagonals
+ %
+ math_fit(0, 1/3x_height#*slant+0.5hair#+0.5u#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic l";
+beginchar("l", 4.5u#, asc_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ asc_height#*slant+0.5lower_cal_width#-2.1u#) if math_fitting: +0.5u# fi;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h; x1 = x2 = good.x 1.9u; x4 = w;
+ draw z1-cal.extension--z1---hook_out(2, 3, 4);
+ %
+ math_fit(-0.5u#, 1/3x_height#*slant+0.5hair#+u#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic m";
+beginchar("m", 15u#, x_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ 0.75x_height#*slant+0.5lower_cal_width#-2u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = x4 = good.x 2.5u; x6 = x7 = good.x 0.5w;
+ x9 = good.x(w-2.45u); x10 = good.x(w-2.80u); x12 = w;
+ bot y4 = bot y7 = -oo;
+ draw hook_in(1, 2, 3)---z4;
+ draw ital_arch(4, 5, 6)---z7;
+ draw ital_arch(7, 8, 9)...hook_out(10, 11, 12);
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
+endchar;
+
+cmchar "Calligraphic n";
+beginchar("n", 10u#, x_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ 0.75x_height#*slant+0.5lower_cal_width#-2u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = x4 = good.x 2.5u; bot y4 = -oo;
+ x6 = good.x(w-2.45u); x7 = good.x(w-2.80u);
+ x9 = w;
+ draw hook_in(1, 2, 3)---z4;
+ draw ital_arch(4, 5, 6)...hook_out(7, 8, 9);
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+endchar;
+
+cmchar "Calligraphic o";
+beginchar("o", 9u#, x_height#, 0);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);%(-0.25u#, -0.25u#);
+ %
+ pickup lower_cal.nib;
+ top y1 = h+oo; bot y3 = -oo; y2 = y4 = 0.5[y1, y3];
+ x2 = good.x 1.25u; x4 = good.x(w-1.25u); x1 = x3 = 0.5[x2, x4];
+ draw z1 left_to_down z2 down_to_right
+ z3 right_to_up z4 up_to_left z1;
+ % not good
+% x5 = good.x 0.75[x2, x1]; x6 = 0.5[x5, x7]; x7 = good.x w;
+% y5 = 0.75[y6, y1]; y6 = good.y 0.6[y3, y1]; y7 = good.y 3/4x_height;
+% draw z1{left}...z5 down_to_right z6...z7;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic p";
+beginchar("p", 9u#, x_height#, desc_depth#);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = x4 = good.x 2.5u; bot y4 = -d-eps;
+ draw hook_in(1, 2, 3)..z4;
+ top y6 = x_height+oo; bot y8 = -oo; y5 = y7 = 0.5[y6, y8];
+ x5 = good.x(w-1.25u); x7 = x3; x6 = x8 = 0.5[x5, x7];
+ draw z5 up_to_left z6 left_to_down z7
+ down_to_right z8 right_to_up z5;
+ %
+ math_fit(-min(2/3x_height#*slant-0.5hair#-0.5u#,
+ 2u#-0.5stem#-desc_depth#*slant), ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic q";
+beginchar("q", 8u#, x_height#, desc_depth#);
+ italcorr x_height#*slant+0.5lower_cal_width#-u#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = vround 0.98h; bot y2 = -d-eps;
+ x1 = x2 = good.x(w-1.5u);
+ draw z1--z2--z2+cal.extension;
+ top y6 = x_height+oo; bot y8 = -oo; y5 = y7 = 0.5[y6, y8];
+ x5 = x1; x7 = good.x(1.25u); x6 = x8 = 0.5[x5, x7];
+ draw z5 up_to_left z6 left_to_down z7
+ down_to_right z8 right_to_up z5;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#-1/3x_height#*slant);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic r";
+beginchar("r", 7.25u#, x_height#, 0);
+ italcorr 0.8x_height#*slant+0.5lower_cal_width#-0.15u#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = x4 = good.x 2.5u; bot y4 = -oo;
+ draw hook_in(1, 2, 3)---z4;
+ y5 = y2; y7 = good.y 0.65[y4, y5]; y6 = .8[y4, y5];
+ x6 = good.x(w-0.65u); x6-x7 = hround 0.75u; x5 = 0.75[x4, x6];
+ draw z4{up}...z5 right_to_down z6...z7;
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#-0.5u#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic s";
+beginchar("s", 5.25u#+1.75u#, x_height#, 0);
+ italcorr 0.9x_height#*slant-0.05w#+0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ rt x0 = rt x1 = .95w; x2 = .5[x3, x1]; lft x3 = .15w; x4 = .5[x6, x2];
+ rt x5 = w; x6 = .5w; lft x7 = 0; lft x8 = .075w;
+ y0 = .8h; y1 = .9h; top y2 = h+o; y3 = .55[y4, y2]; y4 = .55[y6, y2];
+ y5 = .45[y6, y4]; bot y6 = -o; y7 = .2h; y8 = .35h;
+ draw\\(z0--z1) softjoin (z1...z2{left}...z3{down}...z4...z5{down}
+ ...z6{left}...z7) softjoin (z7{up}...{right}z8); % stroke
+ math_fit(0, ic#);
+ labels(0, 1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic t";
+beginchar("t", 5.5u#, min(asc_height#, 10/7x_height#), 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ x_height#*slant-.25u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h; x1 = x2 = good.x 2u; x4 = w;
+ draw z1---hook_out(2, 3, 4);
+ lft x5 = hround -0.75u; rt x6 = hround(w-0.65u);
+ top y5 = top y6 = x_height;
+ draw z5..z6;
+ %
+ math_fit(1.25u#-x_height#*slant, ic#);
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+cmchar "Calligraphic u";
+beginchar("u", 9.5u#, x_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ x_height#*slant+0.5lower_cal_width#-2u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = good.x(2.80u); x4 = good.x(2.3u);
+ x5 = 0.5[x4, x6]; x6 = x7 = x8 = good.x(w-2.5u); x10 = w;
+ y4 = 0.7[y5, y6]; bot y5 = -oo; y6 = 0.57h; top y7 = h;
+ draw hook_in(1, 2, 3)...z4 down_to_right z5...z6{up};
+ draw z7..hook_out(8, 9, 10);
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 6, 7, 8, 9, 10);
+endchar;
+
+%cmchar "Calligraphic v";
+% beginchar("v", 8u#, x_height#, 0);
+% italcorr 0.8x_height#*slant;
+% adjust_fit(0, 0.5u#);
+% %
+% pickup lower_cal.nib;
+% x1 = 0; top y1 = h; z3 = (.48w, 0);
+% z0.t_ = z2.t_+penoffset down of currentpen
+% = z3.t_+penoffset down of pen_[tilted.nib];
+% draw z1{right}..tension atleast 1 and infinity..z2; % left diagonal
+% pickup tilted.nib;
+% rt x4 = w; x5 = x4-.2w; top y4 = .8h; top y5 = h;
+% path p; p = z3..tension atleast 3 and 1..{up}z4;
+% erase fill z0--(x0, y0-0.5h)--(x4, y0-0.5h)--(x4+eps, y4)--reverse p--cycle;
+% draw p...{left}z5; % right diagonal
+% %
+% math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, 2/3ic#);
+% labels(0, 1, 2, 3, 4, 5);
+% endchar;
+
+cmchar "Calligraphic v";
+beginchar("v", 8.75u#, x_height#, 0);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi; % same as "o"
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = good.x(2.80u); x4 = good.x(2.3u);
+ x5 = 0.5[x4, x6]; x6 = good.x(w-1.25u); x7 = good.x(w-2.25u);
+ y4 = 0.7[y5, y6]; bot y5 = -oo; y6 = 0.57h; top y7 = h+oo;
+ draw hook_in(1, 2, 3)...z4 down_to_right z5...z6{up}...z7;
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic w";
+% beginchar("w", 12.3u#, x_height#, 0);
+% italcorr 0.8x_height#*slant;
+% adjust_fit(0.2u#, 0.5u#);
+% %
+% pickup lower_cal.nib;
+% x1 = 0; x3 = .5[x1, x6]; x6 = .52w;
+% x9 = .58[x6, x10]; y3 = y9 = 0; top y1 = top y6 = h;
+% z7 = .5[z8, z6]+bend; z4 = .5[z3, z5]+bend;
+% (z0)t_ = (z2)t_+penoffset down of currentpen
+% = (z3)t_+penoffset down of pen_[tilted.nib];
+% (z20)t_ = (z8)t_+penoffset down of currentpen
+% = (z9)t_+penoffset down of pen_[tilted.nib];
+% draw z1{right}..tension atleast 1 and infinity..z2; % first diagonal
+% pickup tilted.nib;
+% x5 = x6; rt x10 = w;
+% x11 = x10-.1w; top y5 = h; top y10 = .8h; top y11 = h;
+% erase fill z0--(x0, y0-0.5h)--(x5, y0-0.5h)--z5..z4..z3--cycle;
+% draw z3..z4..z5; % second diagonal
+% pickup lower_cal.nib;
+% erase fill\\(.3w, bot y6)--(w, bot y6)--(w, top y6)--(.3w, top y6)--cycle;
+% draw z6..z7..z8; % third diagonal
+% pickup tilted.nib;
+% path p; p = z9..tension atleast 3 and 1..{up}z10;
+% erase fill z20--(x20, y20-0.5h)--(x10, y20-0.5h)--(x10+eps, y10)
+% --reverse p--cycle;
+% draw p..{left}z11; % fourth diagonal
+% %
+% math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, 3/4ic#);
+% labels(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 20);
+% endchar;
+
+cmchar "Calligraphic w";
+beginchar("w", 12.5u#, x_height#, 0);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi; % same as "o"
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = good.x(2.80u); x4 = good.x(2.3u);
+ x5 = 0.5[x4, x6]; x6 = x7 = good.x 0.5[2.5u,w-1.5u]; x8 = 0.5[x6,x9];
+ x9 = good.x(w-1.25u); x10 = good.x(w-2.25u);
+ y4 = 0.7[y5, y6]; bot y5 = bot y8 = -oo; y6 = y9 = 0.57h;
+ top y7 = top y10 = h+oo;
+ draw hook_in(1, 2, 3)...z4 down_to_right z5...z6---z7;
+ draw z6 down_to_right z8...z9{up}...z10;
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic x";
+beginchar("x", 8.25u#, x_height#, 0);
+ italcorr max(1/9x_height#*slant, 0.9x_height#*slant+.5u#);
+ adjust_fit(0, 0.25u#);
+ %
+ pickup lower_cal.nib;
+ lft x1 = .08w; lft x2 = .2w; x4-x3 = x2-x1; rt x4 = w;
+ h-y1 = y4 = 1/9h; top y2 = h; bot y3 = 0;
+ draw z1{up}....z2{right}
+ ... .2[z2+(.1w, 0), z3-(.1w, 0)]---.8[z2+(.1w, 0), z3-(.1w, 0)]
+ ...{right}z3....{up}z4; % left diagonal
+ x5 = x6-u; rt x6 = w; lft x7 = 0; x8 = x7+u;
+ top y5 = h; y6 = .85h; y7 = h-y6; bot y8 = 0;
+ draw z5{right}...z6{down}
+ ..tension atleast 3..{down}z7...{right}z8; % right diagonal
+ %
+ math_fit(0, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic y";
+beginchar("y", 8.5u#, x_height#, desc_depth#);
+ italcorr x_height#*slant+0.5lower_cal_width#-0.5u#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = good.x(2.80u); x4 = x10 = good.x(2.3u);
+ x5 = 0.5[x4, x6]; x6 = x7 = x8 = good.x(w-1.5u);
+ y4 = 0.7[y5, y6]; bot y5 = -oo; y6 = 0.57h; top y7 = h;
+ draw hook_in(1, 2, 3)...z4 down_to_right z5...z6{up};
+ draw z7..desc_curve(8, 9, 10);
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#-1/3x_height#*slant);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+endchar;
+
+cmchar "Calligraphic z";
+beginchar("z", 5.5u#+max(1.5u#, stem#), x_height#, 0);%desc_depth#);
+ italcorr x_height#*slant+0.5lower_cal_width#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ y1 = good.y 3/4x_height;
+ top y2 = h+oo; top y3 = vround 0.98h+eps;
+ bot y4 = -oo; bot y5 = -oo;
+ y6 = good.y 1/4x_height;
+ x1 = x4 = good.x u; x6 = good.x w; x6-x3 = hround 0.5u;
+ x2 = 0.25[x1, x3]; x5 = 0.25[x6, x4];
+ draw z1 ... z2{right}..{z3-z4}z3
+ --z4{z3-z4}..z5{right}... z6;
+ %
+ math_fit(0, 1/3x_height#*slant+0.5hair#+0.5u#);
+ labels(1, 2, 3, 5, 6);
+endchar;
+
+%
+% LATIN EXTENSION
+%
+% the three first have been checked: design, metrics
+% and italic corrections (nov. 28, 2002).
+%
+
+cmchar "Calligraphic dotless i";
+beginchar(hex"10", 5u#, x_height#, 0);% height
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ 0.8x_height#*slant+0.5lower_cal_width#-1.7u#);
+ italcorr 1/3x_height#*slant+0.5hair#+0.5u#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = good.x(0.5w+0.30u);
+ x4 = good.x(0.5w-0.30u); x6 = w;
+ draw hook_in(1, 2, 3)...hook_out(4, 5, 6);
+ %
+ math_fit(0, 0);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic dotless j";
+beginchar(hex"11", 5u#, x_height#, desc_depth#);
+ italcorr max(0.8x_height#*slant+0.5lower_cal_width#-u#,
+ 0.8x_height#*slant+0.5lower_cal_width#-0.5u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = x4 = good.x(w-1.5u);
+ x6 = good.x 0;
+ draw hook_in(1, 2, 3)..desc_curve(4, 5, 6);
+ %
+ math_fit(0, 0);
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+cmchar "Calligraphic es-zet";
+beginchar(oct"31", 8u#, asc_height#, desc_depth#);
+ italcorr max(.8h#*slant-.1w#, .5x_height#*slant)+.5u#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = x3 = good.x 1.5u; x4 = .6[x2, x5]; rt x5 = .9w; x6 = .4w;
+ rt x7 = w;
+ x8 = .4[x9, x7]; lft x9 = rt x3;
+ top y1 = x_height+oo; bot y3 = -d-eps; z2 = .3[z3, z1]+bend;
+ top y4 = h+oo; y5 = .6[y6, y4]; y6 = .55h; y7 = .45[y8, y6];
+ bot y8 = -oo; y9 = .1h;
+ draw z1-cal.extension--flex(z1, z2, z3); % stem
+ draw z2{up}...z4...z5{down}...{dir 200}z6{dir 10}
+ ...z7{down}...z8{left}...z9; % lobes
+ %
+ math_fit(.5u#, .3h#*slant+.5u#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+endchar;
+
+cmchar "Calligraphic ae";
+beginchar(oct"32", 13u#, x_height#, 0);
+ italcorr max(0.25x_height#*slant+0.5lower_cal_width#,
+ 0.85x_height#*slant+0.5lower_cal_width#-1.1u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h+oo; bot y3 = -oo; y2 = y4 = 0.5[y1, y3];
+ x2 = good.x 1.25u; x4 = good.x 0.5w;
+ x1 = 0.5[x2, x4]; x3 = 0.5[x2, x4];
+ draw z1 left_to_down z2 down_to_right
+ z3 right_to_up z4 up_to_left z1;
+ %
+ rt x5 = hround(w-1.1u); x6 = 0.6[x7, x5];
+ if x5 > w-1.25u: x5 := good.x w-1.25u; fi
+ x7 = x4; x8 = 0.5[x7, x9]; x9 = good.x w;
+ y5 = 0.8[y8, y6]; top y6 = h+oo; y7 = .5h; bot y8 = -oo;
+ y9 = good.y 1/4x_height;
+ draw z7 right_to_up z5 up_to_left z6
+ left_to_down z7 down_to_right z8...z9;
+ %
+ top y10=vround 0.98h; bot y11=0;
+ x10=x11=x4; draw z10..z11;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+endchar;
+
+cmchar "Calligraphic oe";
+beginchar(oct"33", 13u#, x_height#, 0);
+ italcorr max(0.25x_height#*slant+0.5lower_cal_width#,
+ 0.85x_height#*slant+0.5lower_cal_width#-1.1u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h+oo; bot y3 = -oo; y2 = y4 = 0.5[y1, y3];
+ x2 = good.x 1.25u; x4 = good.x 0.5w; x1 = x3 = 0.5[x2, x4];
+ draw z1 left_to_down z2 down_to_right
+ z3 right_to_up z4 up_to_left z1;
+ %
+ rt x5 = hround(w-1.1u); x6 = 0.6[x7, x5];
+ if x5 > w-1.25u: x5 := good.x w-1.25u; fi
+ x7 = x4; x8 = 0.5[x7, x9]; x9 = good.x w;
+ y5 = 0.8[y8, y6]; top y6 = h+oo; y7 = .5h; bot y8 = -oo;
+ y9 = good.y 1/4x_height;
+ draw z7 right_to_up z5 up_to_left z6
+ left_to_down z7 down_to_right z8...z9;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+endchar;
+
+cmchar "Calligraphic o/slash";
+beginchar(oct"34", 9u#, x_height#+0.5desc_depth#, 0.5desc_depth#);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);%(-0.25u#, -0.25u#);
+ %
+ pickup lower_cal.nib;
+ top y1 = x_height+oo; bot y3 = -oo; y2 = y4 = 0.5[y1, y3];
+ x2 = good.x 1.25u; x4 = good.x(w-1.25u); x1 = x3 = 0.5[x2, x4];
+ draw z1 left_to_down z2 down_to_right
+ z3 right_to_up z4 up_to_left z1;
+ %
+ pickup fine_cal.nib;
+ x5=good.x x4; x6=good.x x2; top y5=h+eps; bot y6=-d-eps; draw z5..z6;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+cmchar "Calligraphic AE";
+beginchar(oct"35",18u#,cap_height#,0);
+ italcorr max(h#*slant-.1w#,.2h#*slant)+.5u#;
+ adjust_fit(0,0); pickup cal.nib;
+ w':=hround 8.5u;
+ x1=.9[x3,x2]; rt x2=.9w'+w-w'; x3=.6[x4,x2]; lft x4=.05w'+w-w';
+ x5=.7[x6,x2]; lft x6=w-w'; x7=.5[x6,x8]; rt x8=w;
+ y1=y2-.1h; y2=.9h+o; top y3=h+o; y4=.5[y5,y3];
+ y5=.55h; y6=.6[y5,y7]; bot y7=-o; y8=.2h;
+ %
+ pickup tilted.nib;
+ lft x4'=.05w'+w-w';
+ w':=hround 14.4u;
+ lft x1'=.05w'; x2'=.2w';
+ y1'=y2'+.1h; bot y2'=bot_flourish_line;
+ y3'=y6; z3'=whatever[z2',z4]+2bend; y4'=y4;
+ draw\\(z1'..tension 1.2..{right}z2') softjoin (z2'...z3'...z4'{up});
+% left diagonal
+ pickup cal.nib;
+ draw\\(z1{2(x2-x1),y2-y1}...z2)
+ softjoin (z2...z3{left}...z4{down}...{right}z5); % upper arc
+ draw z5{left}...z6{down}...z7{right}...z8; % lower arc
+ draw rt z3'--z6; % bar
+ math_fit(.5u#-.2h#*slant,.2h#*slant+.5u#);
+ labels(1',2',3',4',1,2,3,4,5,6,7,8);
+endchar;
+
+cmchar "Calligraphic OE";
+beginchar(oct"36",16u#,cap_height#,0);
+ italcorr max(h#*slant-.1w#,.2h#*slant)+.5u#;
+ adjust_fit(0,0); pickup cal.nib;
+ w':=hround 8.5u;
+ x1=.9[x3,x2]; rt x2=.9w'+w-w'; x3=.6[x4,x2]; lft x4=.05w'+w-w';
+ x5=.7[x6,x2]; lft x6=w-w'; x7=.5[x6,x8]; rt x8=w;
+ y1=y2-.1h; y2=.9h+o; top y3=h+o; y4=.5[y5,y3];
+ y5=.55h; y6=.6[y5,y7]; bot y7=-o; y8=.2h;
+ draw\\(z1{2(x2-x1),y2-y1}...z2)
+ softjoin (z2...z3{left}...z4{down}...{right}z5); % upper arc
+ draw z5{left}...z6{down}...z7{right}...z8; % lower arc
+ %
+ w':=hround 12.6u;
+ x1'=.3w'; lft x2'=0; x3'=0.6[x2',x6]; x5'=0.75[x2',x4];
+ lft x6'=.27w';
+ top y1'=top y5'=h+o; y2'=.55h; bot y3'=-o; y6'=y2';
+ draw z1'...z2'{down}...z3'{right}...z6{up};
+ save p; path p; p = z4{up}...z5'{left}...{down}z6';
+ draw subpath (0,1.8) of p;
+ math_fit(.5u#-.2h#*slant,.2h#*slant+.5u#);
+ labels(1',2',3',5',6',1,2,3,4,5,6,7,8);
+endchar;
+
+cmchar "Calligraphic O/slash";
+beginchar(oct"37",12.6u#,cap_height#+0.25desc_depth#, 0.25desc_depth#);
+ italcorr .7h#*slant+.5u#;
+ adjust_fit(0,0); pickup cal.nib;
+ x1=.3w; lft x2=0; x3=.5w; rt x4=w; x5=.6w; lft x6=.27w;
+ top y1=top y5=cap_height+o; y2=.55cap_height;
+ bot y3=-o; y4=.5cap_height; y6=y2;
+ path p; p=z1...z2{down}...z3{right}...z4{up}...z5{left}...{down}z6;
+ draw subpath(0,4.8) of p; % bowl
+% pickup .nib;
+ top y7= vround(h+0.25desc_depth)+eps; bot y8=-hround(0.25desc_depth)-eps;
+ x7 = good.x x4; x8 = good.x 0.1[x2, x6]; draw z7..z8;
+ math_fit(.5u#-.3h#*slant,ic#-.5u#);
+ labels(1,2,3,4,5,6);
+endchar;
+
+%
+% DIGITS
+%
+
+beginchar("0", 9u#, fig_height#, 0);
+ "The digit 0";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ numeric a; a = min(0.25h, 0.5(x_height-o));
+ top y1 = h+o; bot y3 = -o; y2 = y4 = 0.5[y1, y3];
+ lft x2 = hround max(0.7u, lft 1.45u); x4 = w-x2;
+ x1 = x3 = 0.5[x2, x4];
+ draw z1 left_to_down z2 down_to_right z3
+ right_to_up z4 up_to_left z1;
+ labels(1, 2, 3, 4);
+ math_fit(0, 0.5ic#);
+endchar;
+
+beginchar("1", 9u#, fig_height#, 0);
+ "The digit 1";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ top y2 = h+o; bot y3 = -max(hround(0.05h)+eps, oo); y1 = good.y 0.35[y2, y3];
+ rt x2-lft x1 = hround 4.875u; rt x2 = w-hround 2.125u;
+ rt x3 = w-hround 3.75u;
+ draw z1{x2-x1, 0.5(y2-y1)}...z2 & z2{x3-x2, 0.4(y3-y2)}...{down}z3;
+ labels(1, 2, 3);
+ math_fit(0, 0.5ic#);
+endchar;
+
+beginchar("2", 9u#, fig_height#, 0);
+ "The digit 2";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ top y2 = h+o; bot y5 = bot y6 = 0; y1 = y3 = good.y 0.75h;
+ lft x1 = lft x5+eps = hround u; rt x3 = rt x6-eps = w-hround u;
+ x2 = x4 = 0.5[x1, x3]; y4 = 0.4[y5, y3];
+ draw z1 up_to_right z2 right_to_down z3...z4---z5--z6;
+ labels(1, 2, 3, 4, 5, 6);
+ math_fit(0, 0.5ic#);
+endchar;
+
+% beginchar("3", 9u#, fig_height#, 0);
+% "The digit 3";
+% italcorr fig_height#*slant-0.5u#;
+% adjust_fit(0, 0);
+% pickup lower_cal.nib;
+% bot y2 = -o; top y5 = top y6 = x_height;
+% y1 = good.y 1/4x_height;
+% y3 = a; y5-y4 = y3-y2; top y7 = top y8 = h;
+% rt x3 = w-hround u; x3 = x4 = x7+hround 0.5u-eps;
+% lft x1 = hround u; x1+hround 0.5u-eps = x8;
+% lft x6 = hround 3u-eps;
+% x2 = x5 = 0.5[x1, x3];
+% draw z1 ... z2 right_to_up z3..z4 up_to_left z5--z6--z7--z8;
+% labels(1, 2, 3, 4, 5, 6, 7, 8);
+% math_fit(0, 0.5ic#);
+% endchar;
+
+beginchar("3", 9u#,fig_height#,0);
+ "The digit 3";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0,0); pickup lower_cal.nib;
+ lft x2 = hround 1.25u; x3=.46[x2,x4]; x4=good.x(w-2u);
+ x5=.7[x6,x2]; x6= good.x(w-1.25u); x7=.5[x6,x8]; lft x8 = hround u;
+ x1=good.x 0.6[x5, x2];
+ %y1=y2-.1h;
+ y2=.85h+oo; top y3=h+oo; y4=.5[y5,y3];
+ y5=good.y .55h; y6=.5[y5,y7]; bot y7=-oo; y8=good.y 1/4x_height;
+ y1 = good.y 0.55[y5, y3];
+ draw\\(z1{2(x2-x1),y2-y1}...z2)
+ softjoin (z2...z3 right_to_down z4...{left}z5); % upper arc
+ draw z5 right_to_down z6...z7{left}...z8; % lower arc
+ math_fit(.5u#-.2h#*slant,.2h#*slant+.5u#);
+ labels(1,2,3,4,5,6,7,8);
+endchar;
+
+beginchar("4", 9u#, fig_height#, 0);
+ "The digit 4";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ top y1 = h+o; bot y5 = -max(hround(0.05h)+eps, oo); top y4 = x_height+eps;
+ y2 = y3 = good.y(0.5x_height);
+ rt x3 = w-hround 0.1u+eps;
+ lft x2 = hround 0.5u-eps;
+ x1 = good.x 0.33[x2, x3];
+ x4 = good.x 0.725[x2, x3];
+ x5 = good.x 0.475[x2, x3];
+ draw z1{down}...z2--z3; draw z4{x5-x4, 0.45(y5-y4)}..z5{down};
+ labels(1, 2, 3, 4, 5);
+ math_fit(0, 0.5ic#);
+endchar;
+
+beginchar("5", 9u#, fig_height#, 0);
+ "The digit 5";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ bot y2 = -o; top y4 = x_height+eps; y1 = good.y 1/4x_height;
+ y3 = 0.5[y2, y4]; y5 = good.y 0.2[y4, y2]; top y6 = top y7 = h;
+ rt x3 = w-hround u; x3 = x7+hround 0.5u-eps;
+ lft x1 = hround u; x1+hround 0.5u = x5 = x6;
+ x2 = x4 = 0.5[x1, x3];
+ draw z1 ... z2 right_to_up z3
+ up_to_left z4 ... z5&z5..{0.5(x6-x4), y6-y4}z6&z6..{x7-x5, 0.5(y7-y5)}z7;
+ labels(1, 2, 3, 4, 5, 6, 7);
+ math_fit(0, 0.5ic#);
+endchar;
+
+beginchar("6", 9u#, fig_height#, 0);
+ "The digit 6";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ top y2 = h+o; bot y4 = -o; y1 = good.y(h-0.2x_height);
+ top y6 = x_height+eps; y3 = 0.45[y4, y2]; y5 = 0.5[y4, y6];
+ lft x3 = hround max(0.7u, lft 1.45u); x5 = w-x3;
+ rt x1 = w-hround u; x2 = 0.6[x3, x1]; x4 = x6 = 0.5[x3, x5];
+ draw z1 ... z2{left} ... z3 down_to_right z4
+ right_to_up z5 up_to_left z6 ...z3;
+ labels(1, 2, 3, 4, 5, 6);
+ math_fit(0, 0.5ic#);
+endchar;
+
+beginchar("7", 9u#, fig_height#, 0);
+ "The digit 7";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ top y2 = top y3 = h+o; bot y4 = -max(hround(0.05h)+eps, oo);
+ y1 = good.y 0.3[y2, y4];
+ lft x1 = lft x2 = hround 0.75u; rt x3 = w-hround 0.25u;
+ x4 = good.x 0.4[x2, x3];
+ draw z1{0.2(x3-x1), y3-y1}..z2 & z2{x4-x2, 0.2(y4-y2)}..z3
+ &z3{x4-x3, 0.4(y4-y3)}..z4;
+ labels(1, 2, 3, 4);
+ math_fit(0, 0.5ic#);
+endchar;
+
+beginchar("8", 9u#, fig_height#, 0);
+ "The digit 8";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ bot y1 = vround 0.5h; bot y4 = -o;
+ y1-y2 = y1-y6 = y3-y4; y3 = y5 = a;
+ lft x2 = lft x3 = hround u;
+ rt x5 = rt x6 = w-hround u;
+ x1 = x4 = x7 = 0.5[x2, x6];
+ top y7 = h+o; y8 = y9 = 0.5[y7, y1];
+ lft x8 = w-rt x9 = hround 1.4u-eps;
+ draw z1 left_to_down z2..z3 down_to_right z4 right_to_up z5..z6
+ up_to_left z1; draw superellipse(z9, z7, z8, z1, superness);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+ math_fit(0, 0.5ic#);
+endchar;
+
+beginchar("9", 9u#, fig_height#, 0);
+ "The digit 9";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ bot y2 = -o; top y4 = h+o; y1 = good.y 0.2x_height;
+ bot y6 = h-x_height-eps; y3 = 0.45[y4, y2]; y5 = 0.5[y4, y6];
+ lft x5 = hround max(0.7u, lft 1.45u); x3 = w-x5;
+ lft x1 = hround u; x2 = 0.6[x3, x1]; x4 = x6 = 0.5[x3, x5];
+ draw z1 ... z2{right}... z3 up_to_left z4
+ left_to_down z5 down_to_right z6 ...z3;
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+ math_fit(0, 0.5ic#);
+endchar;
+
+%
+% PUNCTUATION
+%
+
+call_spanish_query:=0;
+call_spanish_shriek:=1;
+call_laquo:=2;
+call_raquo:=3;
+
+vardef complete_quote@#(expr $,$$)=
+ pickup lower_cal.nib;
+ bot y@#.c=hround 0.06h; y@#.b=good.y 0.5h; y@#.a-y@#.b=y@#.b-y@#.c;
+ if $$<0: lft x@#.a=lft x@#.c=rt x@#.b-(hround 4u+2eps)=$;
+ else: rt x@#.a=rt x@#.c=lft x@#.b+(hround 4u+2eps)=$; fi
+ draw z@#.a{(z@#.b-z@#.a) yscaled 3}..z@#.b
+ &z@#.b..{(z@#.c-z@#.b) yscaled 3}z@#.c;
+ labels(@#.a,@#.b,@#.c);
+enddef;
+
+beginchar("<",8u#,x_height#,0);
+ "French single opening quote";
+ complete_quote1(w-hround 2u+eps,1);
+endchar;
+
+beginchar(">",8u#,x_height#,0);
+ "French single closing quote";
+ complete_quote1(hround 2u-eps,-1);
+endchar;
+
+beginchar(call_laquo,10u#,x_height#,0);
+ "French double opening quote";
+ complete_quote1(w-hround u+eps,1);
+ complete_quote2(w-hround 4u+eps,1);
+endchar;
+
+beginchar(call_raquo,10u#,x_height#,0);
+ "French double closing quote";
+ complete_quote1(hround u-eps,-1);
+ complete_quote2(hround 4u-eps,-1);
+endchar;
+
+cmchar "Hash mark (number sign)";
+spread#:=math_spread[0.45x_height#,0.55x_height#];
+spread:=2ceiling(spread#*hppp/2)+eps;
+beginchar("#",15u#,asc_height#,asc_depth#);
+ italcorr (math_axis#+.5(spread#+rth1#))*slant-.5u#;
+ adjust_fit(0,0);
+ pickup lower_cal.nib; lft x1=hround u-eps; x3=x1; x2=x4=w-x1;
+ y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis;
+ draw z1--z2; % upper bar
+ draw z3--z4; % lower bar
+ lft x6=hround 3u; rt x7=hround(w-3u); x5-x6=x7-x8;
+ x8=good.x .5\\w;
+ top y5=top y7=h+eps; bot y6=bot y8=-d-eps;
+ y15=y1; z15=whatever[z5,z6]; y36=y3; z36=whatever[z5,z6];
+ y27=y2; z27=whatever[z7,z8]; y48=y4; z48=whatever[z7,z8];
+ draw z5--if x5>x6+1:(good.x(x15+.5),y1)--(good.x(x15-.5),y1)
+ --(good.x(x36+.5),y3)--(good.x(x36-.5),y3)--fi\\z6; % left diagonal
+ draw z7--if x7>x8+1:(good.x(x27+.5),y2)--(good.x(x27-.5),y2)
+ --(good.x(x48+.5),y4)--(good.x(x48-.5),y4)--fi\\z8; % right diagonal
+ labels(1,2,3,4,5,6,7,8,15,27,36,48);
+endchar;
+
+cmchar "Plus sign";
+beginchar("+",arithmetic_bounds);
+ pickup lower_cal.nib;
+ x1=x2=good.x .5w; top y1=h+eps; .5[y1,y2]=math_axis;
+ lft x3=hround u-eps; x4=w-x3; y3=y4=math_axis;
+ draw z1--z2; % stem
+ draw z3--z4; % crossbar
+ labels(1,2,3,4);
+endchar;
+
+beginchar("*",9u#,body_height#,0);
+ "Asterisk";
+ italcorr body_height#*slant-u#;
+ pickup lower_cal.nib;
+ top y1=h+eps; bot y2=h-x_height-eps;
+ x1=x2=good.x 0.5w;
+ x3=good.x (x1-3u*cosd 30);
+ x1-x3=x1-x6=x5-x1=x4-x1;
+ y3=good.y (0.5[y1,y2]+3u*sind 30);
+ y1-y3=y1-y5=y4-y2=y6-y2;
+ draw z1..z2; draw z3..z4; draw z5..z6;
+ labels(1,2,3,4,5,6);
+endchar;
+
+cmchar "Virgule (slash)";
+beginchar("/",9u#,body_height#,paren_depth#);
+ italcorr body_height#*slant-.5u#;
+ pickup fine_cal.nib;
+ rt x1=hround(w-u)+eps; top y1=h+eps;
+ lft x2=hround u-eps; bot y2=-d-eps;
+ draw z1--z2; % diagonal
+ labels(1,2);
+endchar;
+
+beginchar("=",14u#,v_center(spread#+rth1#));
+ italcorr h#*slant-.5u#;
+ adjust_fit(0,0); pickup lower_cal.nib;
+ lft x1=hround u-eps; x3=x1; x2=x4=w-x1;
+ y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis;
+ draw z1--z2; % upper bar
+ draw z3--z4; % lower bar
+ labels(1,2,3,4);
+endchar;
+
+cmchar "Calligraphic dot";
+beginchar(".", 5u#, dtsz#, 0);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ pickup fine_cal.nib;
+ cal_dot1(0.5w, 0.5dtsz, dtsz);
+ math_fit(0, 0);
+ penlabels(1, 1');
+endchar;
+
+cmchar "Calligraphic comma";
+beginchar(", ", 5u#, dtsz#, comma_depth#);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ cal_comma1(0.5w, 0.5dtsz, 1, -comma_depth);
+ math_fit(0, 0);
+endchar;
+
+cal_apostrophe=hex"27"; cal_reverse_apostrophe=hex"60";
+cal_opening_quotes=hex"5C"; cal_closing_quotes=hex"22";
+
+cmchar "Calligraphic apostrophe";
+beginchar(cal_apostrophe, 5u#, asc_height#, 0);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ cal_comma1(0.5w, h-0.5dtsz, 1, h-comma_depth-dtsz);
+ math_fit(0, 0);
+endchar;
+
+cmchar "Calligraphic reverse apostrophe";
+beginchar(cal_reverse_apostrophe, 5u#, asc_height#, 0);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ cal_comma1(0.5w, h-0.5dtsz-comma_depth,
+ -1, h);
+ math_fit(0, 0);
+endchar;
+
+cmchar "Calligraphic opening quotes";
+beginchar(cal_opening_quotes, 7u#+max(2u#, dtsz#),
+ asc_height#, 0);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ cal_comma1(w-0.6u-0.5dtsz,
+ h-0.5dtsz-comma_depth, -1, h);
+ cal_comma2(w-0.6u-0.5dtsz-1.5u-max(2u, dtsz),
+ h-0.5dtsz-comma_depth, -1, h);
+ math_fit(0, 0);
+endchar;
+
+cmchar "Calligraphic closing quotes";
+beginchar(cal_closing_quotes, 7u#+max(2u#, dtsz#),
+ asc_height#, 0);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ cal_comma1(0.6u+0.5dtsz,
+ h-0.5dtsz, 1, h-dtsz-comma_depth);
+ cal_comma2(0.6u+0.5dtsz+1.5u+max(2u, dtsz),
+ h-0.5dtsz, 1, h-dtsz-comma_depth);
+ math_fit(0, 0);
+endchar;
+
+cmchar "Calligraphic semicolon";
+beginchar(";", 5u#, x_height#, comma_depth#);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ pickup fine_cal.nib;
+ cal_dot1(0.5w, h-0.5dtsz, dtsz);
+ cal_comma2(0.5w, 0.5dtsz, 1, -comma_depth);
+ math_fit(0, 0);
+endchar;
+
+cmchar "Calligraphic colon";
+beginchar(":", 5u#, x_height#, 0);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ pickup fine_cal.nib;
+ cal_dot1(0.5w, 0.5dtsz, dtsz);
+ cal_dot2(0.5w, h-0.5dtsz, dtsz);
+ math_fit(0, 0);
+ penlabels(1, 1', 2, 2');
+endchar;
+
+cmchar "Calligraphic hyphen";
+beginchar("-", 6u#, x_height#, 0);
+ italcorr 0.5x_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ y1 = y3 = good.y 0.5h;
+ lft x1 = hround 0.2u-eps; rt x3 = hround(w-u)+eps;
+ z2 = 0.5[z1, z3];
+ draw z1{w, h}...z2{w, -0.5h}...z3{w, h};
+ math_fit(0, 0);
+ labels(1, 2, 3);
+endchar;
+
+cmchar "Calligraphic en-dash";
+beginchar(oct"173", 9u#, x_height#, 0);
+ italcorr 0.61803x_height#*slant+0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ y1 = y2 = good.y 0.61803h; lft x1 = -eps; rt x2 = w+eps;
+ draw z1..z2; math_fit(0, 0); labels(1, 2);
+endchar;
+
+cmchar "Calligraphic em-dash";
+beginchar(oct"174", 18u#, x_height#, 0);
+ italcorr 0.61803x_height#*slant+0.5u#;
+ adjust_fit(letter_fit#, letter_fit#);
+ pickup lower_cal.nib;
+ y1 = y2 = good.y 0.61803h; lft x1 = -eps; rt x2 = w+eps;
+ draw z1..z2; math_fit(0, 0); labels(1, 2, 3);
+endchar;
+
+beginchar("(", 6u#, asc_height#, desc_depth#);
+ italcorr asc_height#*slant;
+ adjust_fit(0, 0);
+ pickup med_cal.nib;
+ top y1 = h; bot y3 = -d; y2 = 0.5(y1+y3);
+ rt x1 = rt x3 = hround(w-0.5u); lft x2 = hround u;
+ draw z1{x2-x1, 0.5(y2-y1)}...z2{down}...{x3-x2, 0.5(y3-y2)}z3;
+ labels(1, 2, 3);
+ endchar;
+
+ beginchar(")", 6u#, asc_height#, desc_depth#);
+ italcorr asc_height#*slant;
+ adjust_fit(0, 0);
+ pickup med_cal.nib;
+ top y1 = h; bot y3 = -d; y2 = 0.5(y1+y3);
+ lft x1 = lft x3 = hround(0.5u); rt x2 = hround(w-u);
+ draw z1{x2-x1, 0.5(y2-y1)}...z2{down}...{x3-x2, 0.5(y3-y2)}z3;
+ labels(1, 2, 3);
+endchar;
+
+beginchar("[", 6u#, asc_height#, desc_depth#);
+ italcorr asc_height#*slant;
+ adjust_fit(0, 0);
+ pickup med_cal.nib;
+ top y1 = top y2 = h; bot y4 = bot y5 = -d; y3 = 0.5[y1, y5];
+ rt x1 = rt x5 = hround(w-0.25u); lft x2 = lft x4 = hround 1.25u;
+ lft x3 = hround 1.5u;
+ draw z1--z2...z3{down}...z4--z5;
+ labels(1, 2, 3, 4, 5);
+endchar;
+
+beginchar("]", 6u#, asc_height#, desc_depth#);
+ italcorr asc_height#*slant;
+ adjust_fit(0, 0);
+ pickup med_cal.nib;
+ top y1 = top y2 = h; bot y4 = bot y5 = -d; y3 = 0.5[y1, y5];
+ lft x1 = lft x5 = hround(0.25u); rt x2 = rt x4 = hround(w-1.25u);
+ rt x3 = hround(w-1.5u);
+ draw z1--z2...z3{down}...z4--z5;
+ labels(1, 2, 3, 4, 5);
+endchar;
+
+beginchar("!", 5u#, asc_height#, 0);
+ "Exclamation point";
+ italcorr asc_height#*slant-2u#+0.5curve#;
+ adjust_fit(0, 0);
+ pickup med_cal.nib;
+ x1=x2=good.x 0.5w;
+ top y2= h+eps;
+ cal_dot3(0.5w, 0.5dtsz, dtsz);
+ bot y1=ceiling 0.25[top y3.b, x_height]-eps;
+ draw z1..z2; labels(1, 2);
+endchar;
+
+beginchar(call_spanish_shriek, 5u#, asc_height#-desc_depth#, desc_depth#);
+ "Spanish shriek";
+ italcorr (charht-0.5dtsz#)*slant-2u#+0.5dtsz#;
+ adjust_fit(0, 0);
+ pickup med_cal.nib;
+ x1=x2=good.x 0.5w;
+ bot y2=-d-eps;
+ cal_dot3(0.5w, h-0.5dtsz, dtsz);
+ top y1=floor 0.25[bot y3.d, h-x_height]+eps;
+ draw z1..z2; labels(1, 2);
+endchar;
+
+cmchar "Question mark";
+beginchar("?", 9u#, asc_height#, 0);
+ italcorr 0.8asc_height#*slant-0.5u#;
+ pickup med_cal.nib;
+ cal_dot9(0.5w, 0.5dtsz, dtsz);
+ top y4 = h+oo; bot y7=ceiling 0.25[top y9.b, x_height]-eps;
+ y2=good.y 0.5[y7, y4]; y3=y5=0.5[y2,y4]; y1= good.y 0.4[y2,y3];
+ y6=1/9[y7,y4]; y8 = good.y 0.8[y7, y6];
+ x3=good.x 1.5u; x5=good.x(w-1.25u); x4=0.55[x3,x5]; x7=0.5w;
+ x1=good.x 0.5[x3,x5]; x2=0.25[x3,x5]; x6=good.x 2/3[x3,x4];
+ x8=good.x 0.5[x7,x5];
+ draw z1...z2 left_to_up z3 ...z4 right_to_down z5...z6 down_to_right z7...z8;
+ labels(1, 2, 3, 4, 5, 6,7,8);
+endchar;
+
+beginchar(call_spanish_query, 9u#, asc_height#-desc_depth#, desc_depth#);
+ "Spanish query";
+ pickup med_cal.nib;
+ cal_dot9(0.5w, h-0.5dtsz, dtsz);
+ bot y4 = -d-oo; top y7=ceiling 0.25[bot y9.d, h-x_height]+eps;
+ y2=good.y 0.5[y7, y4]; y3=y5=0.5[y2,y4]; y1=good.y 0.4[y2,y3];
+ y6=1/9[y7,y4]; y8 = good.y 0.8[y7,y6];
+ x3=good.x(w-1.5u); x5=good.x 1.25u; x4=0.55[x3,x5]; x7=0.5w;
+ x1=good.x 0.5[x3,x5]; x2=0.25[x3,x5]; x6=good.x 2/3[x3,x4];
+ x8=good.x 0.5[x7,x5];
+ draw z1...z2 right_to_down z3 ...z4 left_to_up z5...z6 up_to_left z7...z8;
+ labels(1, 2, 3, 4, 5, 6,7,8);
+endchar;
+
+% just look at italic corection and math fitting
+cmchar "Calligraphic ampersand";
+beginchar(oct"46", 14u#, asc_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ x_height#*slant+0.5lower_cal_width#-2u#) if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = vround 0.98x_height;
+ bot y2 = bot y7 = -oo;
+ top y5 = h+oo;
+ y3 = 0.5[y2, x_height]; y4 = y6 = 0.6[x_height, y5];
+ y8 = good.y 7/8[x_height, y7];
+ x1 = x7 = good.x(w-2.5u);
+ x3 = good.x 1.25u; x6 = good.x 3u;
+ x8 = good.x w; x2 = 5u; x4-x6=hround 3u; x5=0.6[x6,x4];
+ draw z1{down}...z2 left_to_up z3...z4 up_to_left z5 left_to_down z6
+ ...z7{right}...z8;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+%
+% ACCENTS
+%
+
+cmchar "Calligraphic grave accent";
+beginchar(oct"22", 9u#, min(asc_height#, 2x_height#), 0);
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup pencircle xscaled stem yscaled hair;
+ top y1 = h+eps; bot y2 = vround 1/3[x_height, h]-eps;
+ lft x1 = hround 1.75u; rt x2 = hround 2/3[x1, w-x1];
+ draw z1{x2-x1, 2(y2-y1)}..z2;
+ labels(1, 2);
+endchar;
+
+cmchar "Calligraphic acute accent";
+beginchar(oct"23", 9u#, min(asc_height#, 2x_height#), 0);
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup pencircle xscaled stem yscaled hair;
+ top y1 = h+eps; bot y2 = vround 1/3[x_height, h]-eps;
+ rt x1 = w-hround 1.75u; lft x2 = hround 2/3[x1, w-x1];
+ draw z1{x2-x1, 2(y2-y1)}..z2;
+ labels(1, 2);
+endchar;
+
+% HUM
+cmchar "Calligraphic tilde accent";
+beginchar(oct"176", 9u#,
+ min(asc_height#, 10/7x_height#+0.5flare#), 0);
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ bot y4 = vround 1/3[x_height, h]-eps;
+ top y2 = h+eps; y1 = y3 = y5 = good.y 0.5[y2, y4];
+ lft x1 = w-rt x5 = hround 1.25u;
+ x2 = 0.25[x1, x5]; x3 = 0.5[x1, x5]; x4 = 0.75[x1, x5];
+ draw z1{(z2-z1) yscaled 2}...z2{right}...
+ z3{(z4-z3)yscaled 2}...z4{right} ...{(z5-z4) yscaled 2}z5;
+ labels(1, 2, 3, 4, 5);
+endchar;
+
+cmchar "Calligraphic circumflex accent";
+beginchar(oct"136", 9u#, min(asc_height#, 2x_height#), 0);
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup pencircle xscaled stem yscaled hair;
+ top y2 = h+eps; bot y1 = bot y3 = vround 1/3[x_height, h]-eps;
+ lft x1 = w-rt x3 = hround 1.75u; x2 = good.x 0.5[x1, x3];
+ draw z1..{x2-x1, 2(y2-y1)}z2
+ &z2{x3-x2, 2(y3-y2)}..z3;
+ labels(1, 2, 3);
+endchar;
+
+cmchar "Calligraphic hacheck accent";
+beginchar(oct"24", 9u#, min(asc_height#, 2x_height#), 0);
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup pencircle xscaled stem yscaled hair;
+ top y1 = top y3 = h+eps; bot y2 = vround 1/3[x_height, h]-eps;
+ lft x1 = w-rt x3 = hround 1.75u; x2 = good.x 0.5[x1, x3];
+ draw z1..{x2-x1, 2(y2-y1)}z2
+ &z2{x3-x2, 2(y3-y2)}..z3;
+ labels(1, 2, 3);
+endchar;
+
+cmchar "Calligraphic breve accent";
+beginchar(oct"25", 9u#, min(asc_height#, 2x_height#), 0);
+ "Breve accent";
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+% pickup pencircle xscaled stem yscaled hair;
+ pickup lower_cal.nib;
+ top y1 = top y3=h+eps; bot y2=vround 1/3[x_height, h]-eps;
+ lft x1 = w-rt x3=hround 1.5u; x2=0.5[x1, x3];
+ draw z1 down_to_right z2 right_to_up z3; labels(1, 2, 3);
+endchar;
+
+cmchar "Calligraphic macron accent";
+beginchar(oct"26", 9u#, 0.4[x_height#, asc_height#]+0.5hair#, 0);
+ italcorr charht*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib; top y1 = top y2 = h;
+ lft x1 = w-rt x2 = hround 1.25u;
+ draw z1..z2; labels(1, 2);
+endchar;
+
+cmchar "Calligraphic circ accent";
+beginchar(oct"27", 14.4u#
+ +4/3(asc_height#-x_height#)*slant+1.5u#,
+ asc_height#, 0);
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup fine_cal.nib;
+ numeric a, b; b = vround(1/3[x_height, h]);
+ a = round max(3.6u, h+o-b);
+ top y2 = b+a+eps; bot y4 = b-eps;
+ y0 = y1 = y3 = 0.5[y4, y2]; x0 = x2 = x4 = 0.5w;
+ lft x3 = hround(x0-0.5a)-eps; x1-x0 = x0-x3;
+ draw superellipse(z1, z2, z3, z4, superness);
+ labels(1, 2, 3, 4, 0);
+endchar;
+
+cmchar "Calligraphic cedilla accent";
+beginchar(oct"30", 9u#, 0, desc_depth#);
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ bot y1 = -oo; top y2 = -vround max(o, -d/6);
+ bot y4 = -d; y3 = 0.5[y2, y4]; y5 = good.y 0.4[y4, y3];
+ x1 = x2 = x4 = good.x 0.5w;
+ lft x5 = w-rt x3 = hround 1.5u-eps;
+ draw z1--z2 right_to_down z3 down_to_left
+ z4 ... z5;
+ labels(1, 2, 3, 4, 5);
+endchar;
+
+cmchar "Calligraphic dot accent";
+beginchar(oct"137", 9u#,
+ min(asc_height#, 10/7x_height#+0.5flare#), 0);
+ adjust_fit(0, 0);
+ pickup fine_cal.nib;
+ cal_dot1(0.5w, h-0.5flare, flare);
+ math_fit(0, 0);
+ penlabels(1, 1');
+endchar;
+
+cmchar "Calligraphic umlaut accent";
+beginchar(oct"177", 9u#,
+ min(asc_height#, 10/7x_height#+0.5flare#), 0);
+ adjust_fit(0, 0);
+ pickup fine_cal.nib;
+ cal_dot1(2.75u, h-0.5flare, flare);
+ cal_dot2(w-2.75u, h-0.5flare, flare);
+ math_fit(0, 0);
+ penlabels(1, 1', 2, 2');
+endchar;
+
+cmchar "Calligraphic long umlaut accent";
+beginchar(oct"175", 9u#, min(asc_height#, 2x_height#), 0);
+ adjust_fit(0, 0);
+ pickup pencircle xscaled stem yscaled hair;
+ top y1 = top y3 = h+eps;
+ bot y2 = bot y4 = vround 1/3[x_height, h]-eps;
+ lft x4 = hround 2.25u; rt x1 = w-hround 1.5u;
+ x1-x3 = x2-x4 = hround 3u;
+ draw z1{x2-x1, 2(y2-y1)}..z2;
+ draw z3{x4-x3, 2(y4-y3)}..z4;
+ labels(1, 2, 3, 4);
+endchar;
+
+beginchar("@", 15u#, asc_height#, 0);
+ "The at sign";
+ italcorr 0.7asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ top y1 = 0.75h+eps; bot y3 = vround 0.25h-eps; y4 = 0.333[y3, y5];
+ top y5 = h+o; y6 = 0.5[y5, y7]; bot y7 = -o; y8 = good.y 0.15h;
+ y2 = 0.2[y3, y1];
+ rt x4 = rt x8 = w-hround u+eps; lft x6 = hround u-eps;
+ x5 = x7 = 0.5[x4, x6];
+ x1 = x2 = good.x(0.7[x6, x4]); x3 = 0.333[x2, x4];
+ draw z1..z2 down_to_right z3 right_to_up z4 up_to_left z5
+ left_to_down z6 down_to_right z7...z8;
+ %
+ y9b = good.y(0.73[y7, y5]); y9d = good.y(0.27[y7, y5]);
+ 0.5[y9b, y9d] = y9a = y9c;
+ y9a-y9e = 0.4*(y9b-y9e);
+ x9a = x1; x9c = good.x 0.71[x4, x6];
+ x9b = x9d = 0.5[x9a, x9c];
+ draw z9a up_to_left z9b...z9c down_to_right
+ z9d right_to_up z9a;
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9a, 9b, 9c, 9d);
+ math_fit(0, 0);
+endchar;
+
+skewchar=oct"060"; skew#=.5u#;
+
+ligtable cal_reverse_apostrophe: cal_reverse_apostrophe=: cal_opening_quotes;
+ligtable cal_apostrophe: cal_apostrophe=: cal_closing_quotes;
+ligtable "!": cal_reverse_apostrophe =: call_spanish_shriek;
+ligtable "?": cal_reverse_apostrophe =: call_spanish_query;
+ligtable "<": "<" =: call_laquo;
+ligtable ">": ">" =: call_raquo;
+
+ligtable "-" : "-" =: oct"173";
+ligtable oct"173" : "-" =: oct"174";
+
+ligtable "I": "T": "V": skewchar kern skew#;
+ligtable "D": "R": "U": "W": "Y": skewchar kern 3skew#;
+ligtable "E": "G": "O": "Q": skewchar kern 4skew#;
+ligtable "B": "C": "L": "S": "X": "Z": skewchar kern 5skew#;
+ligtable "J": skewchar kern 6skew#;
+ligtable "A": skewchar kern 7skew#;
+
+ligtable "F": skewchar kern 4skew#,
+"a" kern -2u#, "e" kern -2u#, "o" kern -2u#, "r" kern -u#;
+
+ligtable "H": skewchar kern 4skew#,
+"a" kern -u#, "e" kern -u#, "o" kern -u#;
+
+ligtable "K": skewchar kern 2skew#,
+"a" kern -u#, "e" kern -u#, "o" kern -u#;
+
+ligtable "M": skewchar kern 5skew#,
+"a" kern -u#, "e" kern -u#, "o" kern -u#, "r" kern -u#;
+
+ligtable "N": skewchar kern 3skew#,
+"a" kern -u#, "e" kern -u#, "o" kern -u#;
+
+ligtable "P": skewchar kern 3skew#,
+"a" kern -u#, "e" kern -u#, "o" kern -u#;
+
+ligtable "f": "a" kern -0.5u#, "e" kern -0.5u#, "o" kern -0.5u#;
+ligtable "h": "m": "n": "t": "x":
+"a" kern -0.25u#, "e" kern -0.25u#, "o" kern -0.25u#,
+"d" kern -0.25u#, "g" kern -0.25u#, "q" kern -0.25u#;
+ligtable "o": "x" kern -0.25u#;
+
+endinput.
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathcallgreek.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathcallgreek.mf
new file mode 100644
index 00000000000..3fa14501e45
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathcallgreek.mf
@@ -0,0 +1,1105 @@
+% mathematical symbols by Anthony Phan.
+% file: mathcallgreek.mf (calligraphic font)
+% last modification: May 16, 2005.
+
+%
+% UPPERCASE
+%
+
+let math_fit = do_math_fit;
+math_fitting := true;
+
+cmchar "Calligraphic Alpha";
+beginchar(hex"81",14.4u#,cap_height#,0);
+ italcorr .5u#;
+ adjust_fit(-.05w#,0); pickup cal.nib;
+ lft x5=.54w; x7=.9w;
+ top y5=h+.4cap_curve; bot y7=bot_flourish_line;
+ z6=.3[z7,z5]-bend;
+ pickup tilted.nib;
+ lft x1=.05w; x2=.2w; rt x4=x5;
+ y1=y2+.1h; bot y2=bot_flourish_line; top y4=h+.4cap_curve;
+ y3=y6; z3=whatever[z2,z4]+2bend;
+ draw\\(z1..tension 1.2..{right}z2) softjoin flex(z2,z3,z4); % left diagonal
+ pickup cal.nib;
+ erase fill\\(0,bot y5)--(w,bot y5)--(w,top y5)--(0,top y5)--cycle;
+ draw flex(z5,z6,z7) softjoin (z7--z7+cal.extension); % right diagonal
+ draw rt z3--z6; % bar
+ math_fit(.5u#-.1cap_height#*slant,ic#); labels(1,2,3,4,5,6,7);
+endchar;
+
+cmchar "Calligraphic Beta";
+beginchar(hex"82",9.9u#,cap_height#,0);
+ italcorr max(.8h#*slant-.1w#,.3h#*slant)+.5u#;
+ adjust_fit(0,0); pickup cal.nib;
+ lft x1=lft x3=0; x4=.6[x2,x5]; rt x5=.9w; x6=.4w; rt x7=w;
+ x8=.4[x9,x7]; lft x9=rt x3;
+ top y1=h+o; bot y3=-o; z2=.3[z3,z1]+bend;
+ y4=y1; y5=.6[y6,y4]; y6=.55h; y7=.45[y8,y6]; bot y8=-o; y9=.1h;
+ draw z1-cal.extension--flex(z1,z2,z3); % stem
+ draw z2{up}...z4...z5{down}...{dir 200}z6{dir 10}
+ ...z7{down}...z8{left}...z9; % lobes
+ math_fit(.5u#,.3h#*slant+.5u#); labels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+cmchar "Calligraphic Gamma";
+beginchar(hex"83",13.5u#,cap_height#,0);
+ italcorr h#*slant+.5u#;
+ adjust_fit(-.1w#,-u#); pickup cal.nib;
+ x1=.5w; x3=.4w; lft x4=.1w; x5=x2+.35w; x6=.7[x1,x7]; rt x7=w;
+ top y1=top y6=h; z2=.5[z3,z1]+1.2bend;
+ bot y3=-o; y4=.1h; y5=y2; y7=.9h;
+ draw flex(z1,z2,z3) softjoin (z3...{x4-x3,5(y4-y3)}z4); % stem
+ draw z1-flourish_change{up}...(z1-(u,0))---z6...{down}z7; % upper bar
+ math_fit(0,.5ic#); labels(1,2,3,4,5,6,7);
+endchar;
+
+cmchar "Calligraphic Epsilon";
+beginchar(hex"85",8.5u#,cap_height#,0);
+ italcorr max(h#*slant-.1w#,.2h#*slant)+.5u#;
+ adjust_fit(0,0); pickup cal.nib;
+ x1=.9[x3,x2]; rt x2=.9w; x3=.6[x4,x2]; lft x4=.05w;
+ x5=.7[x6,x2]; lft x6=0; x7=.5[x6,x8]; rt x8=w;
+ y1=y2-.1h; y2=.9h+o; top y3=h+o; y4=.5[y5,y3];
+ y5=.55h; y6=.6[y5,y7]; bot y7=-o; y8=.2h;
+ draw\\(z1{2(x2-x1),y2-y1}...z2)
+ softjoin (z2...z3{left}...z4{down}...{right}z5); % upper arc
+ draw z5{left}...z6{down}...z7{right}...z8; % lower arc
+ math_fit(.5u#-.2h#*slant,.2h#*slant+.5u#);
+ labels(1,2,3,4,5,6,7,8);
+endchar;
+
+cmchar "Calligraphic Zeta";
+beginchar(hex"86",10.4u#,cap_height#,0);
+ italcorr h#*slant+.5u#;
+ adjust_fit(0,0); pickup heavy_cal.nib;
+ lft x1=.05w; x2=.4w; rt x3=w; lft x7=0; x8=.8[x7,x9]; rt x9=1.1w;
+ top y1=58/70h; top y2=top y3=h; bot y7=bot y8=0; bot y9=15/70h;
+ z5=.55[z7,z3]+bend;
+ x10=x5-2.5u; x11=x5+2u; x12=.2[x3,x2]; x13=.2[x7,x8];
+ y10=y5; bot y11=y10-6/70h; y12=64/70h; y13=6/70h;
+ draw z1{up}...z2{right}...{right}z12...z3; % upper arm
+ draw flex(z3,z5,z7); % diagonal
+ draw z7...z13{right}...{right}z8...{up}z9; % lower arm
+ pickup light_cal.nib;
+ draw z10...z5{right}...{down}z11; % bar
+ math_fit(.5u#,.6ic#); labels(1,2,3,5,7,8,9,10,11,12,13);
+endchar;
+
+
+cmchar "Calligraphic Eta";
+beginchar(hex"87",12.2u#,cap_height#,0);
+ italcorr max(h#*slant-.2w#,.15h#*slant)+.5u#;
+ adjust_fit(4u#,0); pickup cal.nib;
+ lft x1=lft x3=.5u; rt x4=rt x6=.8w-.6u; rt x9=w;
+ top y1=top y4=h; bot y3=-.06h; bot y6=bot_flourish_line; y9=y6+.1h;
+ z2=.6[z3,z1]+bend; z5=.4[z6,z4]-bend;
+ path p[]; p1=flex(z1,z2,z3); p2=flex(z4,z5,z6);
+ p3=(-w,.45h)--(2w,.45h);
+ rt z7+2bend=p3 intersectionpoint p1; rt z8=p3 intersectionpoint p2;
+ draw (z1-flourish_change-bend{curl2}....z1-(u,0)---z1) softjoin p1; % left stem
+ draw p2 softjoin (z6{right}...{up}z9); % right stem
+ draw z7--z8; % bar
+ math_fit(.5u#-.8h#*slant,.15h#*slant+.5u#);
+ labels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+cmchar "Calligraphic Theta";
+beginchar(hex"88",12.6u#,cap_height#,0);
+ italcorr .7h#*slant+.5u#;
+ adjust_fit(0,0); pickup cal.nib;
+ x1=.3w; lft x2=0; x3=.5w; rt x4=w; x5=.6w; lft x6=.27w;
+ top y1=top y5=h+o; y2=.55h; bot y3=-o; y4=.5h; y6=y2;
+ y9 = good.y 0.65h; y7 = y10 = good.y 0.35h; y8 = good.y 0.5h;
+ x7 = x6; x8 = 0.5w; x9 = x10 = w-x6;
+ draw z1...z2{down}...z3{right}...z4{up}...z5{left}...{down}z6
+ --z7{up}...z8{right}...z9{up}--z10;
+ math_fit(.5u#-.3h#*slant,ic#-.5u#);
+ labels(1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+cmchar "Calligraphic Iota";
+beginchar(hex"89",10.8u#,cap_height#,0);
+ italcorr max(h#*slant+.5cap_curve#-.2w#,.15h#*slant)+.5u#;
+ adjust_fit(0,0); pickup cal.nib;
+ lft x0=0; x1=.9w; x2=x4=.5w; x5=.2w; x6=.8w; rt x7=1.05w;
+ y0=.8h; top y1=top y2=h; z3=.5[z4,z2]+bend;
+ bot y4=bot y5=bot y6=0; y7=.15h;
+ draw z0{up}...z2---z1; % upper bar
+ z8=.5[z2,z1];
+ draw z8{left}...z3{down}...{left}.5[z4,z5]; % stem
+ draw z5---z6...{up}z7; % lower bar
+ math_fit(.5u#-.8h#*slant,.15h#*slant+.5u#);
+ labels(0,1,2,3,4,5,6,7);
+endchar;
+
+cmchar "Calligraphic K";
+beginchar(hex"8A",11u#,cap_height#,0);
+ italcorr max(h#*slant-.2w#,.2h#*slant)+.5u#;
+ adjust_fit(0,.1w#); pickup cal.nib;
+ lft x1=lft x3=0; top y1=h+o; bot y3=-o; z2=.6[z3,z1]+bend;
+ draw z1-cal.extension--flex(z1,z2,z3); % stem
+ pickup light_cal.nib;
+ rt x4=.9w; x5=x4-.1w; x7=.8w; rt x8=1.1w;
+ y4=.9h; top y5=h+o; bot y7=-o; y8=.2h-o;
+ (lft z6)t_=z2.t_+penoffset up of pen_[cal.nib];
+ draw z4{up}...{left}z5..tension atleast 2..{down}z6
+ ..tension atleast 3 and atleast 2..z7{right}...{up}z8; % diagonals
+ math_fit(.5u#,.2h#*slant+.5u#); labels(1,2,3,4,5,6,7,8);
+endchar;
+
+cmchar "Calligraphic Lambda";
+beginchar(hex"8B",14.4u#,cap_height#,0);
+ italcorr .5u#;
+ adjust_fit(-.05w#,0); pickup cal.nib;
+ lft x5=.54w; x7=.9w;
+ top y5=h+.4cap_curve; bot y7=bot_flourish_line;
+ z6=.3[z7,z5]-bend;
+ pickup tilted.nib;
+ lft x1=.05w; x2=.2w; rt x4=x5;
+ y1=y2+.1h; bot y2=bot_flourish_line; top y4=h+.4cap_curve;
+ y3=y6; z3=whatever[z2,z4]+2bend;
+ draw\\(z1..tension 1.2..{right}z2) softjoin flex(z2,z3,z4); % left diagonal
+ pickup cal.nib;
+ erase fill\\(0,bot y5)--(w,bot y5)--(w,top y5)--(0,top y5)--cycle;
+ draw flex(z5,z6,z7) softjoin (z7--z7+cal.extension); % right diagonal
+ math_fit(.5u#-.1cap_height#*slant,ic#); labels(1,2,3,4,5,6,7);
+endchar;
+
+cmchar "Calligraphic Mu";
+beginchar(hex"8C",19.8u#,cap_height#,0);
+ italcorr max(h#*slant-u#,.75cap_curve#)+.5cap_curve#+.5u#;
+ adjust_fit(-.1w#,0); pickup med_cal.nib;
+ (z20)t_=(z5)t_+penoffset down of currentpen
+ =(z4)t_+penoffset down of pen_[tilted.nib];
+ z6=.3[z7,z5]-bend; z9=.3[z8,z10]+.5bend; z12=.3[z13,z11]-bend;
+ x7=.5[x2,x13]; bot y7=.05h; top y5=h+o;
+ (z0)t_=(z7)t_+penoffset right of currentpen
+ =(z8)t_+penoffset right of pen_[tilted.nib];
+ pickup cal.nib;
+ (z30)t_=(z11)t_+penoffset up of currentpen
+ =(z10)t_+penoffset up of pen_[tilted.nib];
+ x13=w; bot y13=bot_flourish_line;
+ pickup tilted.nib;
+ lft x1=.1w; x2=.2w; x4=.2[x2,x7]; x10=.8[x7,x13];
+ y1=.05h+y2; bot y2=bot_flourish_line; top y10=h+o;
+ z3=whatever[z2,z4]+2bend; y3=y6;
+ draw\\(z1..tension1.2..{right}z2) softjoin flex(z2,z3,z4); % left stem
+ erase fill z20--(.5w,y20)--(.5w,top y4)--(x20-4u,top y4)--cycle;
+ pickup med_cal.nib;
+ draw flex(z5,z6,z7); % left diagonal
+ pickup cal.nib;
+ draw flex(z11,z12,z13) softjoin (z13--z13+cal.extension); % right stem
+ pickup tilted.nib;
+ path p; p=flex(z8,z9,z10);
+ erase fill z0--(x0,y0-.5h)--(x9,y0-.5h)--subpath(1,0) of p--cycle;
+ erase fill z30--(x30,y30+.5h)--(x9,y30+.5h)--subpath(1,2) of p--cycle;
+ draw p; % right diagonal
+ math_fit(.5u#-.05h#*slant,ic#);
+ labels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,20,30);
+endchar;
+
+cmchar "Calligraphic Nu";
+beginchar(hex"8D",9u#,cap_height#,0);
+ italcorr h#*slant+.5u#;
+ adjust_fit(2u#,2.5u#); pickup med_cal.nib;
+ (z0)t_=(z5)t_+penoffset down of currentpen
+ =(z4)t_+penoffset down of pen_[tilted.nib];
+ (z20)t_=(z7)t_+penoffset up of currentpen
+ =(z8)t_+penoffset up of pen_[tilted.nib];
+ z6=.3[z7,z5]-bend; rt z7=(w,0); top y5=h+o;
+ pickup tilted.nib;
+ lft x1=x2-2u; x2=-u; x4=0; x10=w; rt x11=w+3u;
+ y1=y2+.05h; bot y2=bot_flourish_line;
+ y3=y6; z3=whatever[z2,z4]+2bend;
+ y10=h; z9=.7[z8,z10]-.5bend; bot y11=h;
+ draw\\(z1..tension1.2..{right}z2) softjoin flex(z2,z3,z4); % left stem
+ draw flex(z8,z9,z10)...{right}z11; % right stem
+ pickup med_cal.nib;
+ erase fill z0--(.5w,y0)--(.5w,1.5h)--(x0-4u,1.5h)--cycle;
+ erase fill z20--(.5w,y20)--(.5w,-.5h)--(x20+4u,-.5h)--cycle;
+ draw flex(z5,z6,z7); % diagonal
+ math_fit(.5u#-.05h#*slant,.3h#*slant);
+ labels(0,1,2,3,4,5,6,7,8,9,10,11,20);
+endchar;
+
+cmchar "Calligraphic Omicron";
+beginchar(hex"8F",12.6u#,cap_height#,0);
+ italcorr .7h#*slant+.5u#;
+ adjust_fit(0,0); pickup cal.nib;
+ x1=.3w; lft x2=0; x3=.5w; rt x4=w; x5=.6w; lft x6=.27w;
+ top y1=top y5=h+o; y2=.55h; bot y3=-o; y4=.5h; y6=y2;
+ path p; p=z1...z2{down}...z3{right}...z4{up}...z5{left}...{down}z6;
+ draw subpath(0,4.8) of p; % bowl
+ math_fit(.5u#-.3h#*slant,ic#-.5u#);
+ labels(1,2,3,4,5,6);
+endchar;
+
+%
+% a revoir
+%
+
+cmchar "Calligraphic Pi";
+beginchar(hex"90",13u#,cap_height#,0);
+ italcorr h#*slant+.5u#;
+ adjust_fit(0,-.5u#);
+ pickup heavy_cal.nib;
+ x1=x3-0.03w; x3=.3w;
+ lft x4=0; x5=.25w; x6=.85w; rt x7=1.05w;
+ top y1=h; y4=3/4h; top y5=top y6=h; top y7=1.05h;
+ draw z4{curl 2}...z5{right}...z6{right}...{up}z7; % arms
+ pickup tilted.nib;
+ bot y3=-.1h;
+ z2=.3[z3,z1]+bend;
+ top y0=y1; x0=x2;
+ draw z0---z2...z3; % left stem
+ pickup cal.nib;
+ x8 = 0.75w; x10 = 0.9w;
+ top y8=y1; bot y10=bot_flourish_line;
+ z9=.3[z10,z8]-bend;
+ draw flex(z8,z9,z10) softjoin (z10--z10+cal.extension); % right stem
+ math_fit(.5u#-5/7h#*slant,-u#); labels(1,2,3,4,5,6,7);
+endchar;
+
+cmchar "Calligraphic Rho";
+beginchar(hex"91",9u#,cap_height#,0);
+ italcorr .8h#*slant+.5u#;
+ adjust_fit(4u#,0); pickup cal.nib;
+ lft x1=lft x3=0; x4=x6=.3[x1,x5]; rt x5=w;
+ top y1=top y4=h; y3=-o; y5=.55[y6,y4]; bot y6=.3h;
+ z2=.5[z3,z1]+bend;
+ draw flex(z1,z2,z3); % stem
+ draw z1{left}...{down}z1-flourish_change; % swash
+ draw z1---z4...z5{down}...{left}z6; % lobe
+ math_fit(.5u#-.8h#*slant,.5ic#); labels(1,2,3,4,5,6);
+endchar;
+
+cmchar "Calligraphic Tau";
+beginchar(hex"93",13u#,cap_height#,0);
+ italcorr h#*slant+.5u#;
+ adjust_fit(0,-.5u#); pickup heavy_cal.nib;
+ x1=.47w; x3=.5w; lft x4=0; x5=.25w; x6=.85w; rt x7=1.05w;
+ top y1=h; bot y3=-.1h; y4=3/4h; top y5=top y6=h; top y7=1.05h;
+ z2=.3[z3,z1]+bend;
+ top y0=y1; x0=x2;
+ z8=(2u,.2h);
+ draw z0---z2...z3; % stem
+ draw z4{curl 2}...z5{right}...z6{right}...{up}z7; % arms
+ math_fit(.5u#-5/7h#*slant,-u#); labels(1,2,3,4,5,6,7);
+endchar;
+
+cmchar "Calligraphic Chi";
+beginchar(hex"96",11.4u#,cap_height#,0);
+ italcorr h#*slant+.5u#;
+ adjust_fit(0,0); pickup cal.nib;
+ lft x1=.08w; lft x2=.2w; x4-x3=x2-x1; rt x4=w;
+ h-y1=y4=1/9h; top y2=h; bot y3=0;
+ draw z1{up}....z2{right}
+ ... .2[z2+(.1w,0),z3-(.1w,0)]---.8[z2+(.1w,0),z3-(.1w,0)]
+ ...{right}z3....{up}z4; % left diagonal
+ x5=x6-u; rt x6=w; lft x7=0; x8=x7+u;
+ top y5=h; y6=.85h; y7=h-y6; bot y8=0;
+ draw z5{right}...z6{down}
+ ..tension atleast 3..{down}z7...{right}z8; % right diagonal
+ math_fit(.5u#,1/7h#*slant+.5u#); labels(1,2,3,4,5,6,7,8);
+endchar;
+
+%
+% LOWERCASE
+%
+
+let math_fit = ignore_math_fit;
+math_fitting := false;
+
+% just look at italic corection and math fitting
+cmchar "Calligraphic alpha";
+beginchar(hex"A1", 11u#, x_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ x_height#*slant+0.5lower_cal_width#-2u#) if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = vround 0.98h;
+ bot y2 = bot y5 = -oo;
+ top y4 = x_height+oo;
+ y3 = 0.5[y2, y4];
+ y6 = good.y 7/8[x_height, y5];
+ x1 = x5 = good.x(w-2.5u);
+ x3 = good.x 1.25u;
+ x6 = w; x2 = x4 = 0.5[x3, 6.5u];
+ draw z1{down}...z2 left_to_up z3 up_to_right z4...z5{right}...z6;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+% just look at italic corection and math fitting
+cmchar "Calligraphic beta";
+beginchar(hex"A2", 8u#, asc_height#, desc_depth#);
+ italcorr max(.8h#*slant-.1w#, .5x_height#*slant)+.5u#;
+ adjust_fit(0, 0);
+ % see es-zet
+ pickup lower_cal.nib;
+ x2-x1=hround 0.5u; x2 = good.x 1.5u; x4 = .6[x2, x5];
+ x5 = good.x(0.9w-1.25u); lft x6 = x2; x7 = good.x(w-1.25u);
+ x8 = .4[x9, x7]; lft x9 = rt x2;
+ bot y1 = -d-eps; y2 = 0.5x_height;
+ top y4 = h+oo; y5 = .6[y6, y4]; y6 = .55h; y7 = .45[y8, y6];
+ bot y8 = -oo; y9 = .1h;
+% draw z1-cal.extension--flex(z1, z2, z3); % stem
+ draw z1...z2{up}...z4...z5{down}...{dir 200}z6{dir 10}
+ ...z7{down}...z8{left}...z9; % lobes
+ %
+ math_fit(.5u#, .3h#*slant+.5u#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+endchar;
+
+% just look at math fitting
+cmchar "Calligraphic gamma";
+beginchar(hex"A3", 10u#, x_height#, desc_depth#);
+ italcorr h#*slant;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ x1 = good.x 0; x3 = good.x(w-3.4u);
+ x2 = max(1.25u, 0.5[x1, x3]);%0.5[x1, x3];
+ x5 = good.x 3.8u;
+ x4=2/3[x3, x5];
+ rt x6 = hround(w-0.5u);
+ top y2 = x_height+oo; y1 = good.y 7/8[0, y2]; bot y4 = -d-eps;
+ y3 = y5 = 0.825[y2, y4]; top y6=vround 0.98 h;
+ draw z1...z2{right}... z3 down_to_left z4 left_to_up z5...z6{up};
+ math_fit(.5u#, .3h#*slant+.5u#);
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+cmchar "Calligraphic epsilon";
+beginchar(hex"A5", 8u#,x_height#,0);
+ italcorr max(h#*slant-.1w#,.2h#*slant)+.5u#;
+ adjust_fit(0,0); pickup lower_cal.nib;
+ rt x2 = hround(w-1.1u); x3=.6[x4,x2]; x4=good.x(1.5u);
+ x5=.7[x6,x2]; x6= good.x 1.25u; x7=.5[x6,x8]; x8 = good.x w;
+ x1=good.x 0.6[x5, x2];
+ %y1=y2-.1h;
+ y2=.9h+oo; top y3=h+oo; y4=.5[y5,y3];
+ y5=good.y .55h; y6=.5[y5,y7]; bot y7=-oo; y8=good.y 1/4x_height;
+ y1 = good.y 0.6[y5, y3];
+ draw\\(z1{2(x2-x1),y2-y1}...z2)
+ softjoin (z2...z3{left}...z4 down_to_right z5); % upper arc
+ draw z5{left}...z6 down_to_right z7...z8; % lower arc
+ math_fit(.5u#-.2h#*slant,.2h#*slant+.5u#);
+ labels(1,2,3,4,5,6,7,8);
+endchar;
+
+cmchar "The letter eta";
+beginchar(hex"A7", 9u#, x_height#, desc_depth#);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ 0.75x_height#*slant+0.5lower_cal_width#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = x4 = good.x 2.5u; bot y4 = -oo;
+ x6 = x7 = good.x(w-1.5u); bot y7 = -d-eps;
+ draw hook_in(1, 2, 3)---z4;
+ draw ital_arch(4, 5, 6)...z7{down};
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "The letter theta";
+beginchar(hex"A8", 8u#, asc_height#, 0);
+ italcorr .7asc_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);%(-0.25u#, -0.25u#);
+ %
+ pickup lower_cal.nib;
+ top y1 = h+oo; bot y3 = -oo; y2 = y4 = 0.5[y1, y3];
+ x2 = good.x 1.25u; x4 = good.x(w-1.25u); x1 = x3 = 0.5[x2, x4];
+ z5 = z1; x6 = good.x 0.2[x2, x4]; x7 = 0.7[x2, x4];
+ y6 = 0.8[y3, y5]; y7 = good.y 0.43[y3, y5];
+ save p; path p; p = z1 left_to_down z2 down_to_right
+ z3 right_to_up z4 up_to_left z5 left_to_down z6...z7{right}...z4;
+ draw subpath (1.75, 12) of p;
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "The letter theta (variant)";
+beginchar(hex"BA", 9.5u#, asc_height#, 0);
+ italcorr .7asc_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);%(-0.25u#, -0.25u#);
+ %
+ pickup lower_cal.nib;
+ bot y5 = -oo; top y7 = h+oo; y6 = 0.5[y5, y7];
+ y4 = 0.7[y5, 0.57x_height];
+ y8 = 0.8[y5, y7]; y9 = good.y 0.43[y5, y7];
+ top y10 = x_height+oo; y10 := good.y 7/8[0, y10];
+ x1 = 0; x3 = good.x 2.5u;
+ x6 = good.x(w-1.75u);
+ x5 = x7 = 0.5[x3, x6];
+ x8 = good.x 0.2[x3, x6]; x9 = 0.75[x3, x6]; x10 = good.x w;
+ draw hook_in(1,2,3)...
+ z5{right} ... z6 up_to_left z7 left_to_down z8...z9{right}...z10;
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+cmchar "The letter kappa";
+beginchar(hex"A9", 9u#, x_height#, 0);
+ italcorr max(0.2x_height#*slant+0.1w#,
+ 0.95x_height#*slant-0.1w#+0.5u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h; bot y2 = -oo; x1 = x2 = good.x 1.5u;
+ draw z1-cal.extension--z1--z2;
+ %
+ rt x4 = .9w; x5 = x4-.1w; x7 = .8w; rt x8 = 1.1w;
+ y4 = .9x_height; top y5 = x_height+oo; bot y7 = -oo; y8 = .2x_height-oo;
+ (lft z6)t_ = (x2, 0.4x_height).t_+penoffset up of pen_[lower_cal.nib];
+ draw z4{up}...{left}z5..tension atleast 2..{down}z6
+ ..tension atleast 3 and atleast 2..z7{right}...{up}z8; % diagonals
+ %
+ math_fit(0, 1/3x_height#*slant+0.5hair#+0.5u#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic mu";
+beginchar(hex"AB", 9u#, x_height#, desc_depth#);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ x_height#*slant+0.5lower_cal_width#-2u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = x2 = x3 = good.x 1.5u;
+ x4 = 0.5[x2, x5]; x5 = x6 = x7 = good.x(w-2.5u); x9 = w;
+ bot y1 = -d-eps; top y2 = h;
+ y3 = 0.7[y4, y5]; bot y4 = -oo; y5 = 0.57h; top y6 = h;
+ draw z1..z2;
+ draw z3 down_to_right z4...z5{up};
+ draw z6..hook_out(7, 8, 9);
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 6, 7, 8, 9);
+endchar;
+
+%cmchar "Calligraphic nu";
+% beginchar(hex"AC", 9u#, x_height#, 0);
+% italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+% if math_fitting: -0.5u# fi; % same as "o"
+% adjust_fit(0, 0);
+% %
+% pickup lower_cal.nib;
+% x1 = good.x 0; x2 = 0.5[x1,x3]; x3 = x4-.25(y3-y4);
+% x4 = good.x 0.5w; x5 = good.x(w-1.25u); x6 = good.x(w-2u);
+% top y2 = x_height+oo; y1 = good.y 7/8[0, y2];
+% y3 = .57x_height;%3/4x_height;
+% bot y4 = -oo; y5 = 0.57h; top y6 = h+oo;
+% draw z1...z2{right}...z3---z4;
+% draw z4{(x5-x4), 1/3(y5-y4)}...z5{up}...z6;
+% %
+% math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+% labels(1, 2, 3, 4, 5, 6);
+% endchar;
+
+cmchar "Calligraphic nu";
+beginchar(hex"AC", 8u#, x_height#, 0);
+ italcorr 0.8x_height#*slant;
+ adjust_fit(0, 0.5u#);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; top y1 = h; z3 = (.48w, 0);
+ z0.t_ = z2.t_+penoffset down of currentpen
+ = z3.t_+penoffset down of pen_[tilted.nib];
+ draw z1{right}..tension atleast 1 and infinity..z2; % left diagonal
+ pickup tilted.nib;
+ rt x4 = w; x5 = x4-.2w; top y4 = .8h; top y5 = h;
+ path p; p = z3..tension atleast 3 and 1..{up}z4;
+ erase fill z0--(x0, y0-0.5h)--(x4, y0-0.5h)--(x4+eps, y4)--reverse p--cycle;
+ draw p...{left}z5; % right diagonal
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, 2/3ic#);
+ labels(0, 1, 2, 3, 4, 5);
+endchar;
+
+cmchar "The letter omicron";
+beginchar(hex"AF", 9u#, x_height#, 0);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);%(-0.25u#, -0.25u#);
+ %
+ pickup lower_cal.nib;
+ top y1 = h+oo; bot y3 = -oo; y2 = y4 = 0.5[y1, y3];
+ x2 = good.x 1.25u; x4 = good.x(w-1.25u); x1 = x3 = 0.5[x2, x4];
+ draw z1 left_to_down z2 down_to_right
+ z3 right_to_up z4 up_to_left z1;
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4);
+endchar;
+
+cmchar "Calligraphic pi";
+beginchar(hex"B0", 9u#, x_height#, 0);
+ italcorr x_height#*slant+0.5u# if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y2 =top y4= h; y2-y1 = vround 0.2h; top y3 = 0.98h;
+ x1 = good.x u; x2 = 3.5u; x3=good.x(w-2.5u); rt x4=w;
+ draw z1...z2{right}...z3{right}...z4;
+ top y9 = vround 0.98h; x9 = x10 = good.x(w-2.5u); x12 = w;
+ draw z9..hook_out(10, 11, 12);
+ bot y6=-oo; x5=0; x6=0.5[x5,x2]; y5-y6=vround 0.1h;
+ z7=0.3[z6,z2];
+ draw z5...z6{right}...z2{up};
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8,9,10,11,12);
+endchar;
+
+cmchar "The letter rho";
+beginchar(hex"B1", 8u#, x_height#, desc_depth#);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);%(-0.25u#, -0.25u#);
+ % like letter "b"
+ pickup lower_cal.nib;
+ bot y1 = -d-eps; y2 = 0.5x_height; bot y5 = -oo;
+ y4 = 0.5x_height; top y3 = x_height+oo;
+ x1 = x2 = good.x 1.5u; x3 = 0.5[x2, x4];
+ x4 = good.x(w-1.25u); x5 = 0.5[x2, x4];
+ draw z1..z2{up}
+ ...z3{right}...z4{down}...z5{left}...z2{up};
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(0, 1, 2, 3, 4, 5);
+endchar;
+
+cmchar "The letter rho (variant)";
+beginchar(hex"BD", 8u#, x_height#, desc_depth#);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);%(-0.25u#, -0.25u#);
+ % like letter "b"
+ pickup lower_cal.nib;
+ bot y1 = -d-eps; y2 = 0.5x_height; bot y5 = -oo;
+ y4 = 0.5x_height; top y3 = x_height+oo;
+ rt x1 = w; x2 = good.x 1.5u; x3 = 0.5[x2, x4];
+ x4 = good.x(w-1.25u); x5 = 0.5[x2, x4];
+ draw z1...(x5, good.y 0.25[y1, y5]){left}...z2{up}
+ ...z3{right}...z4{down}...z5{left}...z2{up};
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(0, 1, 2, 3, 4, 5);
+endchar;
+
+cmchar "Calligraphic upsilon";
+beginchar(hex"B4", 9u#, x_height#, 0);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi; % same as "o"
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = good.x(2.80u); x4 = good.x(2.3u);
+ x5 = 0.5[x4, x6]; x6 = good.x(w-1.25u); x7 = good.x(w-2u);
+ y4 = 0.7[y5, y6]; bot y5 = -oo; y6 = 0.57h; top y7 = h+oo;
+ draw hook_in(1, 2, 3)...z4 down_to_right z5...z6{up}...z7;
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "The letter phi";
+beginchar(hex"B5", 11u#, asc_height#, asc_depth#);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi; % same as "o"
+ adjust_fit(0, 0);%(-0.25u#, -0.25u#);
+ %
+ pickup lower_cal.nib;
+ top y1 = x_height+oo; bot y3 = -oo; y2 = y4 = 0.5[y1, y3];
+ x2 = good.x 1.25u; x4 = good.x(w-1.25u); x1 = x3 = 0.5[x2, x4];
+ draw z1 left_to_down z2 down_to_right
+ z3 right_to_up z4 up_to_left z1;
+ pickup fine_cal.nib;
+ x5= x6 =good.x 0.5w; top y5 =h+eps; bot y6=-d-eps;
+ draw z5..z6;
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+cmchar "The letter phi (variant)";
+beginchar(hex"BF", 11u#, x_height#, desc_depth#);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);%(-0.25u#, -0.25u#);
+ %
+ pickup lower_cal.nib;
+ top y1 = h+oo; bot y3 = -oo; y2 = y4 = 0.5[y1, y3];
+ x2 = good.x 1.25u; x4 = good.x(w-1.25u); x1 = x3 = 0.5[x2, x4];
+ x5 = 0.5[x6,x4]; x6 = x7 = good.x 0.5[x2, x4];
+ y5 = y1; y6 = 0.5[y3, y5]; bot y7 = -d-eps;
+ save p; path p; p = z1 left_to_down z2 down_to_right
+ z3 right_to_up z4 up_to_left z5 left_to_down z6..z7;
+ draw subpath (.75, 12) of p;
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic chi";
+beginchar(hex"B6",11u#,x_height#,desc_depth#);
+ italcorr h#*slant+.5u#;
+ adjust_fit(0,0); pickup cal.nib;
+ lft x1=.08w; lft x2=.2w; x4-x3=x2-x1; rt x4=w;
+ h-y1=d+y4=1/9(h+d); top y2=h; bot y3=-d-eps;
+ draw z1{up}....z2{right}
+ ... .2[z2+(.1w,0),z3-(.1w,0)]---.8[z2+(.1w,0),z3-(.1w,0)]
+ ...{right}z3....{up}z4; % left diagonal
+ x5=x6-u; rt x6=w; lft x7=0; x8=x7+u;
+ top y5=h; y6=.85[-d,h]; y7=h-d-y6; bot y8=-d-eps;
+ draw z5{right}...z6{down}
+ ..tension atleast 3..{down}z7...{right}z8; % right diagonal
+ math_fit(.5u#,1/7h#*slant+.5u#); labels(1,2,3,4,5,6,7,8);
+endchar;
+
+cmchar "Calligraphic psi";
+beginchar(hex"B7", 11u#, asc_height#, desc_depth#);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi; % same as "o"
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = good.x(2.80u); x4 = good.x(2.3u);
+ x5 = 0.5[x4, x6]; x6 = good.x(w-1.25u); x7 = good.x(w-2u);
+ y4 = 0.7[y5, y6]; bot y5 = -oo; y6 = 0.57x_height; top y7 = x_height+oo;
+ draw hook_in(1, 2, 3)...z4 down_to_right z5...z6{up}...z7;
+ pickup fine_cal.nib;
+ x8 = x9 = good.x(0.5[2.5u, w-1.5u]); top y8 = h+eps; bot y9 = -d-eps;
+ draw z8..z9;
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+endchar;
+
+endinput.
+
+
+%
+% GREEK LOWERCASE
+%
+
+apprr:=apprl:=hround u;
+beginchar(oct"241", 10u#, x_height#, 0);
+ "The letter alpha";
+ italcorr x_height#*slant-0.5u#;
+ pickup lower_cal.nib;
+ top y1 = h+eps; top y5 = h+u_o; bot y2 = -d_o; bot y6 = -eps;
+ 0.5[y3, y4] = 0.5[y2, y5]; y4-y3 = loop_squareness*(y5-y2);
+ lft x3 = lft x4 = apprl-ho; rt x1 = rt x6 = w-apprr+eps;
+ x2 = x5 = 0.375[x3, x6];
+ draw z1 hang_to z2 left_to_up z3..z4 up_to_right z5
+ hook_to z6; labels(1, 2, 3, 4, 5, 6);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"242", 8u#, asc_height#, desc_depth#);
+ "The letter beta";
+ italcorr 0.8asc_height#*slant-u#+ho#;
+ pickup lower_cal.nib;
+ bot y1 = -d; top y5 = x_height; top y3 = h+u_o; bot y7 = -d_o;
+ 0.5[y4', y4] = 0.5[y5, y3]; 0.5[y6', y6] = 0.5[y7, y5]; y8 = hook_h;
+ y4-y4' = loop_squareness*(y3-y5);
+ y6-y6' = loop_squareness*(y5-y7); y2 = y4';
+ lft x1 = apprl; x1 = x2 = x8; rt x4+hround 0.5u = rt x6 = w-apprr+ho;
+ x3 = 0.55[x2, x4]; x7 = 0.5[x8, x6]; lft x5 = rt x1+hround u;
+ x4 = x4'; x6 = x6';
+ draw z1..z2 up_to_right z3 right_to_down z4..z4' down_to_left z5
+ &z5 right_to_down z6..z6' down_to_left z7 left_to_up z8;
+ labels(1, 2, 3, 4, 4', 5, 6, 6', 7, 8);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"243", 8u#, x_height#, desc_depth#);
+ "The letter gamma";
+ italcorr x_height#*slant;
+ pickup lower_cal.nib; numeric a; a = 0.60;
+ top y1 = top y7 = h+eps; bot y4 = -d-d_o; y3 = y5 = 0.2[y4, y1];
+ lft x1 = apprl-hround 0.5u; rt x7 = w-apprr+hround 0.5u;
+ x5-x1 = x7-x3 = hround 1.5u; x4 = 0.5[x3, x5];
+ x2 = a[x1, x3]; x6 = a[x7, x5]; y2 = a[y3, y1]; y6 = a[y5, y7];
+ draw z1...z2{z3-z1}...z3 down_to_left
+ z4 left_to_up z5...z6{z7-z5}...z7;
+ labels(1, 2, 3, 4, 5, 6, 7);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"244", 8u#, asc_height#, 0);
+ "The letter delta";
+ italcorr 0.9asc_height#*slant-u#;
+ pickup lower_cal.nib;
+ top y1 = top y2 = h; y5 = good.x x_height; bot y8 = -d_o;
+ rt x7-ho = rt x1+hround 0.5u = w-apprr;
+ lft x9+ho = lft x3+eps = apprl;
+ x5 = x8 = 0.5[x9, x7]; x2 = 0.4[x3, x1];
+ slope := -h/17u;
+ ellipse_set(2, 3, 4, 5); ellipse_set(8, 7, 6, 5);
+ y7 = y9; y10 = y6; x6-x5 = x5-x10;
+ draw z1{x2-x1, 2(y2-y1)}
+ ..z2 left_to_down z3 ...z4---z6...z7
+ down_to_left z8 left_to_up z9...z10---z5;
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"245", 7u#, x_height#, 0);
+ "The letter epsilon";
+ italcorr x_height#*slant-0.5u#;
+ pickup lower_cal.nib;
+ top y1 = h; bot y4 = -d_o; y6 = y7 = good.y 0.51[y4, y1];
+ y2-y3 = loop_squareness*(y1-y4); y5 = good.y 0.15h;
+ y6 = 2/3[y3, y2]; x4 = 0.55[x2, x5];
+ rt x1 = rt x7+hround 0.5u = rt x5-hround 0.5u = w-apprr;
+ lft x2 = apprl-ho; x2 = x3 = x6;
+ draw z1 left_to_down z2..z3 down_to_right z4 hook_to z5;
+ draw z6..z7; labels(1, 2, 3, 4, 5, 6, 7);
+ math_fit(0, ic#);
+endchar;
+
+ % ???
+
+beginchar(oct"245", 7u#, x_height#, 0);
+ "The letter variant epsilon";
+ italcorr x_height#*slant-0.5u#;
+ pickup lower_cal.nib;
+ top y2 = h+u_o; bot y6 = -d_o;
+ y3 = 0.5[y2, y4]; y5 = 0.5[y4, y6]; y7 = hook_h;
+ y1 = good.y 0.9[y6, y2]; y4 = good.y 0.5[y7, y1];
+ rt x1 = rt x4+hround 1.5u = rt x7-hround 0.5u = w-apprr;
+ lft x3 = lft x5 = apprl-ho; x2 = 0.6[x3, x1]; x6 = 0.5[x5, x7];
+ draw z1{x2-x1, 3(y2-y1)}
+ ...z2 left_to_down z3 down_to_right z4
+ &z4 left_to_down z5 down_to_right z6 hook_to z7;
+ labels(1, 2, 3, 4, 5, 6, 7);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"246", 8u#, asc_height#, desc_depth#);
+ "The letter zeta";
+ italcorr x_height#*slant-0.5u#;
+ pickup lower_cal.nib;
+ top y1 = h; top y2 = top y3 = top y4 = vround(y1-0.25(h-x_height));
+ bot y6 = bot y7 = 0; bot y9 = -d;
+ y5 = 0.3[y6, y4]; y8 = 0.5[y9, y7];
+ lft x1 = apprl+hround 1.5u; lft x5 = apprl-ho;
+ rt x3 = w-apprr-hround u; rt x8 = w-apprr+ho;
+ x2 = 0.7[x1, x3];
+ x4 = 0.85[x5, x3];
+ x6-x5 = x8-x7 = 0.4(x8-x5);
+ x9 = good.x(0.5[x5, x8]);
+ draw z1 down_to_right z2..z3&z3..z4 left_to_down z5
+ down_to_right z6...z7right_to_down z8 down_to_left z9;
+ labels(range 1 thru 9);
+ math_fit(0, ic#);
+endchar;
+
+
+
+ % ?
+
+beginchar(oct"251", 12u#, asc_height#, 0);
+ "The letter variant theta";
+ italcorr 0.7asc_height#*slant-1.5u#+ho#;
+ pickup lower_cal.nib;
+ lft x1 = lft x3-hook_w = apprl-hround 0.5u;
+ x2 = 1/3[x3, x1];
+ rt x5 = lft x3+hround(6u)+ho;
+ x4 = 0.5[apprl, w-apprr]; x6 = 0.5[x3, x5];
+ x7 = good.x 0.2[x3, x5];
+ x9-x8 = 0.5hook_w;
+ rt x9 = w-apprr+hround 0.5u;
+ y1+hook_h = top y2-eps = x_height; bot y4 = -d_o; top y6 = h+u_o;
+ y5 = y8 = good.y 0.5[y4, y6]; y3 = 0.25[y2, y4]; y7 = 0.7[y5, y6];
+ y8-y9 = vround hook_h;
+ draw z1 hang_to z2 right_to_down z3 down_to_right
+ z4 right_to_up z5 up_to_left z6 left_to_down
+ z7 down_to_right z8 right_to_down z9;
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"252", 2.5u#+curve#, x_height#, 0);
+ "The letter iota";
+ italcorr x_height#*slant-2u#;
+ pickup lower_cal.nib; rt x1 = w-apprr-hround 1.5u; top y1 = h+eps;
+ draw right_hook1;
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"253", 8u#, x_height#, 0);
+ "The letter kappa";
+ italcorr max(0.2x_height#*slant+0.1w#,
+ 0.95x_height#*slant-0.1w#+0.5u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h; bot y2 = -oo; x1 = x2 = good.x 1.5u;
+ draw z1-cal.extension--z1--z2;
+ %
+ rt x4 = .9w; x5 = x4-.1w; x7 = .8w; rt x8 = 1.1w;
+ y4 = .9x_height; top y5 = x_height+oo; bot y7 = -oo; y8 = .2x_height-oo;
+ (lft z6)t_ = (x2, 0.4x_height).t_+penoffset up of pen_[lower_cal.nib];
+ draw z4{up}...{left}z5..tension atleast 2..{down}z6
+ ..tension atleast 3 and atleast 2..z7{right}...{up}z8; % diagonals
+ %
+ math_fit(0, 1/3x_height#*slant+0.5hair#+0.5u#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+ % ?
+
+beginchar(oct"253", 10u#, x_height#, 0);
+ "The letter variant kappa";
+ italcorr x_height#*slant-0.75u#;
+ pickup lower_cal.nib;
+ top y1 = top y4-u_o = h; bot y3+d_o = bot y6 = 0;
+ y2 = h-y5 = 1/3[y1, y6];
+ lft x1 = apprl-hround 0.5u-eps;
+ rt x6 = w-apprr+hround 0.5u+eps;
+ x3-x1 = x6-x4 = hround 0.75u;
+ x2-x1 = x6-x5 = hround 2.55u+eps;
+ draw z1 right_to_down z2...{z3-z4}z3
+ --z4{z3-z4}...z5 down_to_right z6;
+ labels(1, 2, 3, 4, 5, 6);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"254", 8u#, asc_height#, 0);
+ "The letter lambda";
+% no italic correction
+ pickup lower_cal.nib;
+ top y1 = h+eps; bot y2 = bot y3 = -eps;
+ top y4 = max(x_height, 0.5h);;
+ apprl-lft x3 = rt x2-(w-apprr) = hround 0.5u-eps;
+ x4 = 0.5[x2, x3]; z1 = whatever[z2, z4];
+ draw z1..z2; draw z3..z4; labels(1, 2, 3, 4);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"255", 8u#, x_height#, desc_depth#);
+ "The letter mu";
+ italcorr x_height#*slant-1.5u#;
+ pickup lower_cal.nib;
+ top y1a = h+eps; bot y1b = -d-eps; lft x1a = lft x1b = apprl;
+ draw z1a..z1b;
+ x2a = x1a; rt x2c = rt x2d = w-apprr; x2b = 0.5[x2a, x2c];
+ bot y2b = -d_o; top y2d = h+eps;
+ y2a = 0.5[y2d, y2b]; y2c = 2/3[y2d, y2b];
+ draw z2a down_to_right z2b right_to_up z2c..z2d;
+ labels(1a, 1b, 2a, 2b, 2c, 2d);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"256", 7u#, asc_height#, 0);
+ "The letter nu";
+ italcorr 0.7asc_height#*slant-0.5u#+ho#;
+ pickup lower_cal.nib;
+ top y1 = x_height+eps;
+ bot y2 = -d_o; top y4 = h+eps; y3 = 0.5[y2, y4];
+ lft x1 = apprl-hround 0.5u; rt x3 = w-apprr+ho;
+ x2 = x4 = good.x 0.5[x1, x3];
+ draw z1--z2{2(x3-x2), y3-y2}...z3{up}
+ ...{x4-x3, (1-superness)*(y4-y3)}z4;
+ labels(1, 2, 3, 4);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"257", 8u#, asc_height#, desc_depth#);
+ "The letter xi";
+ italcorr x_height#*slant-.5u#;
+ pickup lower_cal.nib;
+ top y1 = h; top y2 = top y3 = top y4 = vround(y1-0.25(h-x_height));
+ top y6 = top y7 = top y8 = vround 0.5h; bot y10 = bot y11 = 0; bot y13 = -d;
+ y5 = 0.5[y6, y4]; y9 = 0.4[y10, y8]; y12 = 0.5[y13, y11];
+ lft x1 = apprl+hround 1.5u; lft x5 = apprl; lft x9 = apprl-ho;
+ rt x3 = rt x7 = w-apprr-hround u; rt x12 = w-apprr+ho;
+ x2 = 0.7[x1, x3];
+ x4 = 0.85[x5, x3];
+ x6 = 0.7[x5, x7];
+ x8 = 0.8[x9, x7];
+ x10-x9 = x12-x11 = 0.4(x12-x9);
+ x13 = good.x 0.5[x9, x12];
+ draw z1 down_to_right z2..z3&z3..z4 left_to_down z5
+ down_to_right z6..z7&z7..z8 left_to_down z9 down_to_right z10
+ ...z11 right_to_down z12 down_to_left z13;
+ labels(range 1 thru 13);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"261", 9u#, x_height#, desc_depth#);
+ "The letter pi";
+ italcorr x_height#*slant;
+ pickup lower_cal.nib;
+ top y1 = h; y1 = y2 = y3 = y5; bot y4 = bot y6 = -eps;
+ lft x1 = apprl-eps-hround 0.5u;
+ rt x2 = w-apprr+eps+hround 0.5u;
+ x3 = x4; x5 = x6; x3-x1 = x2-x5;
+ x3 = good.x 0.25[apprl, w-apprr];
+ draw z1..z2; draw z3..z4; draw z5..z6;
+ labels(1, 2, 3, 4, 5, 6);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"262", 8u#, x_height#, desc_depth#);
+ "The letter rho";
+ italcorr 0.7x_height#*slant-0.5u#+ho#;
+ pickup lower_cal.nib; set_loop1(right); draw_loop1(right);
+ bot y2 = -d-eps; x2 = x1c; draw z1c..z2; labels(2);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"263", 8u#, x_height#, desc_depth#);
+ "The letter variant rho";
+ italcorr 0.7x_height#*slant-0.5u#+ho#;
+ pickup lower_cal.nib; set_loop1(right); draw_loop1(right);
+ bot y3 = bot y4 = -d; y2 = 0.5[y1c, y3];
+ x2 = x1c; rt x4 = w-apprr+eps; x3 = 0.5[x2, x4];
+ draw z1c..z2 down_to_right z3..z4; labels(2, 3, 4);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"264", 9u#, x_height#, 0);
+ "The letter sigma";
+ italcorr x_height#*slant;
+ save loop_right; loop_right = apprr+hround u;
+ pickup lower_cal.nib; set_loop1(both); draw_loop1(both);
+ rt x3 = w-apprr+hround 0.5u+eps; top y3 = h;
+ z2 = 0.5[z1b, z3];
+ draw z1b...z2{(z3-z2) yscaled 2}...z3; labels(2, 3);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"265", 7u#, x_height#, comma_depth#);
+ "The letter variant sigma";
+ italcorr x_height#*slant-0.5u#;
+ pickup lower_cal.nib;
+ top y2 = h+u_o; bot y7 = -d-d_o; bot y4 = bot y5 = 0;
+ y2-y1 = vround 0.06h; y8-y7 = vround 0.08h;
+ y3 = 0.45[y4, y2]; y6 = 0.5[y7, y5];
+ lft x3 = apprl-ho; rt x1-eps = rt x6-ho = w-apprr;
+ x2 = 0.7[x3, x1]; x4 = 0.45[x3, x6]; x5 = 0.55[x3, x6];
+ x7 = 0.7[x3, x6]; x8 = good.x x4;
+ draw z1{x2-x1, 2(y2-y1)}
+ ...z2 left_to_down z3 down_to_right z4
+ ...z5right_to_down z6 down_to_left z7 hook_to z8;
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"266", 8u#, x_height#, desc_depth#);
+ "The letter tau";
+ italcorr x_height#*slant;
+ center_stem(3, 4);
+ top y1 = h; y1 = y2 = y3; bot y4 = -eps;
+ lft x1 = apprl-eps-hround 0.5u;
+ rt x2 = w-apprr+eps+hround 0.5u;
+ draw z1..z2; draw z3..z4;
+ labels(1, 2, 3, 4);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"267", 8u#, x_height#, 0);
+ "The letter upsilon";
+ italcorr x_height#*slant-0.5u#;
+ pickup lower_cal.nib;
+ top y1 = top y5 = h+eps; bot y3 = -d_o; y2 = y4 = 0.5[y3, y1];
+ lft x1 = lft x2 = apprl; rt x4 = rt x5 = w-apprr; x3 = 0.5[x1, x5];
+ draw z1..z2 down_to_right z3 right_to_up z4..z5;
+ labels(1, 2, 3, 4, 5);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"270", 10u#, cap_height#, desc_depth#);
+ "The letter phi";
+ italcorr 0.7x_height#*slant-0.5u#+ho#;
+ pickup lower_cal.nib; set_loop1(both); draw_loop1(both);
+ top y2 = h+eps; bot y3 = -d-eps; x2 = x3 = good.x 0.5[apprl, w-apprr];
+ draw z2..z3; labels(2, 3);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"271", 10u#, x_height#, desc_depth#);
+ "The letter variant phi";
+ italcorr 0.7x_height#*slant-0.5u#+ho#;
+ pickup lower_cal.nib;
+ top y1-eps = top y5-u_o = h; bot y3 = -d_o; bot y7 = -d-eps;
+ 0.5[y2, y2'] = 0.5[y3, y5]; y2-y2' = loop_squareness*(y1-y3);
+ y2 = y4; y2' = y4'; y6 = 2/3[y3, y5];
+ lft x2 = lft x2' = apprl-ho; rt x4 = rt x4' = w-apprr+ho;
+ x3 = x6 = x7 = good.x 0.5[x2, x4];
+ x5 = 1/3[x6, x4]; x1 = good.x 0.65[x2, x6];
+ draw z1 left_to_down z2..z2' down_to_right z3 right_to_up
+ z4'..z4 up_to_left z5 left_to_down z6..z7;
+ labels(1, 2, 2', 3, 4, 4', 5, 6, 7);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"272", 9u#, x_height#, desc_depth#);
+ "The letter chi";
+ italcorr x_height#*slant;
+ pickup lower_cal.nib;
+ top y1 = top y3 = h+eps; bot y2 = bot y4 = -d-eps;
+ lft x1+hround 0.25u = lft x4+hround 0.5u = apprl-eps;
+ rt x2-hround 0.5u = rt x3-hround 0.25u = w-apprr+eps;
+ draw z1..z2; draw z3..z4; labels(1, 2, 3, 4);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"273", 10u#, asc_height#, desc_depth#);
+ "The letter psi";
+ italcorr x_height#*slant-0.5u#;
+ center_stem(6, 7);
+ top y1 = top y5 = x_height+eps; bot y3 = -d_o; y2 = y4 = 0.5[y3, y1];
+ lft x1 = lft x2 = apprl; rt x4 = rt x5 = w-apprr; x3 = 0.5[x1, x5];
+ top y6 = h+eps; bot y7 = -d-eps;
+ draw z1..z2 down_to_right z3 right_to_up z4..z5;
+ draw z6..z7; labels(1, 2, 3, 4, 5, 6, 7);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"274", 12u#, x_height#, 0);
+ "The letter omega";
+ italcorr 0.7x_height#*slant-0.5u#+ho#;
+ pickup lower_cal.nib;
+ top y1 = top y9 = h+eps; bot y3 = bot y7 = -d_o; y2 = y8 = 0.5[y3, y1];
+ y4 = y6 = 0.5[y3, y1]; y5 = good.y 0.75[y3, y1]+eps;
+ lft x2 = apprl-ho; rt x8 = w-apprr+ho;
+ x1 = good.x(x2+1.2u); x9 = good.x(x8-1.2u);
+ x3 = 0.265[x2, x8]; x7 = 0.735[x2, x8]; x5 = good.x 0.5[x2, x8];
+ x4-x5 = x5-x6 = hround 0.7u+eps;
+ draw z1{3(x2-x1), y2-y1}
+ ...z2 down_to_right z3 right_to_up z4 up_to_left
+ z5 left_to_down z6 down_to_right z7 right_to_up z8
+ ...{3(x9-x8), y9-y8}z9;
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+ math_fit(0, ic#);
+endchar;
+
+beginchar(oct"275", 14u#, x_height#, 0);
+ "The letter variant pi";
+ italcorr (x_height#+hook_h#)*slant;
+ pickup lower_cal.nib;
+ top y1 = top y9 = h; bot y3 = bot y7 = -d_o; y2 = y8 = 0.5[y3, y1];
+ y4 = y6 = 0.6[y3, y1]; y5 = good.y 0.7[y3, y1]+eps;
+ lft x2 = apprl+hround 2u-ho; rt x8 = w-apprr-hround 0.4u+ho;
+ x1 = good.x(x2+1.2u); x9 = good.x(x8-1.2u);
+ x3 = 0.265[x2, x8]; x7 = 0.735[x2, x8]; x5 = good.x 0.5[x2, x8];
+ x4-x5 = x5-x6 = hround 0.25u+eps;
+ draw z1{3(x2-x1), y2-y1}
+ ...z2 down_to_right z3 right_to_up z4 up_to_left
+ z5 left_to_down z6 down_to_right z7 right_to_up z8
+ ...{3(x9-x8), y9-y8}z9;
+ y10 = hang_h; top y11 = h; y11 = y12; y13 = y12;
+ apprl-lft x10 = rt x13-(w-apprr) = hround 0.5u;
+ x11 = min(x10+pi_hang_w, x1); x12 = max(x13-pi_hang_w, x9);
+ draw z10--z11..z12 right_to_up z13;
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
+ math_fit(0, ic#);
+endchar;
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathcdrv.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathcdrv.mf
new file mode 100644
index 00000000000..3780a3914da
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathcdrv.mf
@@ -0,0 +1,229 @@
+% mathematical symbols by Anthony Phan.
+% file: mathadrv.mf (driver file for matha serie,
+% U stands for Unsupported)
+% last modification: May 16, 2005.
+
+mode_setup;
+math_setup;
+%
+% This file calls calu.mf and then extends
+% the superb work of N. N. Billawala into
+% a whole OT1 font.
+%
+
+%
+% First thing to do is to copy Computer Modern's
+% control sequences and setup.
+%
+%slant := 0;
+newinternal l, r, shrink_fit; % adjustments to spacing
+boolean math_fitting;
+
+flare := dtsz;
+flare# := dtsz#;
+
+def cal_setup =
+ let adjust_fit = normal_adjust_fit;
+ pickup pencircle xscaled cap_curve yscaled cap_hair rotated 30;
+ cal.nib := savepen;
+ pair cal.extension; cal.extension := (.75cap_curve, 0) rotated 30;
+ pickup pencircle xscaled cap_curve yscaled cap_hair rotated 70;
+ tilted.nib := savepen;
+ pickup pencircle xscaled curve yscaled cap_hair rotated 70;
+ med_tilted.nib := savepen;
+ pickup pencircle xscaled cap_stem yscaled cap_hair rotated 30;
+ med_cal.nib := savepen;
+ pickup pencircle xscaled stem yscaled cap_hair rotated 30;
+ light_cal.nib := savepen;
+ %
+ % lowercase and punctuation
+ %
+ pickup pencircle xscaled curve yscaled hair rotated 30;
+ lower_cal.nib := savepen;
+ lower_cal_width# := curve#*cosd 30+hair#*sind 30;
+ pickup pencircle xscaled 0.5[hair, curve] yscaled hair rotated 30;
+ fine_cal.nib := savepen;
+ %
+ pickup pencircle xscaled(cap_curve+dw) yscaled cap_hair rotated 30;
+ heavy_cal.nib := savepen;
+ bot_flourish_line := -0.5u-o;
+ pair bend; bend = (.5u, 0);
+ pair flourish_change; flourish_change = (4u, .2asc_height);
+ join_radius := u;
+ shrink_fit := 1+hround(2letter_fit#*hppp)-2letter_fit;
+enddef;
+
+let cmchar = \;
+def .... = .. tension atleast .9 .. enddef;
+vardef w# = charwd enddef;
+vardef d# = chardp enddef;
+vardef h# = charht enddef;
+vardef ic# = charic enddef;
+
+def do_expansion(expr expansion_factor) =
+ forsuffixes $ = u, jut, cap_jut, beak_jut, apex_corr:
+ $ := $.#*expansion_factor*hppp; endfor
+enddef;
+
+def normal_adjust_fit(expr left_adjustment, right_adjustment) =
+ numeric charwd_in; charwd_in = charwd;
+ l := -hround(left_adjustment*hppp)-letter_fit;
+ interim xoffset := -l;
+ charwd := charwd+2letter_fit#+left_adjustment+right_adjustment;
+ r := l+hround(charwd*hppp)-shrink_fit;
+ w := r-hround(right_adjustment*hppp)-letter_fit;
+ do_expansion(w/(charwd_in*hppp));
+enddef;
+
+def mono_adjust_fit(expr left_adjustment, right_adjustment) =
+ numeric charwd_in; charwd_in = charwd;
+ numeric expansion_factor;
+ mono_charwd# = 2letter_fit#
+ +expansion_factor*(charwd+left_adjustment+right_adjustment);
+ l := -hround(left_adjustment*expansion_factor*hppp)-letter_fit;
+ interim xoffset := -l;
+ r := l+mono_charwd-shrink_fit;
+ w := r-hround(right_adjustment*expansion_factor*hppp)-letter_fit;
+ charwd := mono_charwd#; charic := mono_charic#;
+ do_expansion(w/(charwd_in*hppp));
+enddef;
+
+extra_endchar := extra_endchar&"r := r+shrink_fit; w := r-l;";
+
+def ignore_math_fit(expr left_adjustment, right_adjustment) = enddef;
+
+def do_math_fit(expr left_adjustment, right_adjustment) =
+ l := l-hround(left_adjustment*hppp); interim xoffset := -l;
+ charwd := charwd+left_adjustment+right_adjustment;
+ r := l+hround(charwd*hppp)-shrink_fit;
+ charic := charic-right_adjustment;
+ if charic<0: charic := 0; fi
+enddef;
+
+currenttransform := identity slanted slant
+yscaled aspect_ratio scaled granularity;
+def t_ = transformed currenttransform enddef;
+
+cal_setup;
+autorounding := hair;
+
+%
+% UPPERCASE
+%
+
+let math_fit = do_math_fit;
+math_fitting := true;
+input calu.mf;
+
+%
+% OTHER CASES
+%
+
+let math_fit = ignore_math_fit;
+math_fitting := false;
+
+vardef hook_in(suffix $, $$, $$$) =
+ x$ := good.x x$;
+ x$$ = max(x$$$-1.25u, 0.5[x$, x$$$]);
+ top y$$ = x_height+oo; y$ = good.y 7/8[0, y$$];
+ y$$$ = 3/4x_height;
+ z$...z$$ right_to_down z$$$
+enddef;
+
+vardef hook_out(suffix $, $$, $$$) =
+ x$$$ := good.x x$$$;
+ x$$ = min(x$+1.25u, 0.5[x$, x$$$]);
+ bot y$$ = -oo; y$ = 1/4x_height; y$$$ = good.y 7/8[x_height, y$$];
+ z$ down_to_right z$$...z$$$ % super_arc
+enddef;
+
+vardef ital_arch(suffix $, $$, $$$) =
+ x$$ = 0.6[x$, x$$$];
+ top y$$ = x_height+oo; y$$$ = 0.65x_height;
+ z${up}...z$$ right_to_down z$$$ % super_arc
+enddef;
+
+vardef desc_curve(suffix $, $$, $$$) =
+ x$$$ := good.x x$$$; x$$ = 0.6[x$, x$$$];
+ y$ = 0; bot y$$ = -d-oo; y$$$ = good.y 1/3[y$$, y$];
+ z${down}...z$$ left_to_up z$$$...z$$$+round(1.1u*dir 60)
+enddef;
+
+vardef cal_dot@#(expr $, $$, dotsize) =
+ rt x@#a-lft x@#c = top y@#b-bot y@#d = dotsize+2eps;
+ rt x@#a = hround($+0.5dotsize)+eps;
+ top y@#b = vround($$+0.5dotsize)+eps;
+ y@#a = y@#c = 0.5[y@#b, y@#d];
+ x@#b = x@#d = 0.5[x@#c, x@#a];
+ filldraw superellipse(z@#a, z@#b, z@#c, z@#d, superness);
+ labels(@#a, @#b, @#c, @#d);
+enddef;
+
+comma_depth# := 0.75desc_depth#;
+comma_depth := vround 0.75desc_depth;
+
+vardef cal_comma@#(expr $, $$, deviation, prof) =
+ pickup fine_cal.nib;
+ cal_dot@#($, $$, dtsz);
+ if $$>prof: bot else: top fi y@#f = prof;
+ y@#e = 0.25[$$, y@#f];
+ if deviation>0:
+ x@#f = x@#c; rt x@#e = hround($+dtsz)+eps;
+ draw if $$>prof: z@#b else: z@#d fi right_to_down z@#e
+ ...{x@#f-x@#e, (1-superness)*(y@#f-y@#e)}z@#f;
+ else:
+ x@#f = x@#a; lft x@#e = hround($-dtsz)-eps;
+ draw if $$<prof: z@#d else: z@#b fi right_to_up z@#e
+ ...{x@#f-x@#e, (1-superness)*(y@#f-y@#e)}z@#f;
+ fi
+ labels(@#e, @#f);
+enddef;
+
+%
+% LOWERCASE, DIGITS, PUNCTUATION
+%
+
+input mathcall;
+
+%
+% GREEK
+%
+
+input mathcallgreek;
+
+currenttransform := identity
+yscaled aspect_ratio scaled granularity;
+autorounding := 0;
+extra_endchar := "";
+standard_proofing;
+
+extra_endchar := extra_endchar & "; charcode := charcode+code_offset;";
+dagesh := false; code_offset := 128;
+
+%
+% HEBREW
+%
+
+input mathhbrw;
+
+dagesh := true; code_offset := 160;
+
+%
+% HEBREAW WITH DAGESH
+%
+
+input mathhbrw;
+
+code_offset := 0;
+
+% parameters for TFM files.
+
+font_slant = 0;
+font_x_height = x_height#;
+font_normal_stretch = 3u#;
+font_normal_shrink = 2u#;
+font_quad = 18u#+4letter_fit#;
+font_extra_space = 2u#;
+font_normal_space = 6u#+2letter_fit#;
+
+end.
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathfine.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathfine.mf
new file mode 100644
index 00000000000..f8a2b748471
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathfine.mf
@@ -0,0 +1,375 @@
+% mathematical symbols by Anthony Phan.
+% file: mathfine.mf (various fine 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;
+
+%beginchar(Infinity,13.8u#+2appr#,v_center(0.2[x_height#,cap_height#]));
+% "Infinity";
+% numeric a,b; pickup fine.nib;
+% b=vround 0.3[fine,curve];
+% a=vround((h+d)/18); slope:=(h+d)/3u;
+% pos5(curve,angle(-1,-slope)-90);
+% pos11(b,-90); pos14(b,-90);
+% y1=y9=y5=(h-d)/2; top y7r=h+eps; bot y11r=-d-eps;
+% y7r-y14l=y3l-y11r=a; y3-y3l=y3r-y3=y7-y7l=y7r-y7=y11l-y11;
+% lft x1=appr; rt x9=w-appr; (x5-x1)/(y14-y3)=(x9-x5)/(y7-y11);
+% forsuffixes $=,r,l:
+% hellipse_set(1,3$,4$,5$); hellipse_set(9,7$,6$,5$);
+% endfor
+% slope:=-slope;
+% hellipse_set(1,14,13,5); hellipse_set(9,11,12,5);
+% y15=y13; x13-x14=x14-x15; x15=x2; y15-y1=y1-y2;
+% y10=y12; x10-x11=x11-x12; x8=x10; y10-y9=y9-y8;
+% filldraw stroke z1{down}...z2{1,slope}...z3e{right}...z4e---z6e
+% ...z7e{right}...z8{1,slope}...z9{down}...z10{-1,slope}...
+% z11e{left}...z12---z13...z14e{left}...z15{-1,slope}...z1{down};
+% penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
+% tmp_picture:=currentpicture;
+%endchar;
+
+beginchar(Infinity,13.8u#+2appr#,v_center(spread3#));
+ "Infinity";
+ numeric a,b; pickup fine.nib;
+ a=vround((h+d+2o)/18); b=vround 0.3[fine,curve];
+ slope:=(h+d+2o)/3.15u;
+ pos5(0.3[stem,curve],angle(-1,-slope)-90);
+ pos11(b,-90); pos14(b,-90);
+ y1=y9=y5=(h-d)/2; top y7r=h+o; bot y11r=-d-o;
+ y7r-y14l=y3l-y11r=a; y3-y3l=y3r-y3=y7-y7l=y7r-y7=y11l-y11;
+ lft x1=appr; rt x9=w-appr; (x5-x1)/(y14-y3)=(x9-x5)/(y7-y11);
+ forsuffixes $=,r,l:
+ hellipse_set(1,3$,4$,5$); hellipse_set(9,7$,6$,5$);
+ endfor
+ slope:=-slope;
+ hellipse_set(1,14,13,5); hellipse_set(9,11,12,5);
+ y15=y13; x13-x14=x14-x15; x15=x2; y15-y1=y1-y2;
+ y10=y12; x10-x11=x11-x12; x8=x10; y10-y9=y9-y8;
+ filldraw stroke z1{down}...z2{1,slope}...z3e{right}...z4e---z6e
+ ...z7e{right}...z8{1,slope}...z9{down}...z10{-1,slope}...
+ z11e{left}...z12---z13...z14e{left}...z15{-1,slope}...z1{down};
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
+ tmp_picture:=currentpicture;
+endchar;
+
+iff (known Infinity) and (known proportionnal_to):
+beginchar(proportionnal_to,12u#+2appr#,v_center(spread3#));
+ "Proportionnal to sign";
+ currentpicture:=tmp_picture;
+ cullit;
+ unfill (w-appr,-d)--(w-appr+4u,-d)--
+ (w-appr+4u,h)--(w-appr,h)--cycle;
+endchar;
+
+%
+% a revoir
+%
+beginchar(partial,6.8u#+2appr#,asc_height#,0);
+ "Partial derivative";
+ italcorr x_height#*slant-0.5u#-0.8u#;
+ localtransform = identity slanted slant
+ yscaled aspect_ratio scaled granularity
+ shifted (-hround 0.8u,0);
+ pickup fine.nib; pos2(stem,90); pos5(curve,180);
+ lft x1-hround 0.35u=lft x5r+eps=appr;
+ rt x3=w-appr+eps; x2=0.4[x1,x3]; x4=0.5[x5r,x3];
+ x6=0.5[x5,x3];
+ top y2r=asc_height+o; bot y4=-o;
+ top y6=max(x_height,0.5asc_height)+oo;
+ y3=0.5[y4,y2r]; y5=0.5[y4,y6]; y1=good.y 0.84[y4,y2r];
+ filldraw stroke z1 up_to_right z2e right_to_down z3;
+ filldraw stroke z4 left_to_up z5e up_to_right z6;
+ draw z3 down_to_left z4; draw z6{right}...z3;
+ penlabels(1,2,3,4,5,6);
+endchar;
+
+beginchar(partial_slash,6.8u#+2appr#,asc_height#,asc_depth#);
+ "Slashed partial derivative";
+ italcorr x_height#*slant-0.5u#-0.8u#;
+ localtransform=identity slanted slant
+ yscaled aspect_ratio scaled granularity
+ shifted (-hround 0.8u,0);
+ pickup fine.nib; pos2(stem,90); pos5(curve,180);
+ lft x1-hround 0.35u=lft x5r+eps=appr;
+ rt x3=w-appr+eps; x2=0.4[x1,x3]; x4=0.5[x5r,x3];
+ x6=0.5[x5,x3];
+ top y2r=asc_height+o; bot y4=-o;
+ top y6=max(x_height,0.5asc_height)+oo;
+ y3=0.5[y4,y2r]; y5=0.5[y4,y6]; y1=good.y 0.84[y4,y2r];
+ filldraw stroke z1 up_to_right z2e right_to_down z3;
+ filldraw stroke z4 left_to_up z5e up_to_right z6;
+ draw z3 down_to_left z4; draw z6{right}...z3;
+ %
+ bot y8=-d; y7-asc_height=-y8;
+ z7=whatever[z4,z6]; z8=whatever[z4,z6];
+ numeric a;
+ a=diag_width(max((rth0-fine),0),(z7-z8) slanted slant);
+ penpos7(a,0); penpos8(a,0); filldraw stroke z7e..z8e;
+ penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+%
+% daggers and asterisks
+%
+
+numeric dag_stem,dag_Stem;
+dag_stem=hround 0.3[curve,cap_curve];
+dag_Stem=hround 0.6[curve,cap_curve];
+
+beginchar(dagger,6u#+2appr#,asc_height#,asc_depth#);
+ "Dagger mark";
+% italcorr (0.75asc_height#-0.25asc_depth#)*slant-0.5u#;
+ interim stress:=0.5;
+ pickup fine.nib;
+ x1=hround(0.5w-0.5dag_stem)+0.5dag_stem;
+ y1=vround(0.25[h,-d]-0.5curve)+0.5curve;
+ y4=good.y 0.4[h,-d]; z1=z2=z3;
+ filldraw dagger_stroke1(h+oo-y1,dag_stem,hair,up)--cycle;
+ x1=x4=x4a=x4b=x5; bot y5=-d-o;
+ y4a=stress[y1,y4]; y4b=stress[y5,y4];
+ pos4(dag_Stem,0); pos5(hair,0);
+ filldraw stroke z1e{down}...{z4e-z4a}z4e{z4b-z4e}...z5e{down};
+ interim stress:=0.4;
+ filldraw dagger_stroke2(x1-appr+eps,curve,vair,left)--cycle;
+ filldraw dagger_stroke3(x1-appr+eps,curve,vair,right)--cycle;
+ labels(4,4a,4b,4r,4l,5,5r,5l);
+endchar;
+
+beginchar(double_dagger,6u#+2appr#,asc_height#,asc_depth#);
+ "Double dagger mark";
+% italcorr (0.75asc_height#-0.25asc_depth#)*slant-0.5u#;
+ interim stress:=0.5; pickup fine.nib;
+ x1=hround(0.5w-0.5dag_stem)+0.5dag_stem;
+ y1=vround(0.25[h,-d]-0.5curve)+0.5curve;
+ x1=x2=x3=x4=x5=x6=x7=x8=x9=x10; y1=y2=y3; h-y1-d=y4=y5=y6;
+ filldraw dagger_stroke1(h+oo-y1,dag_stem,hair,up)--cycle;
+ filldraw dagger_stroke4(h+oo-y1,dag_stem,hair,down)--cycle;
+ y7=good.y 0.35[h,-d]; z10l=z4r; z10r=z4l; y1-y7=y9-y4;
+ y8=0.5[y7,y9]; pos7(dag_Stem,0);
+ pos8(hair,0); pos9(dag_Stem,0);
+ z7a=stress[z1,z7]; z7b=stress[z8,z7];
+ z9a=stress[z4,z9]; z9b=stress[z8,z9];
+ filldraw stroke z1e{down}...{z7e-z7a}z7e{z7b-z7e}...z8e{down}
+ ...{z9e-z9b}z9e{z9a-z9e}...z10e{down};
+ interim stress:=0.4;
+ filldraw dagger_stroke2(x1-appr,curve,vair,left)--cycle;
+ filldraw dagger_stroke3(x1-appr+eps,curve,vair,right)--cycle;
+ filldraw dagger_stroke5(x1-appr+eps,curve,vair,left)--cycle;
+ filldraw dagger_stroke6(x1-appr+eps,curve,vair,right)--cycle;
+ labels(7a,7b,9a,9b); penlabels(7,8,9,10);
+endchar;
+
+if (known upper_asterisk)
+ or (known lower_asterisk)
+ or (known triple_asterisk):
+ beginpicture(tmp,ast_size#+2appr#,ast_size#,0);
+ autorounded; interim stress:=0.5; pickup null.nib;
+ numeric b,c,dag_curve,dag_stem;
+ dag_curve=ast_curve; dag_stem=ast_stem;
+ b=1.8ast_stem; c=1.4ast_stem;
+ %
+ x0=hround(0.5w-0.5dag_curve)+0.5dag_curve; y0=0.5[-d,h];
+ for $=1 upto 6: z[$]=b*dir($*60+30)+z0;
+ z[$]'=c*dir($*60+60)+z0; endfor
+ filldraw for $=1 upto 6: dagger_stroke[$](round(0.5ast_size-b)+eps,
+ dag_curve,dag_stem,dir($*60+30))...z[$]'...endfor cycle;
+ endpicture;
+fi
+
+beginchar(upper_asterisk,ast_size#+2appr#,body_height#,0);
+ "Upper asterisk";
+% italcorr body_height#*slant-0.5u#;
+ currentpicture:=tmp_picture shifted(0,h-ast_size);
+endchar;
+
+beginchar(lower_asterisk,ast_size#+2appr#,
+ ast_size#-body_depth#,body_depth#);
+ "Lower asterisk";
+% italcorr charht*slant-0.5u;
+ currentpicture:=tmp_picture shifted(0,-body_depth);
+endchar;
+
+beginchar(triple_asterisk,20u#+2appr#,body_height#,body_depth#);
+ "Triple asterisks";
+% italcorr charht*slant-0.5u;
+ currentpicture:=
+ tmp_picture shifted(hround 6.5u,h-ast_size)+
+ tmp_picture shifted(2hround 6.5u-hround 13u,-d)+
+ tmp_picture shifted(hround 13u,-d);
+endchar;
+
+%
+% Musical signs (supposed to be identical to cm's ones...)
+%
+
+beginchar(musical_flat_sign,5u#+2appr#,body_height#,0);
+ "Musical flat sign";
+ pickup crisp.nib;
+ pos1(hair,0); pos2(hair,180); pos3(hair,0); x1=x2=x3;
+ pos4(.25[hair,curve],60); pos5(curve,0);
+ lft x1l=appr; x4=0.5w; rt x5r=w-appr;
+ top y1=h; bot y3=-o; top y4=x_height+o;
+ y2=y4-.2x_height; y5=3/4x_height;
+ filldraw stroke z1e--z3e; % stem
+ filldraw stroke z2e{up}...z4e{right}...z5e{down}
+ ...{2(x3-x5e),y3-y5e}z3e; % bowl
+ penlabels(1,2,3,4,5);
+endchar;
+
+beginchar(musical_natural_sign,5u#+2appr#,asc_height#,desc_depth#);
+ "Musical natural sign";
+ pickup crisp.nib;
+ pos1(hair,0); pos2(curve,90); pos3(curve,90);
+ pos4(curve,90); pos5(curve,90); pos6(hair,0);
+ rt x1r=hround 7/8u+appr; x2=x4=x1l; x3=x5=x6r=w-x2;
+ y1=h+o; top y2r=0; .5[y2,y3]=0; y4-y2=y5-y3=x_height; bot y6=-d-o;
+ x2'=x1r; z2'=whatever[z2r,z3r]; x5'=x6l; z5'=whatever[z4l,z5l];
+ (x1r,y)=z1l+whatever*(z5-z4); y6l:=y6l-(y-y1r); y1r:=y;
+ filldraw z1l--z2l--z3l--z3r--z2'--z1r--cycle; % left stem and lower bar
+ filldraw z6r--z5r--z4r--z4l--z5'--z6l--cycle; % right stem and upper bar
+ penlabels(1,2,3,4,5,6);
+endchar;
+
+beginchar(musical_sharp_sign,5u#+2appr#,asc_height#,desc_depth#);
+ "Musical sharp sign";
+ pickup crisp.nib;
+ pos1(curve,90); pos2(curve,90); pos3(curve,90); pos4(curve,90);
+ lft x1=lft x3=appr; rt x2=rt x4=w-appr;
+ top y3r=0; .5[y3,y4]=0; y1-y3=y2-y4=x_height;
+ filldraw stroke z1e--z2e; filldraw stroke z3e--z4e; % bars
+ numeric theta,hstem; theta=angle(z2-z1);
+ (hstem-crisp)*cosd theta=hair-crisp;
+ pos5(hstem,theta); pos6(hstem,theta);
+ pos7(hstem,theta); pos8(hstem,theta);
+ lft x5l=lft x6l=hround(2u-.5hair); x7=x8=w-x6;
+ top y7l=h+o; bot y6r=-d-o; z7-z5=z8-z6=(whatever,0) rotated theta;
+ filldraw stroke z5e--z6e; filldraw stroke z7e--z8e; % stems
+ penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+beginchar(degree_sign,
+ 5u#+2appr#,0.8asc_height#,0);
+ "Degree sign";
+ b:=round min(6.5u,8/12h);
+ pickup rule.nib0;
+ adjust_dot1((0.5w,6.5/12h),b,true,true);
+ full_dot:=false; dot(1,1');
+endchar;
+
+beginchar(prime_sign,
+ u#+max(1.75u#,curve#+2(curve#-stem#))+2appr#,
+ 0.8asc_height#,0);
+ "Prime sign";
+ pickup fine.nib;
+ a:=hround(bold+2dw); b:=hround 0.5[vair,stem];
+ y1+0.5a=h; x1+0.5a=w-appr+hround 0.75u;
+ y3=1/12asc_height; x3-0.5b=appr-hround 0.5u;
+ save r,R,u_; pair u_; u_=unitvector(z1-z3);
+ R=0.5(a-fine); x=R/(length(z1-z3)++0.5(b-fine));
+ z1-z2=R*x*u_; z0-z1=R*u_; c:=angle(z1-z3)-90;
+ penpos1(2R,c); penpos2(2R*(1+-+x),c); pos3(b,c);
+ filldraw z3r---z2r...z1r{u_}...
+ (superness[z1,z1.r]+superness[z1,z0]-z1){z0-z1.r}
+ ...z0{z1.l-z1.r}...
+ (superness[z1,z1.l]+superness[z1,z0]-z1){z1.l-z0}
+ ...z1.l{-u_}...z2l---z3l--cycle;
+ penlabels(0,1,2,3);
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(second_sign,
+ u#+2.25u#+2letter_fit#+2max(1.75u#,curve#+2(curve#-stem#))+2appr#,
+ 0.8asc_height#,0);
+ "Second sign";
+ a:=hround(bold+2dw+2.25u+2letter_fit);
+ currentpicture:=tmp_picture+(tmp_picture shifted (a,0));
+endchar;
+
+beginchar(third_sign,
+ u#+2*2.00u#+4letter_fit#+3max(1.75u#,curve#+2(curve#-stem#))+2appr#,
+ 0.8asc_height#,0);
+ "Third sign";
+ a:=hround(bold+2dw+2.00u+2letter_fit);
+ currentpicture:=tmp_picture+(tmp_picture shifted (a,0))
+ +(tmp_picture shifted (2a,0));
+endchar;
+
+beginchar(fourth_sign,
+ u#+3*1.75u#+6letter_fit#+4max(1.75u#,curve#+2(curve#-stem#))+2appr#,
+ 0.8asc_height#,0);
+ "Fourth sign";
+ a:=hround(bold+2dw+1.75u+2letter_fit);
+ currentpicture:=tmp_picture+(tmp_picture shifted (a,0))
+ +(tmp_picture shifted (2a,0))+(tmp_picture shifted (3a,0));
+endchar;
+
+beginchar(backprime_sign,
+ u#+max(1.75u#,curve#+2(curve#-stem#))+2appr#,0.8asc_height#,0);
+ "Backrime sign";
+ pickup fine.nib;
+ a:=hround(bold+2dw); b:=hround 0.5[vair,stem];
+ y1+0.5a=h; x1-0.5a=appr-hround 0.75u;
+ y3=1/12asc_height; x3+0.5b=w-appr+hround 0.5u;
+ save r,R,u_; pair u_; u_=unitvector(z1-z3);
+ R=0.5(a-fine); x=R/(length(z1-z3)++0.5(b-fine));
+ z1-z2=R*x*u_; z0-z1=R*u_; c:=angle(z1-z3)-90;
+ penpos1(2R,c); penpos2(2R*(1+-+x),c); pos3(b,c);
+ filldraw z3r---z2r...z1r{u_}...
+ (superness[z1,z1.r]+superness[z1,z0]-z1){z0-z1.r}
+ ...z0{z1.l-z1.r}...
+ (superness[z1,z1.l]+superness[z1,z0]-z1){z1.l-z0}
+ ...z1.l{-u_}...z2l---z3l--cycle;
+ penlabels(0,1,2,3);
+endchar;
+
+beginchar(accent_circ,
+ 5u#+2appr#,asc_height#,0);
+ "Circ accent";
+ b:=max(h+2o-1/3[x_height,h],4u);
+ pickup pencircle scaled hair;
+ adjust_dot1((0.5w,max(1/3[x_height,h]+0.5b-o,x_height+2o)),b,false,false);
+ full_dot:=false; dot(1,1');
+endchar;
+
+beginchar(accent_dot,
+ 3u#+2appr#,
+ min(7/10[x_height#,asc_height]+0.5max(dtsz#,cap_curve#),asc_height#),0);
+ "Dot accent";
+ b:=max(dtsz,cap_curve); ensure_centering_of(b);
+ pickup null.nib;
+ adjust_dot1((0.5w,h+1-0.5b),b,false,false); dot(1,1');
+endchar;
+
+beginchar(accent_ddot,7u#+2appr#,
+ min(7/10[x_height#,asc_height]+0.5max(dtsz#,cap_curve#),asc_height#),0);
+ "Ddot accent";
+ b:=max(dtsz,cap_curve);% ensure_centering_of(b);
+ pickup null.nib;
+ adjust_dot1((0.5w-1.75u,h+1-0.5b),b,false,false); dot(1,1');
+ adjust_dot2((0.5w+1.75u,h+1-0.5b),b,false,false); dot(2,2');
+endchar;
+
+beginchar(accent_dddot,8u#+2appr#,
+ min(7/10[x_height#,asc_height]+0.5max(dtsz#,cap_curve#),asc_height#),0);
+ "Dddot accent";
+ a:=hround 3.25u; b:=max(dtsz,cap_curve); ensure_centering_of(b);
+ pickup null.nib;
+ adjust_dot1((0.5w-a,h+1-0.5b),b,false,false); dot(1,1');
+ adjust_dot2((0.5w,h+1-0.5b),b,false,false); dot(2,2');
+ adjust_dot3((0.5w+a,h+1-0.5b),b,false,false); dot(3,3');
+endchar;
+
+beginchar(accent_ddddot,9u#+2appr#,
+ min(7/10[x_height#,asc_height]+0.5max(dtsz#,cap_curve#),asc_height#),0);
+ "Ddddot accent";
+ a:=hround 3u; b:=max(dtsz,cap_curve);% ensure_centering_of(b);
+ pickup null.nib;
+ adjust_dot1((0.5w-1.5a,h+1-0.5b),b,false,false); dot(1,1');
+ adjust_dot2((0.5w-0.5a,h+1-0.5b),b,false,false); dot(2,2');
+ adjust_dot3((0.5w+0.5a,h+1-0.5b),b,false,false); dot(3,3');
+ adjust_dot4((0.5w+1.5a,h+1-0.5b),b,false,false); dot(4,4');
+endchar;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathgrey.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathgrey.mf
new file mode 100644
index 00000000000..4a8f675edbb
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathgrey.mf
@@ -0,0 +1,97 @@
+% mathematical symbols by Anthony Phan.
+% file: mathgrey.mf (grey symbols)
+% last modification: May 16, 2005.
+
+def horizontal_rules_list=
+ 0.5[-d,h]-math_axis,0.5[-d,h]-math_axis+x_height,
+ 0.25[-d,h],0.5[-d,h],0.75[-d,h] enddef;
+
+% basic pieces and parameters
+
+grey_ppi=1200;% maximum resolution
+grey_sc:=round max(1,pixels_per_inch/grey_ppi);
+grey_ht:=4grey_sc; grey_wd:=4grey_sc;
+picture grey.light,grey.medium,grey.dark;
+grey.light=nullpicture;
+grey.medium=nullpicture;
+grey.dark=nullpicture;
+for z=(0,2),(1,0),(2,3),(3,1):
+ addto grey.light contour
+ (unitsquare scaled grey_sc) shifted (z scaled grey_sc);
+endfor
+for z=(0,1),(0,3),(1,0),(1,2),(2,1),(2,3),(3,0),(3,2):
+ addto grey.medium contour
+ (unitsquare scaled grey_sc) shifted (z scaled grey_sc);
+endfor
+addto grey.dark contour
+(0,0)--(grey_wd,0)--(grey_wd,grey_ht)--(0,grey_ht)--cycle;
+for z=(0,2),(1,0),(2,3),(3,1):
+ addto grey.dark contour
+ (unitsquare scaled grey_sc) shifted (z scaled grey_sc) withweight -1;
+endfor
+
+% The whole bounding box is shaded (tmp_light not currentpicture).
+
+vardef grey_background@#(expr x_min,x_max,y_min,y_max)=
+ for j=floor(y_min/grey_ht) upto ceiling(y_max/grey_ht):
+ for i=floor(x_min/grey_wd) upto ceiling(x_max/grey_wd):
+ addto tmp_picture also (grey.@# shifted (i*grey_wd,j*grey_ht));
+ endfor endfor
+enddef;
+
+% The path p must lies within the character bounding box.
+
+vardef grey_fill(expr p,x_min,x_max,y_min,y_max)(suffix @#)=
+ tmp_picture:=nullpicture;
+ grey_background@#(x_min,x_max,y_min,y_max);
+ addto tmp_picture contour p;
+ cull tmp_picture keeping (2,infinity);
+ addto tmp_picture also currentpicture;
+ currentpicture:=tmp_picture;
+enddef;
+
+def tmp_program(expr circle,radius)(suffix @#)=
+ x0=good.x 0.5w; y0=good.y 0.5[-d,h];
+ if circle:
+ for i=1 upto 8:
+ z[i]=z0+round(radius-0.5rth)*right rotated(45*(i-1));
+ endfor; labels(0,1,2,3,4,5,6,7,8);
+ tmp_path:=z1{up}...z2{z3-z1}
+ ...z3{left}...z4{z5-z3}...z5{down}...z6{z7-z5}
+ ...z7{right}...z8{z1-z7}...cycle;
+ else:
+ for i=1 step 2 until 7:
+ z[i]=z0+round(6.75u-0.5rth)*right rotated(45*(i-1));
+ endfor;
+ x1=x2=x8; x5=x4=x6; y2=y3=y4; y6=y7=y8;
+ labels(0,1,2,3,4,5,6,7,8);
+ tmp_path:=z1--z2--z3--z4--z5--z6--z7--z8--cycle;
+ fi
+ grey_fill(tmp_path,x5,x1,y7,y3,@#);
+enddef;
+
+beginchar(hex"DD",arithmetic_bounds);
+ tmp_program(true,6.75u,light);
+endchar;
+
+beginchar(hex"FD",arithmetic_bounds);
+ tmp_program(false,6.75u,light);
+endchar;
+
+beginchar(hex"DE",arithmetic_bounds);
+ tmp_program(true,6.75u,medium);
+endchar;
+
+beginchar(hex"FE",arithmetic_bounds);
+ tmp_program(false,6.75u,medium);
+endchar;
+
+beginchar(hex"DF",arithmetic_bounds);
+ tmp_program(true,6.75u,dark);
+endchar;
+
+beginchar(hex"FF",arithmetic_bounds);
+ tmp_program(false,6.75u,dark);
+endchar;
+
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathhbrw.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathhbrw.mf
new file mode 100644
index 00000000000..a09e30a017b
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathhbrw.mf
@@ -0,0 +1,2220 @@
+% mathematical symbols by Anthony Phan.
+% file: mathhbrw.mf (Bold Hebrew Letters)
+% last modification: May 16, 2005.
+% Origin see below:
+
+% cap_height# = 247 / 36 / 0.075 * 1.2 / designsize* FY#
+% ( = 10.97777 for 10 pt# fonts)
+% u#=20/36pt;
+def horizontal_rules_list=0.1h,0.2h,0.3h,0.4h,0.5h,0.6h,0.7h,0.8h,0.9h,
+ -body_depth,-desc_depth,cap_height,body_height
+enddef;
+
+if dagesh: tmp_string:=" with dagesh";
+else: tmp_string:=""; fi
+t:=turningcheck;
+extra_endchar_save:=extra_endchar;
+
+% look at the end of this file: we restore
+% initial values of turningcherck and extra_endchar.
+
+% font Normal HehenHebTBol at 12pt
+% converted from True Type format by TTF2MF ver. 0.02
+
+FX# := 18u#/1.2 * 0.075;
+FY# := designsize/1.2 * 0.075;
+
+def nonzerowinding =
+ cull currentpicture dropping (0,0);
+enddef;
+extra_endchar := extra_endchar & "nonzerowinding;";
+%
+smoothing := 0; autorounding := 0; turningcheck := 0;
+define_pixels (FX, FY);
+%
+
+beginchar(64, 10.703FX#,if true_size: 11.156FY#, 0.328FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((0.75,0)
+ --(0.75,0.594)
+ ..controls(1.063,0.615)and(1.268,0.664)
+ ..(1.367,0.742)
+ ..controls(1.435,0.794)and(1.495,0.872)
+ ..(1.547,0.977)
+ ..controls(1.599,1.081)and(1.625,1.174)
+ ..(1.625,1.258)
+ ..controls(1.625,1.372)and(1.555,1.549)
+ ..(1.414,1.789)
+ ..controls(1.133,2.263)and(0.953,2.604)
+ ..(0.875,2.813)
+ ..controls(0.797,3.021)and(0.758,3.266)
+ ..(0.758,3.547)
+ ..controls(0.758,3.984)and(0.883,4.423)
+ ..(1.133,4.863)
+ ..controls(1.383,5.303)and(1.82,5.849)
+ ..(2.445,6.5)
+ --(2.156,6.836)
+ ..controls(1.833,7.164)and(1.625,7.384)
+ ..(1.531,7.496)
+ ..controls(1.438,7.608)and(1.328,7.776)
+ ..(1.203,8)
+ ..controls(0.948,8.448)and(0.82,8.896)
+ ..(0.82,9.344)
+ ..controls(0.82,9.969)and(1.003,10.438)
+ ..(1.367,10.75)
+ ..controls(1.669,11.016)and(1.971,11.148)
+ ..(2.273,11.148)
+ ..controls(2.388,11.148)and(2.445,11.102)
+ ..(2.445,11.008)
+ ..controls(2.445,10.982)and(2.438,10.93)
+ ..(2.422,10.852)
+ ..controls(2.411,10.81)and(2.406,10.768)
+ ..(2.406,10.727)
+ ..controls(2.406,10.404)and(2.651,10.01)
+ ..(3.141,9.547)
+ --(6.375,6.5)
+ --(7.148,7.797)
+ ..controls(6.747,8.182)and(6.497,8.453)
+ ..(6.398,8.609)
+ ..controls(6.299,8.766)and(6.25,8.969)
+ ..(6.25,9.219)
+ ..controls(6.25,9.724)and(6.424,10.177)
+ ..(6.773,10.578)
+ ..controls(7.107,10.964)and(7.419,11.156)
+ ..(7.711,11.156)
+ ..controls(7.779,11.156)and(7.822,11.141)
+ ..(7.84,11.109)
+ ..controls(7.858,11.078)and(7.896,10.969)
+ ..(7.953,10.781)
+ ..controls(7.995,10.646)and(8.079,10.512)
+ ..(8.207,10.379)
+ ..controls(8.335,10.246)and(8.586,10.029)
+ ..(8.961,9.727)
+ ..controls(9.612,9.201)and(9.938,8.682)
+ ..(9.938,8.172)
+ ..controls(9.938,7.859)and(9.829,7.508)
+ ..(9.613,7.117)
+ ..controls(9.397,6.727)and(9.115,6.378)
+ ..(8.766,6.07)
+ ..controls(8.349,6.815)and(8.005,7.188)
+ ..(7.734,7.188)
+ ..controls(7.62,7.188)and(7.471,7.029)
+ ..(7.289,6.711)
+ --(6.859,5.992)
+ --(8.117,4.75)
+ ..controls(8.617,4.26)and(8.927,3.945)
+ ..(9.047,3.805)
+ ..controls(9.167,3.664)and(9.31,3.456)
+ ..(9.477,3.18)
+ ..controls(9.799,2.633)and(9.961,2.083)
+ ..(9.961,1.531)
+ ..controls(9.961,0.979)and(9.826,0.526)
+ ..(9.555,0.172)
+ ..controls(9.31,-0.161)and(9.115,-0.328)
+ ..(8.969,-0.328)
+ ..controls(8.911,-0.328)and(8.863,-0.293)
+ ..(8.824,-0.223)
+ ..controls(8.785,-0.152)and(8.727,0.008)
+ ..(8.648,0.258)
+ ..controls(8.477,0.674)and(8.029,1.211)
+ ..(7.305,1.867)
+ --(3.094,5.938)
+ ..controls(2.995,6.031)and(2.919,6.078)
+ ..(2.867,6.078)
+ ..controls(2.768,6.078)and(2.654,5.975)
+ ..(2.523,5.77)
+ ..controls(2.393,5.564)and(2.328,5.38)
+ ..(2.328,5.219)
+ ..controls(2.328,4.964)and(2.44,4.688)
+ ..(2.664,4.391)
+ ..controls(2.716,4.323)and(3.003,4.029)
+ ..(3.523,3.508)
+ ..controls(3.773,3.258)and(3.979,2.953)
+ ..(4.141,2.594)
+ ..controls(4.302,2.234)and(4.383,1.906)
+ ..(4.383,1.609)
+ ..controls(4.383,1.01)and(4.104,0.474)
+ ..(3.547,0)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((6.65u,0.5dtsz),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(65, 10.008FX#,if true_size: 11.273FY#, 0FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((8.586,0)
+ --(0.211,0)
+ ..controls(0.315,0.563)and(0.395,0.919)
+ ..(0.449,1.07)
+ ..controls(0.504,1.221)and(0.773,1.82)
+ ..(1.258,2.867)
+ --(7.477,2.867)
+ ..controls(7.523,3.424)and(7.547,3.984)
+ ..(7.547,4.547)
+ ..controls(7.547,5.276)and(7.516,5.828)
+ ..(7.453,6.203)
+ ..controls(7.391,6.578)and(7.279,6.911)
+ ..(7.117,7.203)
+ ..controls(6.982,7.443)and(6.827,7.602)
+ ..(6.652,7.68)
+ ..controls(6.478,7.758)and(6.185,7.797)
+ ..(5.773,7.797)
+ --(2.844,7.797)
+ ..controls(2.276,7.797)and(1.852,7.872)
+ ..(1.57,8.023)
+ ..controls(1.023,8.31)and(0.75,8.813)
+ ..(0.75,9.531)
+ ..controls(0.75,9.984)and(0.896,10.43)
+ ..(1.188,10.867)
+ ..controls(1.37,11.138)and(1.529,11.273)
+ ..(1.664,11.273)
+ ..controls(1.742,11.273)and(1.79,11.259)
+ ..(1.809,11.23)
+ ..controls(1.827,11.202)and(1.854,11.107)
+ ..(1.891,10.945)
+ ..controls(1.948,10.753)and(2.161,10.659)
+ ..(2.531,10.664)
+ --(5.492,10.664)
+ ..controls(6.034,10.664)and(6.415,10.641)
+ ..(6.637,10.594)
+ ..controls(6.858,10.547)and(7.07,10.448)
+ ..(7.273,10.297)
+ ..controls(7.602,10.052)and(7.837,9.716)
+ ..(7.98,9.289)
+ ..controls(8.124,8.862)and(8.211,8.253)
+ ..(8.242,7.461)
+ ..controls(8.284,6.263)and(8.305,5.378)
+ ..(8.305,4.805)
+ ..controls(8.305,4.122)and(8.273,3.477)
+ ..(8.211,2.867)
+ --(9.258,2.867)
+ ..controls(9.117,2.456)and(8.986,1.992)
+ ..(8.863,1.477)
+ ..controls(8.741,0.961)and(8.648,0.469)
+ ..(8.586,0)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((5.2u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(66, 6.164FX#,if true_size: 11.25FY#, 0FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((0.836,2.891)
+ --(3.383,2.891)
+ ..controls(3.534,2.891)and(3.625,2.897)
+ ..(3.656,2.91)
+ ..controls(3.688,2.923)and(3.703,2.961)
+ ..(3.703,3.023)
+ ..controls(3.703,3.044)and(3.685,3.169)
+ ..(3.648,3.398)
+ ..controls(3.617,3.622)and(3.602,3.901)
+ ..(3.602,4.234)
+ ..controls(3.602,4.906)and(3.654,5.615)
+ ..(3.758,6.359)
+ ..controls(3.81,6.708)and(3.836,6.982)
+ ..(3.836,7.18)
+ ..controls(3.836,7.383)and(3.772,7.549)
+ ..(3.645,7.68)
+ ..controls(3.517,7.81)and(3.354,7.875)
+ ..(3.156,7.875)
+ ..controls(3.047,7.875)and(2.919,7.862)
+ ..(2.773,7.836)
+ ..controls(2.544,7.794)and(2.383,7.773)
+ ..(2.289,7.773)
+ ..controls(1.883,7.773)and(1.534,7.974)
+ ..(1.242,8.375)
+ ..controls(1.029,8.672)and(0.922,9.005)
+ ..(0.922,9.375)
+ ..controls(0.922,9.807)and(1.016,10.228)
+ ..(1.203,10.637)
+ ..controls(1.391,11.046)and(1.586,11.25)
+ ..(1.789,11.25)
+ ..controls(1.883,11.25)and(1.966,11.174)
+ ..(2.039,11.023)
+ ..controls(2.148,10.805)and(2.339,10.695)
+ ..(2.609,10.695)
+ ..controls(2.641,10.695)and(2.732,10.698)
+ ..(2.883,10.703)
+ ..controls(2.904,10.703)and(2.935,10.703)
+ ..(2.977,10.703)
+ ..controls(3.466,10.703)and(3.85,10.521)
+ ..(4.129,10.156)
+ ..controls(4.408,9.792)and(4.547,9.286)
+ ..(4.547,8.641)
+ ..controls(4.547,8.51)and(4.542,8.354)
+ ..(4.531,8.172)
+ ..controls(4.505,7.698)and(4.492,7.417)
+ ..(4.492,7.328)
+ ..controls(4.492,6.646)and(4.565,5.747)
+ ..(4.711,4.633)
+ ..controls(4.862,3.456)and(4.938,2.779)
+ ..(4.938,2.602)
+ ..controls(4.938,2.398)and(4.927,2.029)
+ ..(4.906,1.492)
+ ..controls(4.896,1.378)and(4.888,1.016)
+ ..(4.883,0.406)
+ ..controls(4.878,0.135)and(4.784,0)
+ ..(4.602,0)
+ ..controls(4.471,0)and(4.383,0.12)
+ ..(4.336,0.359)
+ --(4.07,1.773)
+ ..controls(4.034,1.961)and(3.997,2.086)
+ ..(3.961,2.148)
+ ..controls(3.924,2.211)and(3.87,2.242)
+ ..(3.797,2.242)
+ ..controls(3.719,2.242)and(3.659,2.161)
+ ..(3.617,2)
+ --(3.07,0)
+ ..controls(2.341,0.005)and(1.742,0.008)
+ ..(1.273,0.008)
+ ..controls(1.018,0.008)and(0.664,0.005)
+ ..(0.211,0)
+ ..controls(0.263,0.255)and(0.38,0.786)
+ ..(0.563,1.594)
+ ..controls(0.651,1.974)and(0.742,2.406)
+ ..(0.836,2.891)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((2.4u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(67, 10FX#,if true_size: 11.234FY#, 0.125FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((1.867,10.664)
+ --(7.547,10.664)
+ ..controls(7.943,10.664)and(8.189,10.654)
+ ..(8.285,10.633)
+ ..controls(8.382,10.612)and(8.5,10.547)
+ ..(8.641,10.438)
+ ..controls(8.813,10.302)and(8.936,10.133)
+ ..(9.012,9.93)
+ ..controls(9.087,9.727)and(9.125,9.456)
+ ..(9.125,9.117)
+ ..controls(9.125,8.69)and(9.061,8.374)
+ ..(8.934,8.168)
+ ..controls(8.806,7.962)and(8.591,7.833)
+ ..(8.289,7.781)
+ ..controls(8.169,7.766)and(8.109,7.711)
+ ..(8.109,7.617)
+ ..controls(8.109,7.565)and(8.115,7.44)
+ ..(8.125,7.242)
+ --(8.391,2.664)
+ ..controls(8.401,2.508)and(8.406,2.276)
+ ..(8.406,1.969)
+ ..controls(8.406,1.464)and(8.378,1.087)
+ ..(8.32,0.84)
+ ..controls(8.263,0.592)and(8.159,0.388)
+ ..(8.008,0.227)
+ ..controls(7.784,-0.008)and(7.536,-0.125)
+ ..(7.266,-0.125)
+ ..controls(7.089,-0.125)and(7,-0.029)
+ ..(7,0.164)
+ ..controls(7,0.174)and(7.01,0.362)
+ ..(7.031,0.727)
+ --(7.359,7.008)
+ ..controls(7.375,7.32)and(7.383,7.513)
+ ..(7.383,7.586)
+ ..controls(7.383,7.669)and(7.362,7.717)
+ ..(7.32,7.73)
+ ..controls(7.279,7.743)and(7.135,7.75)
+ ..(6.891,7.75)
+ --(1.867,7.75)
+ ..controls(1.477,7.75)and(1.173,7.785)
+ ..(0.957,7.855)
+ ..controls(0.741,7.926)and(0.547,8.052)
+ ..(0.375,8.234)
+ ..controls(0.141,8.484)and(0.023,8.875)
+ ..(0.023,9.406)
+ ..controls(0.023,10.01)and(0.148,10.474)
+ ..(0.398,10.797)
+ ..controls(0.622,11.089)and(0.888,11.234)
+ ..(1.195,11.234)
+ ..controls(1.315,11.234)and(1.375,11.188)
+ ..(1.375,11.094)
+ ..controls(1.375,11.073)and(1.372,11.052)
+ ..(1.367,11.031)
+ ..controls(1.357,10.927)and(1.352,10.854)
+ ..(1.352,10.813)
+ ..controls(1.352,10.745)and(1.378,10.703)
+ ..(1.43,10.688)
+ ..controls(1.482,10.672)and(1.628,10.664)
+ ..(1.867,10.664)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((4.9u,0.475h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(68, 10.766FX#,if true_size: 11.211FY#, 0.008FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((8.18,0)
+ --(8.18,7.711)
+ ..controls(8.174,7.779)and(8.141,7.813)
+ ..(8.078,7.813)
+ --(2.797,7.813)
+ ..controls(2.302,7.813)and(1.922,7.872)
+ ..(1.656,7.992)
+ ..controls(1.422,8.096)and(1.234,8.283)
+ ..(1.094,8.551)
+ ..controls(0.953,8.819)and(0.883,9.12)
+ ..(0.883,9.453)
+ ..controls(0.883,10.104)and(1.052,10.596)
+ ..(1.391,10.93)
+ ..controls(1.578,11.117)and(1.776,11.211)
+ ..(1.984,11.211)
+ ..controls(2.036,11.211)and(2.07,11.174)
+ ..(2.086,11.102)
+ ..controls(2.128,10.862)and(2.174,10.714)
+ ..(2.227,10.656)
+ ..controls(2.279,10.599)and(2.391,10.57)
+ ..(2.563,10.57)
+ --(8.539,10.57)
+ ..controls(9.456,10.57)and(9.914,10.117)
+ ..(9.914,9.211)
+ ..controls(9.914,8.852)and(9.841,8.529)
+ ..(9.695,8.242)
+ ..controls(9.596,8.034)and(9.388,7.891)
+ ..(9.07,7.813)
+ ..controls(8.935,7.776)and(8.867,7.703)
+ ..(8.867,7.594)
+ ..controls(8.867,7.542)and(8.87,7.482)
+ ..(8.875,7.414)
+ --(9.336,1.898)
+ ..controls(9.357,1.664)and(9.367,1.5)
+ ..(9.367,1.406)
+ ..controls(9.367,1)and(9.268,0.663)
+ ..(9.07,0.395)
+ ..controls(8.872,0.126)and(8.622,-0.008)
+ ..(8.32,-0.008)
+ ..controls(8.294,-0.008)and(8.247,-0.005)
+ ..(8.18,0)
+ --cycle) xscaled FX yscaled FY;
+ fill((0.852,0)
+ ..controls(1.008,0.432)and(1.109,0.852)
+ ..(1.156,1.258)
+ ..controls(1.203,1.664)and(1.227,2.318)
+ ..(1.227,3.219)
+ ..controls(1.227,3.786)and(1.24,4.165)
+ ..(1.266,4.355)
+ ..controls(1.292,4.546)and(1.357,4.747)
+ ..(1.461,4.961)
+ ..controls(1.565,5.18)and(1.694,5.367)
+ ..(1.848,5.523)
+ ..controls(2.001,5.68)and(2.133,5.758)
+ ..(2.242,5.758)
+ ..controls(2.31,5.758)and(2.378,5.734)
+ ..(2.445,5.688)
+ ..controls(2.513,5.641)and(2.547,5.594)
+ ..(2.547,5.547)
+ ..controls(2.547,5.516)and(2.529,5.471)
+ ..(2.492,5.414)
+ ..controls(2.346,5.195)and(2.253,5.025)
+ ..(2.211,4.902)
+ ..controls(2.169,4.78)and(2.148,4.609)
+ ..(2.148,4.391)
+ ..controls(2.148,4.161)and(2.206,3.75)
+ ..(2.32,3.156)
+ ..controls(2.419,2.656)and(2.469,2.229)
+ ..(2.469,1.875)
+ ..controls(2.469,1.24)and(2.323,0.76)
+ ..(2.031,0.438)
+ ..controls(1.771,0.141)and(1.456,-0.008)
+ ..(1.086,-0.008)
+ --(0.945,0)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((5.8u,0.475h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(69, 5.094FX#,if true_size: 11.25FY#, 0.117FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((3.844,8.719)
+ --(3.867,1.672)
+ ..controls(3.872,1.135)and(3.773,0.677)
+ ..(3.57,0.297)
+ ..controls(3.424,0.021)and(3.271,-0.117)
+ ..(3.109,-0.117)
+ ..controls(3.005,-0.117)and(2.941,-0.076)
+ ..(2.918,0.008)
+ ..controls(2.895,0.091)and(2.883,0.315)
+ ..(2.883,0.68)
+ --(2.883,3.617)
+ ..controls(2.883,4.091)and(2.898,4.559)
+ ..(2.93,5.02)
+ ..controls(2.961,5.48)and(3.005,5.927)
+ ..(3.063,6.359)
+ ..controls(3.109,6.672)and(3.133,6.932)
+ ..(3.133,7.141)
+ ..controls(3.133,7.359)and(3.07,7.536)
+ ..(2.945,7.672)
+ ..controls(2.82,7.807)and(2.654,7.875)
+ ..(2.445,7.875)
+ ..controls(2.336,7.875)and(2.208,7.862)
+ ..(2.063,7.836)
+ ..controls(1.833,7.794)and(1.672,7.773)
+ ..(1.578,7.773)
+ ..controls(1.172,7.773)and(0.823,7.974)
+ ..(0.531,8.375)
+ ..controls(0.318,8.672)and(0.211,9.005)
+ ..(0.211,9.375)
+ ..controls(0.211,9.807)and(0.306,10.228)
+ ..(0.496,10.637)
+ ..controls(0.686,11.046)and(0.88,11.25)
+ ..(1.078,11.25)
+ ..controls(1.177,11.25)and(1.26,11.174)
+ ..(1.328,11.023)
+ ..controls(1.438,10.805)and(1.628,10.695)
+ ..(1.898,10.695)
+ ..controls(1.987,10.695)and(2.078,10.698)
+ ..(2.172,10.703)
+ ..controls(2.214,10.703)and(2.247,10.703)
+ ..(2.273,10.703)
+ ..controls(2.664,10.703)and(2.984,10.589)
+ ..(3.234,10.359)
+ ..controls(3.641,9.99)and(3.844,9.443)
+ ..(3.844,8.719)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((1.9u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(70, 5.039FX#,if true_size: 11.305FY#, 0.102FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((4.242,7.234)
+ ..controls(3.872,7.573)and(3.568,7.742)
+ ..(3.328,7.742)
+ ..controls(3.161,7.742)and(3.029,7.678)
+ ..(2.93,7.551)
+ ..controls(2.831,7.423)and(2.781,7.25)
+ ..(2.781,7.031)
+ ..controls(2.781,6.76)and(2.803,6.503)
+ ..(2.848,6.258)
+ ..controls(2.892,6.013)and(3.044,5.289)
+ ..(3.305,4.086)
+ ..controls(3.409,3.607)and(3.461,3.086)
+ ..(3.461,2.523)
+ ..controls(3.461,1.883)and(3.359,1.208)
+ ..(3.156,0.5)
+ ..controls(3.094,0.281)and(3.022,0.126)
+ ..(2.941,0.035)
+ ..controls(2.861,-0.056)and(2.758,-0.102)
+ ..(2.633,-0.102)
+ ..controls(2.388,-0.102)and(2.266,0.018)
+ ..(2.266,0.258)
+ ..controls(2.266,0.326)and(2.279,0.411)
+ ..(2.305,0.516)
+ ..controls(2.357,0.771)and(2.383,1.008)
+ ..(2.383,1.227)
+ ..controls(2.383,1.695)and(2.26,2.411)
+ ..(2.016,3.375)
+ ..controls(1.776,4.333)and(1.656,5.01)
+ ..(1.656,5.406)
+ ..controls(1.656,6.047)and(1.857,6.755)
+ ..(2.258,7.531)
+ ..controls(2.279,7.573)and(2.289,7.607)
+ ..(2.289,7.633)
+ ..controls(2.289,7.695)and(2.221,7.734)
+ ..(2.086,7.75)
+ ..controls(1.758,7.792)and(1.451,7.885)
+ ..(1.164,8.031)
+ ..controls(0.742,8.25)and(0.531,8.708)
+ ..(0.531,9.406)
+ ..controls(0.531,9.953)and(0.641,10.422)
+ ..(0.859,10.813)
+ ..controls(1.036,11.141)and(1.211,11.305)
+ ..(1.383,11.305)
+ ..controls(1.435,11.305)and(1.474,11.29)
+ ..(1.5,11.262)
+ ..controls(1.526,11.233)and(1.589,11.133)
+ ..(1.688,10.961)
+ ..controls(1.755,10.841)and(1.863,10.763)
+ ..(2.012,10.727)
+ ..controls(2.16,10.69)and(2.503,10.659)
+ ..(3.039,10.633)
+ ..controls(3.633,10.607)and(4.094,10.409)
+ ..(4.422,10.039)
+ ..controls(4.693,9.732)and(4.828,9.365)
+ ..(4.828,8.938)
+ ..controls(4.828,8.365)and(4.633,7.797)
+ ..(4.242,7.234)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((0.5u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(71, 10.734FX#,if true_size: 11.07FY#, 0.094FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((3.109,7.75)
+ ..controls(2.458,7.391)and(2.133,6.677)
+ ..(2.133,5.609)
+ ..controls(2.133,5.323)and(2.201,4.75)
+ ..(2.336,3.891)
+ ..controls(2.451,3.161)and(2.508,2.521)
+ ..(2.508,1.969)
+ ..controls(2.508,1.266)and(2.378,0.75)
+ ..(2.117,0.422)
+ ..controls(2.008,0.276)and(1.855,0.154)
+ ..(1.66,0.055)
+ ..controls(1.465,-0.044)and(1.286,-0.094)
+ ..(1.125,-0.094)
+ ..controls(0.974,-0.094)and(0.898,-0.036)
+ ..(0.898,0.078)
+ ..controls(0.898,0.167)and(0.932,0.284)
+ ..(1,0.43)
+ ..controls(1.073,0.586)and(1.139,0.906)
+ ..(1.199,1.391)
+ ..controls(1.259,1.875)and(1.289,2.339)
+ ..(1.289,2.781)
+ ..controls(1.289,2.958)and(1.271,3.409)
+ ..(1.234,4.133)
+ ..controls(1.219,4.424)and(1.211,4.695)
+ ..(1.211,4.945)
+ ..controls(1.211,5.57)and(1.276,6.073)
+ ..(1.406,6.453)
+ ..controls(1.536,6.833)and(1.786,7.255)
+ ..(2.156,7.719)
+ ..controls(1.75,7.74)and(1.431,7.913)
+ ..(1.199,8.238)
+ ..controls(0.967,8.564)and(0.852,9.003)
+ ..(0.852,9.555)
+ ..controls(0.852,10.091)and(0.995,10.497)
+ ..(1.281,10.773)
+ ..controls(1.495,10.971)and(1.701,11.07)
+ ..(1.898,11.07)
+ ..controls(1.966,11.07)and(2.008,11.055)
+ ..(2.023,11.023)
+ ..controls(2.039,10.992)and(2.057,10.898)
+ ..(2.078,10.742)
+ ..controls(2.094,10.596)and(2.299,10.521)
+ ..(2.695,10.516)
+ --(8.477,10.516)
+ ..controls(8.852,10.516)and(9.09,10.504)
+ ..(9.191,10.48)
+ ..controls(9.293,10.457)and(9.404,10.385)
+ ..(9.523,10.266)
+ ..controls(9.763,10.031)and(9.883,9.656)
+ ..(9.883,9.141)
+ ..controls(9.883,8.682)and(9.82,8.336)
+ ..(9.695,8.102)
+ ..controls(9.633,7.987)and(9.557,7.904)
+ ..(9.469,7.852)
+ ..controls(9.38,7.799)and(9.224,7.75)
+ ..(9,7.703)
+ ..controls(8.891,7.677)and(8.836,7.63)
+ ..(8.836,7.563)
+ ..controls(8.836,7.547)and(8.841,7.492)
+ ..(8.852,7.398)
+ --(9.328,2.633)
+ ..controls(9.38,2.096)and(9.406,1.698)
+ ..(9.406,1.438)
+ ..controls(9.406,0.995)and(9.346,0.664)
+ ..(9.227,0.445)
+ ..controls(9.138,0.289)and(9.014,0.16)
+ ..(8.855,0.059)
+ ..controls(8.697,-0.043)and(8.539,-0.094)
+ ..(8.383,-0.094)
+ ..controls(8.294,-0.094)and(8.237,-0.069)
+ ..(8.211,-0.02)
+ ..controls(8.185,0.03)and(8.172,0.138)
+ ..(8.172,0.305)
+ --(8.172,7.398)
+ --(8.172,7.578)
+ ..controls(8.172,7.667)and(8.161,7.716)
+ ..(8.141,7.727)
+ ..controls(8.12,7.737)and(7.992,7.745)
+ ..(7.758,7.75)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((5.9u,0.475h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(72, 10.898FX#,if true_size: 11.313FY#, 0FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((8.93,0)
+ --(1.203,0)
+ ..controls(1.208,0.224)and(1.211,0.385)
+ ..(1.211,0.484)
+ ..controls(1.211,0.854)and(1.156,1.734)
+ ..(1.047,3.125)
+ ..controls(1.005,3.677)and(0.984,4.128)
+ ..(0.984,4.477)
+ ..controls(0.984,5.555)and(1.315,6.557)
+ ..(1.977,7.484)
+ ..controls(2.013,7.542)and(2.031,7.583)
+ ..(2.031,7.609)
+ ..controls(2.031,7.646)and(1.88,7.799)
+ ..(1.578,8.07)
+ ..controls(1.271,8.341)and(1.117,8.661)
+ ..(1.117,9.031)
+ ..controls(1.117,9.891)and(1.552,10.651)
+ ..(2.422,11.313)
+ ..controls(2.464,11.026)and(2.533,10.837)
+ ..(2.629,10.746)
+ ..controls(2.725,10.655)and(3.049,10.477)
+ ..(3.602,10.211)
+ ..controls(4.237,9.904)and(4.555,9.451)
+ ..(4.555,8.852)
+ ..controls(4.555,8.284)and(4.273,7.586)
+ ..(3.711,6.758)
+ ..controls(3.247,7.107)and(2.94,7.281)
+ ..(2.789,7.281)
+ ..controls(2.628,7.281)and(2.449,7.055)
+ ..(2.254,6.602)
+ ..controls(2.059,6.148)and(1.961,5.727)
+ ..(1.961,5.336)
+ ..controls(1.961,4.914)and(2.007,4.447)
+ ..(2.098,3.934)
+ ..controls(2.189,3.421)and(2.297,3.029)
+ ..(2.422,2.758)
+ --(8.93,2.758)
+ ..controls(9.117,3.409)and(9.211,4.13)
+ ..(9.211,4.922)
+ ..controls(9.211,5.729)and(9.016,6.385)
+ ..(8.625,6.891)
+ ..controls(8.182,7.458)and(7.693,7.742)
+ ..(7.156,7.742)
+ ..controls(6.911,7.742)and(6.667,7.663)
+ ..(6.422,7.504)
+ ..controls(6.177,7.345)and(5.974,7.133)
+ ..(5.813,6.867)
+ ..controls(5.578,6.477)and(5.461,5.958)
+ ..(5.461,5.313)
+ ..controls(5.461,5.167)and(5.469,4.99)
+ ..(5.484,4.781)
+ --(4.719,4.781)
+ ..controls(4.714,4.885)and(4.711,4.964)
+ ..(4.711,5.016)
+ ..controls(4.711,5.646)and(4.896,6.432)
+ ..(5.266,7.375)
+ ..controls(5.563,8.135)and(5.711,8.997)
+ ..(5.711,9.961)
+ ..controls(5.711,10.242)and(5.674,10.536)
+ ..(5.602,10.844)
+ ..controls(5.872,10.87)and(6.068,10.883)
+ ..(6.188,10.883)
+ ..controls(7.12,10.883)and(7.898,10.591)
+ ..(8.523,10.008)
+ ..controls(8.956,9.602)and(9.299,8.97)
+ ..(9.555,8.113)
+ ..controls(9.81,7.257)and(9.938,6.302)
+ ..(9.938,5.25)
+ ..controls(9.938,4.635)and(9.874,3.993)
+ ..(9.746,3.324)
+ ..controls(9.618,2.655)and(9.346,1.547)
+ ..(8.93,0)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((8.2u,0.475h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(73, 5.109FX#,if true_size: 11.273FY#, -5.117FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((2.672,10.703)
+ ..controls(3.224,10.703)and(3.629,10.497)
+ ..(3.887,10.086)
+ ..controls(4.145,9.674)and(4.273,9.026)
+ ..(4.273,8.141)
+ ..controls(4.273,7.411)and(4.138,6.555)
+ ..(3.867,5.57)
+ ..controls(3.784,5.268)and(3.651,5.117)
+ ..(3.469,5.117)
+ ..controls(3.198,5.117)and(3.063,5.19)
+ ..(3.063,5.336)
+ ..controls(3.063,5.398)and(3.099,5.516)
+ ..(3.172,5.688)
+ ..controls(3.354,6.109)and(3.445,6.539)
+ ..(3.445,6.977)
+ ..controls(3.445,7.628)and(2.919,7.935)
+ ..(1.867,7.898)
+ ..controls(0.763,7.852)and(0.211,8.331)
+ ..(0.211,9.336)
+ ..controls(0.211,9.909)and(0.331,10.409)
+ ..(0.57,10.836)
+ ..controls(0.638,10.956)and(0.724,11.059)
+ ..(0.828,11.145)
+ ..controls(0.932,11.23)and(1.023,11.273)
+ ..(1.102,11.273)
+ ..controls(1.143,11.273)and(1.172,11.259)
+ ..(1.188,11.23)
+ ..controls(1.203,11.202)and(1.232,11.112)
+ ..(1.273,10.961)
+ ..controls(1.305,10.846)and(1.365,10.77)
+ ..(1.453,10.73)
+ ..controls(1.542,10.691)and(1.701,10.672)
+ ..(1.93,10.672)
+ ..controls(2.003,10.672)and(2.083,10.674)
+ ..(2.172,10.68)
+ ..controls(2.453,10.695)and(2.62,10.703)
+ ..(2.672,10.703)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((2u,0.55h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(74, 9.922FX#,if true_size: 11.203FY#, 3.813FY#
+ else: cap_height#,desc_depth# fi);
+ "Hebrew letter" & tmp_string;
+ fill((1.828,10.664)
+ --(7.492,10.664)
+ --(7.742,10.672)
+ --(7.914,10.672)
+ ..controls(8.268,10.672)and(8.549,10.556)
+ ..(8.758,10.324)
+ ..controls(8.966,10.092)and(9.07,9.779)
+ ..(9.07,9.383)
+ ..controls(9.07,9.003)and(9.003,8.664)
+ ..(8.867,8.367)
+ ..controls(8.779,8.174)and(8.586,8.003)
+ ..(8.289,7.852)
+ ..controls(8.154,7.789)and(8.065,7.727)
+ ..(8.023,7.664)
+ ..controls(7.982,7.602)and(7.961,7.505)
+ ..(7.961,7.375)
+ ..controls(7.961,7.276)and(7.964,7.182)
+ ..(7.969,7.094)
+ --(8.492,-0.898)
+ ..controls(8.503,-1.06)and(8.508,-1.201)
+ ..(8.508,-1.32)
+ ..controls(8.508,-1.924)and(8.453,-2.409)
+ ..(8.344,-2.773)
+ ..controls(8.245,-3.102)and(8.092,-3.357)
+ ..(7.887,-3.539)
+ ..controls(7.681,-3.721)and(7.443,-3.813)
+ ..(7.172,-3.813)
+ ..controls(6.958,-3.813)and(6.857,-3.724)
+ ..(6.867,-3.547)
+ --(6.883,-3.281)
+ --(7.344,7.234)
+ ..controls(7.349,7.38)and(7.352,7.461)
+ ..(7.352,7.477)
+ ..controls(7.352,7.612)and(7.298,7.702)
+ ..(7.191,7.746)
+ ..controls(7.085,7.79)and(6.87,7.813)
+ ..(6.547,7.813)
+ --(1.828,7.813)
+ ..controls(1.135,7.813)and(0.664,7.958)
+ ..(0.414,8.25)
+ ..controls(0.138,8.578)and(0,9.026)
+ ..(0,9.594)
+ ..controls(0,10.115)and(0.125,10.516)
+ ..(0.375,10.797)
+ ..controls(0.609,11.068)and(0.839,11.203)
+ ..(1.063,11.203)
+ ..controls(1.135,11.203)and(1.214,11.109)
+ ..(1.297,10.922)
+ ..controls(1.344,10.813)and(1.4,10.742)
+ ..(1.465,10.711)
+ ..controls(1.53,10.68)and(1.651,10.664)
+ ..(1.828,10.664)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((5.2u,0.475h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(75, 10.438FX#,if true_size: 11.305FY#, 0FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((8.313,0)
+ --(0.211,0)
+ ..controls(0.268,0.224)and(0.432,0.708)
+ ..(0.703,1.453)
+ ..controls(0.76,1.583)and(0.904,2.055)
+ ..(1.133,2.867)
+ --(8.086,2.867)
+ ..controls(8.336,2.867)and(8.495,2.895)
+ ..(8.563,2.949)
+ ..controls(8.63,3.004)and(8.664,3.135)
+ ..(8.664,3.344)
+ ..controls(8.664,4.786)and(8.492,5.859)
+ ..(8.148,6.563)
+ ..controls(7.945,6.984)and(7.63,7.303)
+ ..(7.203,7.52)
+ ..controls(6.776,7.736)and(6.25,7.844)
+ ..(5.625,7.844)
+ --(2.531,7.844)
+ ..controls(1.938,7.844)and(1.536,7.982)
+ ..(1.328,8.258)
+ ..controls(1.094,8.56)and(0.977,8.99)
+ ..(0.977,9.547)
+ ..controls(0.977,10.042)and(1.076,10.484)
+ ..(1.273,10.875)
+ ..controls(1.419,11.161)and(1.57,11.305)
+ ..(1.727,11.305)
+ ..controls(1.81,11.305)and(1.93,11.177)
+ ..(2.086,10.922)
+ ..controls(2.18,10.76)and(2.461,10.674)
+ ..(2.93,10.664)
+ --(5.484,10.664)
+ ..controls(5.974,10.664)and(6.324,10.647)
+ ..(6.535,10.613)
+ ..controls(6.746,10.579)and(6.984,10.5)
+ ..(7.25,10.375)
+ ..controls(7.88,10.083)and(8.372,9.589)
+ ..(8.727,8.891)
+ ..controls(8.945,8.464)and(9.102,7.901)
+ ..(9.195,7.203)
+ ..controls(9.289,6.505)and(9.336,5.565)
+ ..(9.336,4.383)
+ --(9.328,2.836)
+ ..controls(9.328,2.794)and(9.333,2.643)
+ ..(9.344,2.383)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((5.5u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(76, 9.586FX#,if true_size: 15.555FY#, 0.133FY#
+ else: 1.4cap_height#,0 fi);
+"Hebrew letter" & tmp_string;
+fill((2.539,10.664)
+ --(7.047,10.664)
+ ..controls(7.38,10.664)and(7.647,10.62)
+ ..(7.848,10.531)
+ ..controls(8.048,10.443)and(8.221,10.292)
+ ..(8.367,10.078)
+ ..controls(8.497,9.891)and(8.578,9.72)
+ ..(8.609,9.566)
+ ..controls(8.641,9.413)and(8.677,9.021)
+ ..(8.719,8.391)
+ --(8.891,6.172)
+ ..controls(8.896,6.099)and(8.898,6.018)
+ ..(8.898,5.93)
+ ..controls(8.898,5.305)and(8.714,4.74)
+ ..(8.344,4.234)
+ ..controls(8.109,3.906)and(7.497,3.354)
+ ..(6.508,2.578)
+ ..controls(5.628,1.87)and(5.018,1.219)
+ ..(4.68,0.625)
+ ..controls(4.508,0.328)and(4.357,0.128)
+ ..(4.227,0.023)
+ ..controls(4.096,-0.081)and(3.93,-0.133)
+ ..(3.727,-0.133)
+ ..controls(3.206,-0.133)and(2.945,0.141)
+ ..(2.945,0.688)
+ ..controls(2.945,1.068)and(3.112,1.445)
+ ..(3.445,1.82)
+ ..controls(3.721,2.128)and(4.133,2.43)
+ ..(4.68,2.727)
+ ..controls(4.768,2.773)and(5.443,3.102)
+ ..(6.703,3.711)
+ ..controls(7.594,4.143)and(8.039,4.813)
+ ..(8.039,5.719)
+ ..controls(8.039,6.229)and(7.909,6.701)
+ ..(7.648,7.133)
+ ..controls(7.487,7.404)and(7.283,7.598)
+ ..(7.035,7.715)
+ ..controls(6.788,7.832)and(6.456,7.891)
+ ..(6.039,7.891)
+ --(1.477,7.891)
+ ..controls(1.159,7.891)and(0.945,7.902)
+ ..(0.836,7.926)
+ ..controls(0.727,7.949)and(0.625,8.008)
+ ..(0.531,8.102)
+ ..controls(0.318,8.305)and(0.211,8.695)
+ ..(0.211,9.273)
+ ..controls(0.211,10.336)and(0.411,11.346)
+ ..(0.813,12.305)
+ ..controls(0.932,12.586)and(1.159,12.982)
+ ..(1.492,13.492)
+ ..controls(1.555,13.586)and(1.586,13.672)
+ ..(1.586,13.75)
+ ..controls(1.586,13.823)and(1.497,13.992)
+ ..(1.32,14.258)
+ ..controls(1.201,14.44)and(1.141,14.617)
+ ..(1.141,14.789)
+ ..controls(1.141,14.992)and(1.201,15.171)
+ ..(1.32,15.324)
+ ..controls(1.44,15.478)and(1.581,15.555)
+ ..(1.742,15.555)
+ ..controls(1.924,15.555)and(2.13,15.438)
+ ..(2.359,15.203)
+ ..controls(2.589,14.969)and(2.703,14.758)
+ ..(2.703,14.57)
+ ..controls(2.703,14.398)and(2.665,14.242)
+ ..(2.59,14.102)
+ ..controls(2.514,13.961)and(2.276,13.607)
+ ..(1.875,13.039)
+ ..controls(1.667,12.742)and(1.563,12.339)
+ ..(1.563,11.828)
+ ..controls(1.563,11.229)and(1.708,10.865)
+ ..(2,10.734)
+ ..controls(2.109,10.688)and(2.289,10.664)
+ ..(2.539,10.664)
+ --cycle) xscaled FX yscaled FY;
+if dagesh: adjust_dot0((5.25u,0.5cap_height),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(77, 11.016FX#,if true_size: 11.297FY#, 0FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((9.734,0)
+ --(1.281,0)
+ --(1.281,5.336)
+ ..controls(1.281,5.612)and(1.302,5.883)
+ ..(1.344,6.148)
+ ..controls(1.385,6.414)and(1.438,6.607)
+ ..(1.5,6.727)
+ ..controls(1.557,6.841)and(1.689,7.012)
+ ..(1.895,7.238)
+ ..controls(2.1,7.465)and(2.271,7.628)
+ ..(2.406,7.727)
+ ..controls(2.453,7.758)and(2.477,7.781)
+ ..(2.477,7.797)
+ ..controls(2.477,7.813)and(2.445,7.836)
+ ..(2.383,7.867)
+ ..controls(2.018,8.034)and(1.754,8.242)
+ ..(1.59,8.492)
+ ..controls(1.426,8.742)and(1.344,9.057)
+ ..(1.344,9.438)
+ ..controls(1.344,9.964)and(1.487,10.417)
+ ..(1.773,10.797)
+ ..controls(1.872,10.927)and(1.986,11.043)
+ ..(2.113,11.145)
+ ..controls(2.241,11.246)and(2.341,11.297)
+ ..(2.414,11.297)
+ ..controls(2.466,11.297)and(2.503,11.279)
+ ..(2.523,11.242)
+ ..controls(2.544,11.206)and(2.576,11.109)
+ ..(2.617,10.953)
+ ..controls(2.648,10.833)and(2.701,10.755)
+ ..(2.773,10.719)
+ ..controls(2.846,10.682)and(2.987,10.664)
+ ..(3.195,10.664)
+ --(7.648,10.664)
+ ..controls(8.013,10.664)and(8.31,10.613)
+ ..(8.539,10.512)
+ ..controls(8.768,10.41)and(8.974,10.237)
+ ..(9.156,9.992)
+ ..controls(9.563,9.404)and(9.755,8.583)
+ ..(9.734,7.531)
+ --cycle) xscaled FX yscaled FY;
+ fill((3.242,7.875)
+ ..controls(2.898,7.531)and(2.668,7.217)
+ ..(2.551,6.934)
+ ..controls(2.434,6.65)and(2.375,6.273)
+ ..(2.375,5.805)
+ --(2.375,3.172)
+ ..controls(2.375,3.047)and(2.398,2.965)
+ ..(2.445,2.926)
+ ..controls(2.492,2.887)and(2.594,2.867)
+ ..(2.75,2.867)
+ --(8.711,2.867)
+ ..controls(8.883,2.867)and(8.986,2.875)
+ ..(9.02,2.891)
+ ..controls(9.053,2.906)and(9.07,2.951)
+ ..(9.07,3.023)
+ --(9.07,6.297)
+ ..controls(9.07,6.896)and(8.96,7.309)
+ ..(8.738,7.535)
+ ..controls(8.517,7.762)and(8.115,7.875)
+ ..(7.531,7.875)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((6.35u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(78, 10.672FX#,if true_size: 11.32FY#, 0.188FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((8.93,0)
+ --(3.445,0)
+ ..controls(3.753,0.708)and(3.906,1.359)
+ ..(3.906,1.953)
+ ..controls(3.906,2.141)and(3.891,2.404)
+ ..(3.859,2.742)
+ --(8.5,2.742)
+ ..controls(8.76,2.742)and(8.904,2.755)
+ ..(8.93,2.781)
+ ..controls(8.987,2.828)and(9.016,3.026)
+ ..(9.016,3.375)
+ ..controls(9.016,4.266)and(8.906,5.065)
+ ..(8.688,5.773)
+ ..controls(8.474,6.456)and(8.06,6.992)
+ ..(7.445,7.383)
+ ..controls(6.914,7.716)and(6.305,7.883)
+ ..(5.617,7.883)
+ ..controls(4.513,7.883)and(3.633,7.477)
+ ..(2.977,6.664)
+ ..controls(2.732,6.357)and(2.54,6.013)
+ ..(2.402,5.633)
+ ..controls(2.264,5.253)and(2.195,4.872)
+ ..(2.195,4.492)
+ --(2.266,2.469)
+ ..controls(2.266,1.797)and(2.23,1.309)
+ ..(2.16,1.004)
+ ..controls(2.09,0.699)and(1.953,0.438)
+ ..(1.75,0.219)
+ ..controls(1.505,-0.052)and(1.263,-0.188)
+ ..(1.023,-0.188)
+ ..controls(0.872,-0.188)and(0.797,-0.122)
+ ..(0.797,0.008)
+ ..controls(0.797,0.055)and(0.813,0.122)
+ ..(0.844,0.211)
+ ..controls(0.995,0.695)and(1.076,1.635)
+ ..(1.086,3.031)
+ ..controls(1.102,4.063)and(1.174,4.779)
+ ..(1.305,5.18)
+ ..controls(1.398,5.445)and(1.586,5.793)
+ ..(1.867,6.223)
+ ..controls(2.148,6.652)and(2.427,7.013)
+ ..(2.703,7.305)
+ ..controls(2.745,7.352)and(2.766,7.385)
+ ..(2.766,7.406)
+ ..controls(2.766,7.453)and(2.552,7.549)
+ ..(2.125,7.695)
+ ..controls(1.75,7.831)and(1.43,8.115)
+ ..(1.164,8.547)
+ ..controls(1.018,8.786)and(0.945,9.07)
+ ..(0.945,9.398)
+ ..controls(0.945,9.794)and(1.02,10.112)
+ ..(1.168,10.352)
+ ..controls(1.316,10.591)and(1.638,10.914)
+ ..(2.133,11.32)
+ ..controls(2.201,11.112)and(2.303,10.943)
+ ..(2.441,10.813)
+ ..controls(2.579,10.682)and(2.797,10.557)
+ ..(3.094,10.438)
+ ..controls(3.531,10.255)and(3.819,10.083)
+ ..(3.957,9.922)
+ ..controls(4.095,9.76)and(4.164,9.516)
+ ..(4.164,9.188)
+ ..controls(4.164,9.021)and(4.12,8.745)
+ ..(4.031,8.359)
+ ..controls(4.026,8.339)and(4.023,8.318)
+ ..(4.023,8.297)
+ ..controls(4.023,8.25)and(4.052,8.227)
+ ..(4.109,8.227)
+ ..controls(4.214,8.227)and(4.344,8.271)
+ ..(4.5,8.359)
+ ..controls(4.786,8.521)and(4.986,8.715)
+ ..(5.098,8.941)
+ ..controls(5.21,9.168)and(5.266,9.495)
+ ..(5.266,9.922)
+ ..controls(5.266,10.26)and(5.219,10.602)
+ ..(5.125,10.945)
+ ..controls(5.443,10.992)and(5.667,11.016)
+ ..(5.797,11.016)
+ ..controls(6.63,11.016)and(7.378,10.719)
+ ..(8.039,10.125)
+ ..controls(8.878,9.375)and(9.388,8.255)
+ ..(9.57,6.766)
+ ..controls(9.648,6.125)and(9.688,5.318)
+ ..(9.688,4.344)
+ ..controls(9.688,2.786)and(9.435,1.339)
+ ..(8.93,0)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((6.25u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(79, 5.414FX#,if true_size: 11.344FY#, 3.641FY#
+ else: cap_height#,desc_depth# fi);
+ "Hebrew letter" & tmp_string;
+ fill((2.664,-2.508)
+ --(2.664,0.836)
+ --(2.656,1.578)
+ --(2.648,2.906)
+ --(2.633,4.18)
+ ..controls(2.633,5.326)and(2.805,6.271)
+ ..(3.148,7.016)
+ ..controls(3.258,7.255)and(3.313,7.409)
+ ..(3.313,7.477)
+ ..controls(3.313,7.565)and(3.271,7.63)
+ ..(3.188,7.672)
+ ..controls(3.104,7.719)and(2.661,7.807)
+ ..(1.859,7.938)
+ ..controls(0.766,8.115)and(0.219,8.62)
+ ..(0.219,9.453)
+ ..controls(0.219,9.974)and(0.372,10.44)
+ ..(0.68,10.852)
+ ..controls(0.924,11.18)and(1.135,11.344)
+ ..(1.313,11.344)
+ ..controls(1.385,11.344)and(1.43,11.331)
+ ..(1.445,11.305)
+ ..controls(1.461,11.279)and(1.479,11.193)
+ ..(1.5,11.047)
+ ..controls(1.563,10.828)and(1.859,10.672)
+ ..(2.391,10.578)
+ ..controls(2.87,10.49)and(3.219,10.41)
+ ..(3.438,10.34)
+ ..controls(3.656,10.27)and(3.833,10.177)
+ ..(3.969,10.063)
+ ..controls(4.281,9.813)and(4.438,9.435)
+ ..(4.438,8.93)
+ ..controls(4.438,8.503)and(4.294,7.997)
+ ..(4.008,7.414)
+ ..controls(3.732,6.857)and(3.563,6.473)
+ ..(3.5,6.262)
+ ..controls(3.438,6.051)and(3.406,5.768)
+ ..(3.406,5.414)
+ ..controls(3.406,4.945)and(3.508,4.021)
+ ..(3.711,2.641)
+ ..controls(3.982,0.828)and(4.117,-0.49)
+ ..(4.117,-1.313)
+ ..controls(4.117,-1.917)and(4.004,-2.456)
+ ..(3.777,-2.93)
+ ..controls(3.551,-3.404)and(3.292,-3.641)
+ ..(3,-3.641)
+ ..controls(2.766,-3.641)and(2.648,-3.461)
+ ..(2.648,-3.102)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((1.4u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(80, 6.008FX#,if true_size: 11.367FY#, 0FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((4.359,0)
+ --(0.227,0)
+ ..controls(0.216,0.151)and(0.211,0.263)
+ ..(0.211,0.336)
+ ..controls(0.211,0.758)and(0.404,1.625)
+ ..(0.789,2.938)
+ --(3.5,2.938)
+ ..controls(3.495,3.052)and(3.492,3.146)
+ ..(3.492,3.219)
+ ..controls(3.492,3.802)and(3.612,5.016)
+ ..(3.852,6.859)
+ ..controls(3.867,6.979)and(3.875,7.089)
+ ..(3.875,7.188)
+ ..controls(3.875,7.38)and(3.823,7.536)
+ ..(3.719,7.656)
+ ..controls(3.615,7.776)and(3.477,7.836)
+ ..(3.305,7.836)
+ ..controls(3.211,7.836)and(3.068,7.826)
+ ..(2.875,7.805)
+ ..controls(2.75,7.789)and(2.628,7.781)
+ ..(2.508,7.781)
+ ..controls(1.987,7.781)and(1.599,7.94)
+ ..(1.344,8.258)
+ ..controls(1.109,8.555)and(0.992,8.935)
+ ..(0.992,9.398)
+ ..controls(0.992,9.935)and(1.115,10.422)
+ ..(1.359,10.859)
+ ..controls(1.547,11.198)and(1.763,11.367)
+ ..(2.008,11.367)
+ ..controls(2.143,11.367)and(2.219,11.279)
+ ..(2.234,11.102)
+ ..controls(2.25,10.898)and(2.29,10.781)
+ ..(2.355,10.75)
+ ..controls(2.421,10.719)and(2.68,10.69)
+ ..(3.133,10.664)
+ ..controls(4.143,10.607)and(4.648,10.049)
+ ..(4.648,8.992)
+ ..controls(4.648,8.768)and(4.628,8.44)
+ ..(4.586,8.008)
+ ..controls(4.529,7.456)and(4.5,7.042)
+ ..(4.5,6.766)
+ ..controls(4.5,6.427)and(4.531,5.906)
+ ..(4.594,5.203)
+ ..controls(4.714,3.932)and(4.773,3.112)
+ ..(4.773,2.742)
+ ..controls(4.773,1.674)and(4.635,0.76)
+ ..(4.359,0)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((2.5u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(81, 9.891FX#,if true_size: 11.227FY#, 0.227FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((1.891,7.758)
+ ..controls(1.49,7.867)and(1.214,8.036)
+ ..(1.063,8.266)
+ ..controls(0.88,8.542)and(0.789,8.878)
+ ..(0.789,9.273)
+ ..controls(0.789,9.831)and(0.982,10.336)
+ ..(1.367,10.789)
+ ..controls(1.612,11.081)and(1.831,11.227)
+ ..(2.023,11.227)
+ ..controls(2.159,11.227)and(2.234,11.133)
+ ..(2.25,10.945)
+ ..controls(2.26,10.826)and(2.29,10.749)
+ ..(2.34,10.715)
+ ..controls(2.389,10.681)and(2.5,10.664)
+ ..(2.672,10.664)
+ --(6.133,10.664)
+ ..controls(6.44,10.664)and(6.664,10.642)
+ ..(6.805,10.598)
+ ..controls(6.945,10.553)and(7.12,10.451)
+ ..(7.328,10.289)
+ ..controls(7.891,9.857)and(8.336,9.203)
+ ..(8.664,8.328)
+ ..controls(8.992,7.453)and(9.156,6.479)
+ ..(9.156,5.406)
+ ..controls(9.156,4.052)and(8.917,2.88)
+ ..(8.438,1.891)
+ ..controls(8.068,1.125)and(7.624,0.581)
+ ..(7.105,0.258)
+ ..controls(6.587,-0.065)and(5.896,-0.227)
+ ..(5.031,-0.227)
+ ..controls(4.604,-0.227)and(4.173,-0.19)
+ ..(3.738,-0.117)
+ ..controls(3.303,-0.044)and(2.974,0.047)
+ ..(2.75,0.156)
+ ..controls(2.198,0.422)and(1.74,0.935)
+ ..(1.375,1.695)
+ ..controls(0.958,2.565)and(0.75,3.51)
+ ..(0.75,4.531)
+ ..controls(0.75,5.224)and(0.836,5.813)
+ ..(1.008,6.297)
+ ..controls(1.18,6.781)and(1.474,7.268)
+ ..(1.891,7.758)
+ --cycle) xscaled FX yscaled FY;
+ fill((6.398,7.758)
+ --(3.633,7.758)
+ ..controls(3.055,7.758)and(2.552,7.484)
+ ..(2.125,6.938)
+ ..controls(1.927,6.682)and(1.768,6.387)
+ ..(1.648,6.051)
+ ..controls(1.529,5.715)and(1.469,5.396)
+ ..(1.469,5.094)
+ ..controls(1.469,4.333)and(1.763,3.716)
+ ..(2.352,3.242)
+ ..controls(2.628,3.023)and(2.945,2.871)
+ ..(3.305,2.785)
+ ..controls(3.664,2.699)and(4.167,2.656)
+ ..(4.813,2.656)
+ ..controls(5.5,2.656)and(6.043,2.693)
+ ..(6.441,2.766)
+ ..controls(6.84,2.839)and(7.177,2.961)
+ ..(7.453,3.133)
+ ..controls(7.781,3.346)and(8.039,3.65)
+ ..(8.227,4.043)
+ ..controls(8.414,4.436)and(8.508,4.88)
+ ..(8.508,5.375)
+ ..controls(8.508,6.302)and(8.198,6.99)
+ ..(7.578,7.438)
+ ..controls(7.406,7.563)and(7.238,7.647)
+ ..(7.074,7.691)
+ ..controls(6.91,7.736)and(6.685,7.758)
+ ..(6.398,7.758)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((5.55u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(82, 9.602FX#,if true_size: 11.297FY#, 0.305FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((0.68,2.828)
+ --(2.336,2.977)
+ ..controls(2.737,3.008)and(2.98,3.039)
+ ..(3.066,3.07)
+ ..controls(3.152,3.102)and(3.195,3.172)
+ ..(3.195,3.281)
+ ..controls(3.195,3.453)and(3.138,3.719)
+ ..(3.023,4.078)
+ ..controls(2.945,4.313)and(2.878,4.493)
+ ..(2.82,4.621)
+ ..controls(2.763,4.749)and(2.599,5.078)
+ ..(2.328,5.609)
+ ..controls(2.198,5.87)and(2.133,6.154)
+ ..(2.133,6.461)
+ ..controls(2.133,6.68)and(2.211,7.034)
+ ..(2.367,7.523)
+ ..controls(2.393,7.602)and(2.406,7.669)
+ ..(2.406,7.727)
+ ..controls(2.406,7.815)and(2.378,7.88)
+ ..(2.32,7.922)
+ ..controls(2.263,7.964)and(2.117,8.034)
+ ..(1.883,8.133)
+ ..controls(1.674,8.211)and(1.509,8.365)
+ ..(1.387,8.594)
+ ..controls(1.264,8.823)and(1.203,9.083)
+ ..(1.203,9.375)
+ ..controls(1.203,9.76)and(1.318,10.198)
+ ..(1.547,10.688)
+ ..controls(1.729,11.094)and(1.906,11.297)
+ ..(2.078,11.297)
+ ..controls(2.125,11.297)and(2.216,11.219)
+ ..(2.352,11.063)
+ ..controls(2.456,10.932)and(2.771,10.794)
+ ..(3.297,10.648)
+ ..controls(3.833,10.503)and(4.197,10.324)
+ ..(4.387,10.113)
+ ..controls(4.577,9.902)and(4.672,9.565)
+ ..(4.672,9.102)
+ ..controls(4.672,8.732)and(4.599,8.365)
+ ..(4.453,8)
+ ..controls(4.391,7.833)and(4.352,7.729)
+ ..(4.336,7.688)
+ ..controls(4.284,7.542)and(4.208,7.469)
+ ..(4.109,7.469)
+ ..controls(4.031,7.469)and(3.833,7.526)
+ ..(3.516,7.641)
+ ..controls(3.406,7.677)and(3.31,7.695)
+ ..(3.227,7.695)
+ ..controls(3.122,7.695)and(3.033,7.667)
+ ..(2.957,7.609)
+ ..controls(2.882,7.552)and(2.844,7.482)
+ ..(2.844,7.398)
+ ..controls(2.844,7.185)and(3.141,6.422)
+ ..(3.734,5.109)
+ ..controls(3.849,4.854)and(3.904,4.693)
+ ..(3.898,4.625)
+ --(3.836,3.359)
+ ..controls(3.836,3.313)and(3.867,3.268)
+ ..(3.93,3.227)
+ ..controls(3.992,3.185)and(4.065,3.164)
+ ..(4.148,3.164)
+ ..controls(4.367,3.164)and(4.699,3.202)
+ ..(5.145,3.277)
+ ..controls(5.59,3.353)and(5.88,3.422)
+ ..(6.016,3.484)
+ ..controls(6.432,3.677)and(6.81,4.281)
+ ..(7.148,5.297)
+ ..controls(7.398,6.047)and(7.604,6.503)
+ ..(7.766,6.664)
+ ..controls(7.833,6.753)and(7.867,6.82)
+ ..(7.867,6.867)
+ ..controls(7.867,7.018)and(7.583,7.19)
+ ..(7.016,7.383)
+ ..controls(6.578,7.529)and(6.24,7.74)
+ ..(6,8.016)
+ ..controls(5.76,8.292)and(5.641,8.607)
+ ..(5.641,8.961)
+ ..controls(5.641,9.513)and(5.849,10.057)
+ ..(6.266,10.594)
+ ..controls(6.557,10.964)and(6.768,11.148)
+ ..(6.898,11.148)
+ ..controls(6.987,11.148)and(7.096,11.031)
+ ..(7.227,10.797)
+ ..controls(7.284,10.698)and(7.355,10.626)
+ ..(7.441,10.582)
+ ..controls(7.527,10.538)and(7.721,10.469)
+ ..(8.023,10.375)
+ ..controls(8.419,10.26)and(8.728,10.082)
+ ..(8.949,9.84)
+ ..controls(9.171,9.598)and(9.281,9.32)
+ ..(9.281,9.008)
+ ..controls(9.281,8.711)and(9.236,8.435)
+ ..(9.145,8.18)
+ ..controls(9.053,7.924)and(8.823,7.419)
+ ..(8.453,6.664)
+ ..controls(8.063,5.893)and(7.745,4.505)
+ ..(7.5,2.5)
+ ..controls(7.391,1.609)and(7.142,1.023)
+ ..(6.754,0.742)
+ ..controls(6.366,0.461)and(5.568,0.292)
+ ..(4.359,0.234)
+ ..controls(3.745,0.208)and(3.012,0.141)
+ ..(2.16,0.031)
+ ..controls(1.309,-0.078)and(0.625,-0.19)
+ ..(0.109,-0.305)
+ ..controls(0.365,0.711)and(0.555,1.755)
+ ..(0.68,2.828)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((6u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(83, 10.195FX#,if true_size: 11.227FY#, 3.805FY#
+ else: cap_height#,desc_depth# fi);
+ "Hebrew letter" & tmp_string;
+ fill((1.641,7.773)
+ ..controls(1.224,8.008)and(0.935,8.25)
+ ..(0.773,8.5)
+ ..controls(0.612,8.75)and(0.531,9.078)
+ ..(0.531,9.484)
+ ..controls(0.531,9.917)and(0.609,10.315)
+ ..(0.766,10.68)
+ ..controls(0.922,11.044)and(1.091,11.227)
+ ..(1.273,11.227)
+ ..controls(1.32,11.227)and(1.355,11.214)
+ ..(1.379,11.188)
+ ..controls(1.402,11.161)and(1.461,11.068)
+ ..(1.555,10.906)
+ ..controls(1.669,10.74)and(1.872,10.659)
+ ..(2.164,10.664)
+ --(7.039,10.664)
+ ..controls(7.82,10.706)and(8.305,10.229)
+ ..(8.492,9.234)
+ ..controls(8.674,8.177)and(8.792,5.375)
+ ..(8.844,0.828)
+ --(8.922,-1.703)
+ ..controls(8.922,-2.344)and(8.833,-2.828)
+ ..(8.656,-3.156)
+ ..controls(8.427,-3.589)and(8.151,-3.805)
+ ..(7.828,-3.805)
+ ..controls(7.682,-3.805)and(7.563,-3.727)
+ ..(7.469,-3.57)
+ ..controls(7.375,-3.414)and(7.328,-3.216)
+ ..(7.328,-2.977)
+ ..controls(7.328,-2.919)and(7.344,-2.727)
+ ..(7.375,-2.398)
+ --(7.984,6.617)
+ ..controls(8,6.883)and(8.008,7.055)
+ ..(8.008,7.133)
+ ..controls(8.008,7.398)and(7.951,7.572)
+ ..(7.836,7.652)
+ ..controls(7.721,7.733)and(7.469,7.773)
+ ..(7.078,7.773)
+ --(3.75,7.773)
+ ..controls(3.13,7.773)and(2.711,7.734)
+ ..(2.492,7.656)
+ ..controls(2.19,7.547)and(2.039,7.339)
+ ..(2.039,7.031)
+ ..controls(2.039,6.833)and(2.109,6.701)
+ ..(2.25,6.633)
+ ..controls(2.391,6.565)and(2.669,6.531)
+ ..(3.086,6.531)
+ ..controls(3.154,6.531)and(3.232,6.534)
+ ..(3.32,6.539)
+ ..controls(3.56,6.544)and(3.742,6.547)
+ ..(3.867,6.547)
+ ..controls(4.279,6.547)and(4.557,6.393)
+ ..(4.703,6.086)
+ ..controls(4.807,5.867)and(4.859,5.633)
+ ..(4.859,5.383)
+ ..controls(4.859,5.112)and(4.798,4.866)
+ ..(4.676,4.645)
+ ..controls(4.553,4.423)and(4.393,4.268)
+ ..(4.195,4.18)
+ ..controls(3.961,4.081)and(3.589,4.031)
+ ..(3.078,4.031)
+ ..controls(2.964,4.031)and(2.852,4.034)
+ ..(2.742,4.039)
+ ..controls(2.404,4.055)and(2.198,4.063)
+ ..(2.125,4.063)
+ ..controls(1.901,4.063)and(1.732,4.035)
+ ..(1.617,3.98)
+ ..controls(1.503,3.926)and(1.352,3.802)
+ ..(1.164,3.609)
+ ..controls(1.076,3.526)and(0.971,3.484)
+ ..(0.852,3.484)
+ ..controls(0.669,3.484)and(0.578,3.57)
+ ..(0.578,3.742)
+ ..controls(0.578,3.81)and(0.591,3.893)
+ ..(0.617,3.992)
+ ..controls(0.69,4.299)and(0.727,4.583)
+ ..(0.727,4.844)
+ ..controls(0.727,4.885)and(0.724,4.938)
+ ..(0.719,5)
+ ..controls(0.703,5.307)and(0.695,5.482)
+ ..(0.695,5.523)
+ ..controls(0.695,5.732)and(0.733,5.974)
+ ..(0.809,6.25)
+ ..controls(0.884,6.526)and(0.977,6.758)
+ ..(1.086,6.945)
+ ..controls(1.122,7.008)and(1.307,7.284)
+ ..(1.641,7.773)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((7.1u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(84, 10.594FX#,if true_size: 11.258FY#, 0FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((8.68,0)
+ --(1.141,0)
+ ..controls(0.979,0)and(0.865,0.03)
+ ..(0.797,0.09)
+ ..controls(0.729,0.15)and(0.695,0.255)
+ ..(0.695,0.406)
+ ..controls(0.695,0.578)and(0.734,0.784)
+ ..(0.813,1.023)
+ --(1.336,2.648)
+ --(8.961,2.648)
+ ..controls(8.997,3.289)and(9.016,3.763)
+ ..(9.016,4.07)
+ ..controls(9.016,5.852)and(8.523,7.029)
+ ..(7.539,7.602)
+ ..controls(7.18,7.815)and(6.617,7.935)
+ ..(5.852,7.961)
+ ..controls(5.753,7.966)and(5.198,7.971)
+ ..(4.188,7.977)
+ --(3.023,7.977)
+ ..controls(2.711,7.659)and(2.555,7.341)
+ ..(2.555,7.023)
+ ..controls(2.555,6.768)and(2.786,6.641)
+ ..(3.25,6.641)
+ --(3.969,6.641)
+ ..controls(4.328,6.641)and(4.607,6.591)
+ ..(4.805,6.492)
+ ..controls(5.159,6.315)and(5.336,5.964)
+ ..(5.336,5.438)
+ ..controls(5.336,4.651)and(4.935,4.258)
+ ..(4.133,4.258)
+ --(3.461,4.273)
+ --(2.617,4.273)
+ ..controls(2.331,4.273)and(2.105,4.221)
+ ..(1.941,4.117)
+ ..controls(1.777,4.013)and(1.576,3.797)
+ ..(1.336,3.469)
+ --(0.977,3.688)
+ ..controls(0.997,3.771)and(1.042,3.932)
+ ..(1.109,4.172)
+ ..controls(1.141,4.297)and(1.156,4.451)
+ ..(1.156,4.633)
+ ..controls(1.156,4.742)and(1.154,4.859)
+ ..(1.148,4.984)
+ ..controls(1.148,5.083)and(1.148,5.182)
+ ..(1.148,5.281)
+ ..controls(1.148,5.75)and(1.217,6.158)
+ ..(1.355,6.504)
+ ..controls(1.493,6.85)and(1.758,7.276)
+ ..(2.148,7.781)
+ ..controls(2.19,7.833)and(2.211,7.88)
+ ..(2.211,7.922)
+ ..controls(2.211,7.969)and(2.141,8.01)
+ ..(2,8.047)
+ ..controls(1.771,8.109)and(1.605,8.177)
+ ..(1.504,8.25)
+ ..controls(1.402,8.323)and(1.313,8.44)
+ ..(1.234,8.602)
+ ..controls(1.089,8.893)and(1.016,9.214)
+ ..(1.016,9.563)
+ ..controls(1.016,9.995)and(1.109,10.396)
+ ..(1.297,10.766)
+ ..controls(1.365,10.901)and(1.451,11.017)
+ ..(1.555,11.113)
+ ..controls(1.659,11.21)and(1.75,11.258)
+ ..(1.828,11.258)
+ ..controls(1.901,11.258)and(1.948,11.208)
+ ..(1.969,11.109)
+ ..controls(2,10.969)and(2.066,10.859)
+ ..(2.168,10.781)
+ ..controls(2.27,10.703)and(2.391,10.664)
+ ..(2.531,10.664)
+ --(4.563,10.664)
+ ..controls(5.594,10.664)and(6.391,10.607)
+ ..(6.953,10.492)
+ ..controls(7.88,10.31)and(8.557,9.823)
+ ..(8.984,9.031)
+ ..controls(9.411,8.24)and(9.625,7.083)
+ ..(9.625,5.563)
+ ..controls(9.625,5.37)and(9.612,4.432)
+ ..(9.586,2.75)
+ --(9.578,2.156)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((8u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(85, 10.383FX#,if true_size: 11.273FY#, 3.641FY#
+ else: cap_height#,desc_depth# fi);
+ "Hebrew letter" & tmp_string;
+ fill((8.438,6.703)
+ ..controls(8.26,7.182)and(8.018,7.422)
+ ..(7.711,7.422)
+ ..controls(7.477,7.422)and(7.12,7.104)
+ ..(6.641,6.469)
+ ..controls(6.161,5.833)and(5.68,5.036)
+ ..(5.195,4.078)
+ ..controls(4.831,3.359)and(4.581,2.807)
+ ..(4.445,2.422)
+ ..controls(4.31,2.036)and(4.242,1.688)
+ ..(4.242,1.375)
+ ..controls(4.242,1.219)and(4.253,1.081)
+ ..(4.273,0.961)
+ ..controls(4.294,0.841)and(4.365,0.503)
+ ..(4.484,-0.055)
+ ..controls(4.536,-0.284)and(4.563,-0.617)
+ ..(4.563,-1.055)
+ ..controls(4.563,-1.997)and(4.398,-2.706)
+ ..(4.07,-3.18)
+ ..controls(3.852,-3.487)and(3.602,-3.641)
+ ..(3.32,-3.641)
+ ..controls(3.169,-3.641)and(3.065,-3.591)
+ ..(3.008,-3.492)
+ ..controls(2.961,-3.404)and(2.938,-3.034)
+ ..(2.938,-2.383)
+ --(2.938,2.906)
+ ..controls(2.938,4.01)and(2.973,4.842)
+ ..(3.043,5.402)
+ ..controls(3.113,5.962)and(3.253,6.513)
+ ..(3.461,7.055)
+ ..controls(3.482,7.107)and(3.492,7.159)
+ ..(3.492,7.211)
+ ..controls(3.492,7.383)and(3.242,7.516)
+ ..(2.742,7.609)
+ ..controls(2.18,7.719)and(1.729,7.927)
+ ..(1.391,8.234)
+ ..controls(1.031,8.557)and(0.852,8.969)
+ ..(0.852,9.469)
+ ..controls(0.852,9.885)and(1.008,10.297)
+ ..(1.32,10.703)
+ ..controls(1.581,11.036)and(1.807,11.203)
+ ..(2,11.203)
+ ..controls(2.104,11.203)and(2.185,11.13)
+ ..(2.242,10.984)
+ ..controls(2.305,10.844)and(2.378,10.754)
+ ..(2.461,10.715)
+ ..controls(2.544,10.676)and(2.81,10.607)
+ ..(3.258,10.508)
+ ..controls(3.654,10.424)and(4.021,10.26)
+ ..(4.359,10.016)
+ ..controls(4.656,9.807)and(4.805,9.518)
+ ..(4.805,9.148)
+ ..controls(4.805,8.591)and(4.617,7.974)
+ ..(4.242,7.297)
+ ..controls(4.039,6.927)and(3.908,6.629)
+ ..(3.848,6.402)
+ ..controls(3.788,6.176)and(3.758,5.852)
+ ..(3.758,5.43)
+ ..controls(3.758,4.654)and(3.865,4.047)
+ ..(4.078,3.609)
+ ..controls(4.839,4.974)and(5.346,5.853)
+ ..(5.602,6.246)
+ ..controls(5.857,6.639)and(6.188,7.049)
+ ..(6.594,7.477)
+ ..controls(6.771,7.664)and(6.859,7.786)
+ ..(6.859,7.844)
+ ..controls(6.859,7.891)and(6.839,7.935)
+ ..(6.797,7.977)
+ ..controls(6.755,8.018)and(6.607,8.141)
+ ..(6.352,8.344)
+ ..controls(6.18,8.479)and(6.036,8.663)
+ ..(5.922,8.895)
+ ..controls(5.807,9.126)and(5.75,9.349)
+ ..(5.75,9.563)
+ ..controls(5.75,9.969)and(5.948,10.393)
+ ..(6.344,10.836)
+ ..controls(6.609,11.128)and(6.87,11.273)
+ ..(7.125,11.273)
+ ..controls(7.193,11.273)and(7.245,11.254)
+ ..(7.281,11.215)
+ ..controls(7.318,11.176)and(7.357,11.089)
+ ..(7.398,10.953)
+ ..controls(7.456,10.802)and(7.578,10.682)
+ ..(7.766,10.594)
+ ..controls(8.411,10.276)and(8.891,9.987)
+ ..(9.203,9.727)
+ ..controls(9.563,9.424)and(9.742,9.07)
+ ..(9.742,8.664)
+ ..controls(9.742,8.31)and(9.607,7.917)
+ ..(9.336,7.484)
+ ..controls(9.154,7.193)and(8.854,6.932)
+ ..(8.438,6.703)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((1.75u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(86, 9.82FX#,if true_size: 11.297FY#, 0FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((8.164,0)
+ --(0.211,0)
+ --(1.148,2.781)
+ --(6.133,2.781)
+ ..controls(6.44,2.781)and(6.63,2.792)
+ ..(6.703,2.813)
+ ..controls(6.875,2.87)and(6.961,2.966)
+ ..(6.961,3.102)
+ ..controls(6.961,3.227)and(6.833,3.371)
+ ..(6.578,3.535)
+ ..controls(6.323,3.699)and(5.901,3.911)
+ ..(5.313,4.172)
+ ..controls(4.469,4.536)and(3.969,4.755)
+ ..(3.813,4.828)
+ ..controls(3.656,4.901)and(3.526,4.982)
+ ..(3.422,5.07)
+ ..controls(3.151,5.294)and(3.016,5.615)
+ ..(3.016,6.031)
+ ..controls(3.016,6.182)and(3.023,6.388)
+ ..(3.039,6.648)
+ ..controls(3.049,6.794)and(3.055,6.927)
+ ..(3.055,7.047)
+ ..controls(3.055,7.266)and(3.016,7.466)
+ ..(2.938,7.648)
+ ..controls(2.906,7.716)and(2.828,7.776)
+ ..(2.703,7.828)
+ ..controls(2.578,7.88)and(2.448,7.906)
+ ..(2.313,7.906)
+ --(1.727,7.891)
+ ..controls(1.305,7.891)and(0.997,7.945)
+ ..(0.805,8.055)
+ ..controls(0.503,8.227)and(0.352,8.656)
+ ..(0.352,9.344)
+ ..controls(0.352,9.828)and(0.43,10.25)
+ ..(0.586,10.609)
+ ..controls(0.654,10.75)and(0.747,10.887)
+ ..(0.867,11.02)
+ ..controls(0.987,11.152)and(1.081,11.219)
+ ..(1.148,11.219)
+ ..controls(1.201,11.219)and(1.234,11.202)
+ ..(1.25,11.168)
+ ..controls(1.266,11.134)and(1.292,11.016)
+ ..(1.328,10.813)
+ ..controls(1.349,10.693)and(1.414,10.633)
+ ..(1.523,10.633)
+ ..controls(1.56,10.633)and(1.615,10.638)
+ ..(1.688,10.648)
+ ..controls(2.031,10.695)and(2.279,10.719)
+ ..(2.43,10.719)
+ ..controls(2.799,10.719)and(3.115,10.608)
+ ..(3.375,10.387)
+ ..controls(3.635,10.165)and(3.766,9.898)
+ ..(3.766,9.586)
+ --(3.758,9.195)
+ --(3.758,7.031)
+ ..controls(3.758,6.755)and(3.893,6.513)
+ ..(4.164,6.305)
+ ..controls(4.435,6.096)and(4.919,5.867)
+ ..(5.617,5.617)
+ ..controls(5.81,6.232)and(5.953,6.643)
+ ..(6.047,6.852)
+ ..controls(6.318,7.482)and(6.479,7.859)
+ ..(6.531,7.984)
+ --(5.938,8.328)
+ ..controls(5.568,8.547)and(5.383,8.875)
+ ..(5.383,9.313)
+ ..controls(5.383,10)and(5.677,10.661)
+ ..(6.266,11.297)
+ ..controls(6.557,10.938)and(7.013,10.685)
+ ..(7.633,10.539)
+ ..controls(7.945,10.471)and(8.155,10.415)
+ ..(8.262,10.371)
+ ..controls(8.368,10.327)and(8.477,10.255)
+ ..(8.586,10.156)
+ ..controls(8.857,9.896)and(8.992,9.518)
+ ..(8.992,9.023)
+ ..controls(8.992,8.654)and(8.917,8.286)
+ ..(8.766,7.922)
+ ..controls(8.615,7.557)and(8.414,7.26)
+ ..(8.164,7.031)
+ ..controls(7.966,7.224)and(7.807,7.361)
+ ..(7.688,7.441)
+ ..controls(7.568,7.522)and(7.372,7.628)
+ ..(7.102,7.758)
+ ..controls(6.773,7.148)and(6.477,6.357)
+ ..(6.211,5.383)
+ ..controls(6.784,5.18)and(7.326,4.935)
+ ..(7.836,4.648)
+ ..controls(8.289,4.393)and(8.608,4.146)
+ ..(8.793,3.906)
+ ..controls(8.978,3.667)and(9.07,3.38)
+ ..(9.07,3.047)
+ ..controls(9.07,2.844)and(9.029,2.559)
+ ..(8.945,2.191)
+ ..controls(8.862,1.824)and(8.766,1.505)
+ ..(8.656,1.234)
+ ..controls(8.385,0.578)and(8.221,0.167)
+ ..(8.164,0)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((1.75u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(87, 10.133FX#,if true_size: 11.18FY#, 3.977FY#
+ else: cap_height#,desc_depth# fi);
+ "Hebrew letter" & tmp_string;
+ fill((2.672,10.563)
+ --(6.625,10.563)
+ ..controls(6.979,10.563)and(7.232,10.548)
+ ..(7.383,10.52)
+ ..controls(7.534,10.491)and(7.698,10.43)
+ ..(7.875,10.336)
+ ..controls(8.536,9.971)and(8.964,9.242)
+ ..(9.156,8.148)
+ ..controls(9.292,7.404)and(9.359,6.633)
+ ..(9.359,5.836)
+ ..controls(9.359,4.549)and(9.042,3.565)
+ ..(8.406,2.883)
+ ..controls(8,2.44)and(7.357,2.083)
+ ..(6.477,1.813)
+ ..controls(5.831,1.615)and(5.365,1.456)
+ ..(5.078,1.336)
+ ..controls(4.792,1.216)and(4.549,1.081)
+ ..(4.352,0.93)
+ ..controls(4.081,0.716)and(3.896,0.523)
+ ..(3.797,0.352)
+ ..controls(3.672,0.148)and(3.586,0.023)
+ ..(3.539,-0.023)
+ ..controls(3.492,-0.07)and(3.43,-0.094)
+ ..(3.352,-0.094)
+ ..controls(3.242,-0.094)and(3.155,-0.042)
+ ..(3.09,0.063)
+ ..controls(3.025,0.167)and(2.992,0.302)
+ ..(2.992,0.469)
+ ..controls(2.992,1.042)and(3.25,1.578)
+ ..(3.766,2.078)
+ ..controls(4.188,2.484)and(4.924,2.852)
+ ..(5.977,3.18)
+ ..controls(6.669,3.398)and(7.189,3.596)
+ ..(7.535,3.773)
+ ..controls(7.882,3.951)and(8.143,4.154)
+ ..(8.32,4.383)
+ ..controls(8.617,4.773)and(8.766,5.307)
+ ..(8.766,5.984)
+ ..controls(8.766,6.745)and(8.583,7.279)
+ ..(8.219,7.586)
+ ..controls(7.99,7.773)and(7.609,7.867)
+ ..(7.078,7.867)
+ --(2.5,7.867)
+ ..controls(2.224,7.867)and(2.027,7.88)
+ ..(1.91,7.906)
+ ..controls(1.793,7.932)and(1.669,7.987)
+ ..(1.539,8.07)
+ ..controls(1.159,8.32)and(0.969,8.776)
+ ..(0.969,9.438)
+ ..controls(0.969,9.99)and(1.107,10.43)
+ ..(1.383,10.758)
+ ..controls(1.617,11.039)and(1.799,11.18)
+ ..(1.93,11.18)
+ ..controls(1.982,11.18)and(2.017,11.165)
+ ..(2.035,11.137)
+ ..controls(2.053,11.108)and(2.081,11.021)
+ ..(2.117,10.875)
+ ..controls(2.169,10.667)and(2.354,10.563)
+ ..(2.672,10.563)
+ --cycle) xscaled FX yscaled FY;
+ fill((2.352,6.258)
+ ..controls(2.513,6.237)and(2.594,6.151)
+ ..(2.594,6)
+ ..controls(2.594,5.922)and(2.579,5.863)
+ ..(2.551,5.824)
+ ..controls(2.522,5.785)and(2.43,5.703)
+ ..(2.273,5.578)
+ ..controls(1.966,5.323)and(1.813,4.87)
+ ..(1.813,4.219)
+ ..controls(1.813,3.854)and(1.932,2.815)
+ ..(2.172,1.102)
+ ..controls(2.302,0.216)and(2.378,-0.327)
+ ..(2.398,-0.527)
+ ..controls(2.419,-0.728)and(2.43,-0.99)
+ ..(2.43,-1.313)
+ ..controls(2.43,-2.135)and(2.281,-2.828)
+ ..(1.984,-3.391)
+ ..controls(1.781,-3.781)and(1.56,-3.977)
+ ..(1.32,-3.977)
+ ..controls(1.107,-3.977)and(1,-3.82)
+ ..(1,-3.508)
+ ..controls(1,-3.393)and(1.013,-3.143)
+ ..(1.039,-2.758)
+ ..controls(1.076,-2.216)and(1.094,-1.557)
+ ..(1.094,-0.781)
+ ..controls(1.094,-0.422)and(1.063,0.393)
+ ..(1,1.664)
+ ..controls(0.974,2.237)and(0.961,2.747)
+ ..(0.961,3.195)
+ ..controls(0.961,4.055)and(1.065,4.732)
+ ..(1.273,5.227)
+ ..controls(1.409,5.539)and(1.607,5.813)
+ ..(1.867,6.047)
+ ..controls(2.044,6.203)and(2.206,6.273)
+ ..(2.352,6.258)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((5.8u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(88, 9.461FX#,if true_size: 11.125FY#, 0.016FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((1.484,10.523)
+ --(5.734,10.523)
+ ..controls(6.38,10.529)and(6.872,10.419)
+ ..(7.211,10.195)
+ ..controls(7.685,9.867)and(7.956,9.299)
+ ..(8.023,8.492)
+ ..controls(8.044,8.128)and(8.089,6.862)
+ ..(8.156,4.695)
+ --(8.18,3.742)
+ ..controls(8.19,3.404)and(8.203,3.042)
+ ..(8.219,2.656)
+ ..controls(8.234,2.349)and(8.242,2.125)
+ ..(8.242,1.984)
+ ..controls(8.242,1.417)and(8.147,0.941)
+ ..(7.957,0.559)
+ ..controls(7.767,0.176)and(7.531,-0.016)
+ ..(7.25,-0.016)
+ ..controls(7.151,-0.016)and(7.085,0.008)
+ ..(7.051,0.055)
+ ..controls(7.017,0.102)and(7.003,0.19)
+ ..(7.008,0.32)
+ --(7.016,0.523)
+ --(7.445,5.438)
+ ..controls(7.492,5.969)and(7.516,6.38)
+ ..(7.516,6.672)
+ ..controls(7.516,7.125)and(7.365,7.44)
+ ..(7.063,7.617)
+ ..controls(6.917,7.706)and(6.635,7.75)
+ ..(6.219,7.75)
+ --(1.859,7.75)
+ ..controls(1.344,7.75)and(0.964,7.818)
+ ..(0.719,7.953)
+ ..controls(0.24,8.224)and(0,8.768)
+ ..(0,9.586)
+ ..controls(0,10.065)and(0.094,10.44)
+ ..(0.281,10.711)
+ ..controls(0.349,10.81)and(0.436,10.904)
+ ..(0.543,10.992)
+ ..controls(0.65,11.081)and(0.729,11.125)
+ ..(0.781,11.125)
+ ..controls(0.87,11.125)and(0.94,11.016)
+ ..(0.992,10.797)
+ ..controls(1.018,10.693)and(1.066,10.621)
+ ..(1.137,10.582)
+ ..controls(1.207,10.543)and(1.323,10.523)
+ ..(1.484,10.523)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((5u,0.475h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(89, 10.594FX#,if true_size: 11.086FY#, 0FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((7.586,0)
+ --(1.695,0)
+ ..controls(1.612,0.396)and(1.51,0.971)
+ ..(1.391,1.727)
+ ..controls(1.318,2.237)and(1.255,2.633)
+ ..(1.203,2.914)
+ ..controls(1.057,3.727)and(0.984,4.339)
+ ..(0.984,4.75)
+ ..controls(0.984,5.271)and(1.073,5.839)
+ ..(1.25,6.453)
+ ..controls(1.396,6.948)and(1.503,7.258)
+ ..(1.57,7.383)
+ ..controls(1.602,7.44)and(1.617,7.484)
+ ..(1.617,7.516)
+ ..controls(1.617,7.557)and(1.477,7.706)
+ ..(1.195,7.961)
+ ..controls(0.966,8.174)and(0.852,8.534)
+ ..(0.852,9.039)
+ ..controls(0.852,9.68)and(0.958,10.214)
+ ..(1.172,10.641)
+ ..controls(1.318,10.938)and(1.495,11.086)
+ ..(1.703,11.086)
+ ..controls(1.771,11.086)and(1.82,11.042)
+ ..(1.852,10.953)
+ ..controls(1.909,10.755)and(2.128,10.586)
+ ..(2.508,10.445)
+ ..controls(2.852,10.331)and(3.094,10.208)
+ ..(3.234,10.078)
+ ..controls(3.521,9.823)and(3.664,9.479)
+ ..(3.664,9.047)
+ ..controls(3.664,8.589)and(3.536,8.076)
+ ..(3.281,7.508)
+ ..controls(3.182,7.294)and(3.099,7.188)
+ ..(3.031,7.188)
+ ..controls(2.979,7.188)and(2.878,7.227)
+ ..(2.727,7.305)
+ ..controls(2.633,7.352)and(2.536,7.375)
+ ..(2.438,7.375)
+ ..controls(2.292,7.375)and(2.182,7.305)
+ ..(2.109,7.164)
+ ..controls(1.979,6.935)and(1.868,6.633)
+ ..(1.777,6.258)
+ ..controls(1.686,5.883)and(1.641,5.547)
+ ..(1.641,5.25)
+ ..controls(1.641,4.99)and(1.66,4.777)
+ ..(1.699,4.613)
+ ..controls(1.738,4.449)and(1.859,4.068)
+ ..(2.063,3.469)
+ ..controls(2.224,2.995)and(2.346,2.758)
+ ..(2.43,2.758)
+ ..controls(2.466,2.758)and(2.604,2.868)
+ ..(2.844,3.09)
+ ..controls(3.083,3.311)and(3.268,3.497)
+ ..(3.398,3.648)
+ ..controls(3.664,3.961)and(3.93,4.4)
+ ..(4.195,4.965)
+ ..controls(4.461,5.53)and(4.656,6.073)
+ ..(4.781,6.594)
+ ..controls(4.891,7.047)and(4.948,7.286)
+ ..(4.953,7.313)
+ ..controls(4.974,7.375)and(4.984,7.422)
+ ..(4.984,7.453)
+ ..controls(4.984,7.516)and(4.964,7.57)
+ ..(4.922,7.617)
+ ..controls(4.88,7.664)and(4.734,7.797)
+ ..(4.484,8.016)
+ ..controls(4.266,8.208)and(4.156,8.513)
+ ..(4.156,8.93)
+ ..controls(4.156,9.534)and(4.273,10.052)
+ ..(4.508,10.484)
+ ..controls(4.576,10.615)and(4.686,10.746)
+ ..(4.84,10.879)
+ ..controls(4.993,11.012)and(5.109,11.078)
+ ..(5.188,11.078)
+ ..controls(5.271,11.078)and(5.352,10.951)
+ ..(5.43,10.695)
+ ..controls(5.477,10.534)and(5.667,10.417)
+ ..(6,10.344)
+ ..controls(6.651,10.219)and(6.977,9.724)
+ ..(6.977,8.859)
+ ..controls(6.977,8.536)and(6.893,8.18)
+ ..(6.727,7.789)
+ ..controls(6.56,7.393)and(6.417,7.195)
+ ..(6.297,7.195)
+ ..controls(6.271,7.195)and(6.19,7.229)
+ ..(6.055,7.297)
+ ..controls(5.898,7.375)and(5.792,7.414)
+ ..(5.734,7.414)
+ ..controls(5.625,7.414)and(5.542,7.31)
+ ..(5.484,7.102)
+ ..controls(5.234,6.138)and(4.956,5.355)
+ ..(4.648,4.754)
+ ..controls(4.341,4.152)and(3.88,3.487)
+ ..(3.266,2.758)
+ --(6.992,2.758)
+ ..controls(7.169,3.253)and(7.44,3.837)
+ ..(7.805,4.512)
+ ..controls(8.169,5.186)and(8.529,5.768)
+ ..(8.883,6.258)
+ ..controls(9.102,6.555)and(9.211,6.781)
+ ..(9.211,6.938)
+ ..controls(9.211,7.078)and(9.146,7.193)
+ ..(9.016,7.281)
+ ..controls(8.974,7.307)and(8.781,7.375)
+ ..(8.438,7.484)
+ ..controls(8.125,7.583)and(7.887,7.76)
+ ..(7.723,8.016)
+ ..controls(7.559,8.271)and(7.477,8.589)
+ ..(7.477,8.969)
+ ..controls(7.477,9.609)and(7.633,10.154)
+ ..(7.945,10.602)
+ ..controls(8.029,10.716)and(8.141,10.823)
+ ..(8.281,10.922)
+ ..controls(8.422,11.021)and(8.534,11.07)
+ ..(8.617,11.07)
+ ..controls(8.695,11.07)and(8.734,11.042)
+ ..(8.734,10.984)
+ --(8.734,10.797)
+ ..controls(8.734,10.667)and(8.862,10.552)
+ ..(9.117,10.453)
+ ..controls(9.419,10.339)and(9.611,10.258)
+ ..(9.691,10.211)
+ ..controls(9.772,10.164)and(9.859,10.089)
+ ..(9.953,9.984)
+ ..controls(10.167,9.734)and(10.273,9.393)
+ ..(10.273,8.961)
+ ..controls(10.273,8.581)and(10.211,8.194)
+ ..(10.086,7.801)
+ ..controls(9.961,7.408)and(9.62,6.508)
+ ..(9.063,5.102)
+ ..controls(8.833,4.529)and(8.6,3.835)
+ ..(8.363,3.02)
+ ..controls(8.126,2.204)and(7.867,1.198)
+ ..(7.586,0)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((7.45u,0.5h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+beginchar(90, 11.047FX#,if true_size: 11.078FY#, 0.141FY#
+ else: cap_height#,0 fi);
+ "Hebrew letter" & tmp_string;
+ fill((2.18,7.758)
+ ..controls(1.841,7.904)and(1.615,8.068)
+ ..(1.5,8.25)
+ ..controls(1.302,8.563)and(1.203,8.958)
+ ..(1.203,9.438)
+ ..controls(1.203,9.875)and(1.31,10.271)
+ ..(1.523,10.625)
+ ..controls(1.596,10.75)and(1.689,10.857)
+ ..(1.801,10.945)
+ ..controls(1.913,11.034)and(2.01,11.078)
+ ..(2.094,11.078)
+ ..controls(2.167,11.078)and(2.216,11.061)
+ ..(2.242,11.027)
+ ..controls(2.268,10.993)and(2.294,10.914)
+ ..(2.32,10.789)
+ ..controls(2.367,10.617)and(2.51,10.534)
+ ..(2.75,10.539)
+ --(7.203,10.539)
+ ..controls(7.646,10.539)and(8.003,10.487)
+ ..(8.273,10.383)
+ ..controls(8.544,10.279)and(8.784,10.102)
+ ..(8.992,9.852)
+ ..controls(9.164,9.648)and(9.285,9.439)
+ ..(9.355,9.223)
+ ..controls(9.426,9.007)and(9.471,8.721)
+ ..(9.492,8.367)
+ --(9.82,1.531)
+ ..controls(9.82,1.49)and(9.82,1.427)
+ ..(9.82,1.344)
+ ..controls(9.82,0.896)and(9.721,0.549)
+ ..(9.523,0.305)
+ ..controls(9.32,0.055)and(9.115,-0.07)
+ ..(8.906,-0.07)
+ ..controls(8.813,-0.07)and(8.751,-0.046)
+ ..(8.723,0.004)
+ ..controls(8.694,0.053)and(8.68,0.164)
+ ..(8.68,0.336)
+ --(8.852,6.555)
+ ..controls(8.857,6.654)and(8.859,6.737)
+ ..(8.859,6.805)
+ ..controls(8.859,7.143)and(8.785,7.387)
+ ..(8.637,7.535)
+ ..controls(8.488,7.684)and(8.247,7.758)
+ ..(7.914,7.758)
+ --(3.477,7.758)
+ ..controls(3.174,7.758)and(2.992,7.75)
+ ..(2.93,7.734)
+ ..controls(2.867,7.719)and(2.802,7.669)
+ ..(2.734,7.586)
+ ..controls(2.625,7.461)and(2.522,7.25)
+ ..(2.426,6.953)
+ ..controls(2.329,6.656)and(2.281,6.406)
+ ..(2.281,6.203)
+ ..controls(2.281,5.786)and(2.521,4.992)
+ ..(3,3.82)
+ ..controls(3.365,2.924)and(3.583,2.359)
+ ..(3.656,2.125)
+ ..controls(3.729,1.891)and(3.766,1.641)
+ ..(3.766,1.375)
+ ..controls(3.766,0.932)and(3.599,0.56)
+ ..(3.266,0.258)
+ ..controls(2.974,-0.008)and(2.534,-0.141)
+ ..(1.945,-0.141)
+ ..controls(1.482,-0.141)and(1.07,-0.094)
+ ..(0.711,0)
+ ..controls(0.643,0.438)and(0.609,0.747)
+ ..(0.609,0.93)
+ ..controls(0.609,1.419)and(0.682,1.818)
+ ..(0.828,2.125)
+ ..controls(0.901,2.292)and(0.977,2.411)
+ ..(1.055,2.484)
+ ..controls(1.133,2.557)and(1.263,2.633)
+ ..(1.445,2.711)
+ ..controls(1.586,2.773)and(1.656,2.859)
+ ..(1.656,2.969)
+ ..controls(1.656,3.01)and(1.648,3.065)
+ ..(1.633,3.133)
+ ..controls(1.565,3.388)and(1.499,3.754)
+ ..(1.434,4.23)
+ ..controls(1.368,4.707)and(1.336,5.063)
+ ..(1.336,5.297)
+ ..controls(1.336,6.052)and(1.617,6.872)
+ ..(2.18,7.758)
+ --cycle) xscaled FX yscaled FY;
+ if dagesh: adjust_dot0((6.5u,0.475h),dtsz,false,false);
+ dot(0,0'); fi
+endchar;
+
+extra_endchar:=extra_endchar_save;
+turningcheck:=t;
+
+endinput.
+
+% font_slant := 0;
+% font_normal_space := 4.369 * FX#;
+% font_normal_stretch := 2.185 * FX#;
+% font_normal_shrink := 1.456 * FX#;
+% font_quad := 13.107 * FX#;
+% font_x_height := 6.711 * FX#;
+% designsize := FontSize;
+
+% end.
+
+
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathineq.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathineq.mf
new file mode 100644
index 00000000000..0bd25d606ca
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathineq.mf
@@ -0,0 +1,416 @@
+% mathematical symbols by Anthony Phan.
+% file: mathineq.mf (inequalities)
+% last modification: May 16, 2005.
+% Only known charcodes will be generated.
+
+% Inequality signs and related things (relations).
+% Some pictures overlap the bottom. It is necessary
+% for correct centering of the whole box.
+% Spreads for cross bars have been checked.
+% Curly slants are strange: it is half way to two
+% extreme solutions...
+
+def horizontal_rules_list=math_axis,
+ -body_depth,-desc_depth,x_height,cap_height,asc_height,body_height
+enddef;
+
+use_rule1;
+make_sim_picture;
+
+if (main_name_string="less") or (main_name_string="greater"):
+
+ beginpicture(first,
+ 12u#+2appr#,v_center(spread4#+rth#));
+ pickup tiny.nib;
+ 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;
+ a:=2vround 0.5(spread1/abs cosd angle(z2r-z3r));
+ endpicture;
+
+ beginpicture(second,
+ 12u#+2appr#,v_center(spread4#+rth#));
+ pickup tiny.nib;
+ y2r=0.5[y1,y3]=good.y math_axis; y1-y3=spread4;
+ lft x1=Appr; rt x2r=w-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;
+ endpicture;
+
+else:
+
+ beginpicture(first,
+ 12u#+2appr#,v_center(spread4#+rth#));
+ pickup tiny.nib; pos2(rth,90); pos4(rth,90);
+ lft x2=Appr; rt x1r=rt x3l=w-Appr; x4=0.50[x2,x1r];
+ y2=y4=math_axis; y3l-y2r=y2l-y1r=0.5spread4; y1r=y1l; y3r=y3l;
+ x1r-x1l=diag_width(rth-tiny,z4r-z1r);
+ x3l-x3r=diag_width(rth-tiny,z4l-z3l);
+ filldraw stroke z2e{right}...z1e{z1r-z4r};
+ filldraw stroke z2e{right}...z3e{z3l-z4l};
+ a:=spread1;
+ endpicture;
+
+ beginpicture(second,
+ 12u#+2appr#,v_center(spread4#+rth#));
+ pickup tiny.nib; pos2(rth,-90); pos4(rth,-90);
+ rt x2=w-Appr; lft x1l=lft x3r=Appr; x4=0.50[x2,x1l];
+ y2=y4=math_axis; y3r-y2l=y2r-y1l=0.5spread4; y1r=y1l; y3r=y3l;
+ x1l-x1r=-diag_width(rth-tiny,z4l-z1l);
+ x3r-x3l=-diag_width(rth-tiny,z4r-z3r);
+ filldraw stroke z2e{left}...z1e{z1l-z4l};
+ filldraw stroke z2e{left}...z3e{z3r-z4r};
+ endpicture;
+fi
+
+if (main_name_string="greater") or (main_name_string="successor"):
+ tmp_picture:=first_picture; first_picture:=second_picture;
+ second_picture:=tmp_picture;
+fi
+
+%
+% Let's go
+%
+
+beginchar(main_name_with(),
+ 12u#+2appr#,v_center(spread4#+rth#));
+ main_name_string&" sign";
+ currentpicture:=first_picture;
+endchar;
+
+beginchar(main_name_with(_not),
+ 12u#+2appr#,asc_height#,asc_depth#);
+ "not " & main_name_string&" sign";
+ currentpicture:=first_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); top y1l=h; bot y2l=-d;
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(main_name_with(_slant),
+ 12u#+2appr#,v_center(spread4#+spread1#+rth#));
+ main_name_string&"-slant sign";
+ currentpicture:=first_picture shifted(0,0.5a);
+ save b;
+ pickup tiny.nib;
+ if (main_name_string="less") or (main_name_string="greater"):
+ y0=good.y math_axis; lft x1=Appr; rt x2=w-Appr;
+ b=(rth-tiny)/cosd angle(x2-x1,0.5spread4);
+ penpos1(b,90); penpos2(b,90);
+ if (main_name_string="less"): y1=y0-0.5a; y1-y2=0.5spread4;
+ else: y2=y0-0.5a; y1-y2=-0.5spread4; fi
+ filldraw stroke z1e..z2e; penlabels(1,2);
+ elseif main_name_string="predecessor":
+ pos2(rth,-90); pos3(rth,-90);
+ lft x2=Appr; y2=y3=math_axis-0.5spread1;
+ rt x1l=rt x1=w-Appr; y1=y2r-0.5spread4;
+ x3=0.50[x2,x1l];
+ y1l=y1r=y2r-vround(0.5spread4
+ *(0.5[1,1/abs cosd angle(z3l-z1)]));
+ x1l-x1r=diag_width(rth-tiny,z3l-z1l);
+ filldraw stroke z1e{z3l-z1l}...z2e{left};
+ penlabels(1,2,3);
+ else:
+ pos2(rth,-90); pos3(rth,-90);
+ rt x2=w-Appr; y2=y3=math_axis-0.5spread1;
+ lft x1l=lft x1=Appr; y1=y2r-0.5spread4;
+ x3=0.50[x2,x1l];
+ y1l=y1r=y2r-vround(0.5spread4
+ *(0.5[1,1/abs cosd angle(z3l-z1)]));
+ x1l-x1r=-diag_width(rth-tiny,z3l-z1l);
+ filldraw stroke z1e{z3l-z1l}...z2e{right};
+ penlabels(1,2,3);
+ fi
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(main_name_with(_not_slant),
+ 12u#+2appr#,asc_height#,asc_depth#);
+ "not "&main_name_string&"-slant sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); top y1l=h; bot y2l=-d;
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(main_name_with(_eq),
+ 12u#+2appr#,v_center(spread4#+spread0#+rth#));
+ main_name_string&"-bar sign";
+ currentpicture:=first_picture shifted(0,0.5spread0);
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); rt x2=w-Appr; lft x1=Appr;
+ y1=y2=math_axis-0.5(spread4+spread0);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(main_name_with(_not_eq),
+ 12u#+2appr#,asc_height#,asc_depth#);
+ "not "&main_name_string&"-bar sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); top y1l=h; bot y2l=-d;
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(main_name_with(_eq_not),
+ 12u#+2appr#,v_center(spread4#+spread0#+rth#));
+ main_name_string&"-not bar sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ y0=math_axis-0.5(spread4+spread0);
+ x0=0.5w;
+ v_adjust(1r,2l,y0,1.5spread1-0.5rth);
+ lft x2l-Appr=w-Appr-rt x1r=hround 3.5u;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(0,1,2);
+endchar;
+
+beginchar(main_name_with(_eq_varnot),
+ 12u#+2appr#,v_center(spread4#+spread0#+rth#));
+ main_name_string&"-varnot bar sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ y0=math_axis-0.5(spread4+spread0);
+ x0=0.5w;
+ v_adjust(1l,2l,y0,1.5spread1-0.5rth);
+ pos1(rth,0); pos2(rth,0);
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(0,1,2);
+endchar;
+
+beginchar(main_name_with(_eqq),
+ 12u#+2appr#,v_center(spread4#+spread1#+spread0#+rth#));
+ main_name_string&" equal sign";
+ currentpicture:=first_picture shifted(0,0.5(spread1+spread0));
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); pos3(rth,90); pos4(rth,90);
+ rt x2=rt x4=w-Appr; lft x1=lft x3=Appr;
+ y1=y2=math_axis-0.5(spread4-spread1+spread0);
+ y3=y4=y1-spread1;
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(main_name_with(_not_eqq),
+ 12u#+2appr#,v_center(max(asc_height#+asc_depth#,
+ spread4#+spread1#+spread0#+rth#)));
+ "not "&main_name_string&" equal sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0);
+ v_adjust(1l,2l,math_axis,max(h+d,spread4+spread0+2spread1));
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(main_name_with(_eqq_not),
+ 12u#+2appr#,v_center(spread4#+spread1#+spread0#+rth#));
+ main_name_string&" but not equal sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ y0=math_axis-0.5(spread4+spread0);
+ x0=0.5w;
+ v_adjust(1r,2l,y0,2.5spread1-0.5rth);
+ lft x2l-Appr=w-Appr-rt x1r=hround 2.75u;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(0,1,2);
+endchar;
+
+beginchar(main_name_with(_eqq_varnot),
+ 12u#+2appr#,v_center(spread4#+spread1#+spread0#+rth#));
+ "variant "&main_name_string&" but not equal sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ y0=math_axis-0.5(spread4+spread0);
+ x0=0.5w;
+ v_adjust(1l,2l,y0,2.5spread1-0.5rth);
+ pos1(rth,0); pos2(rth,0);
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(main_name_with(_upperslant),
+ 12u#+2appr#,v_center(spread4#+spread1#+rth#));
+ main_name_string &"with upper slant sign";
+ currentpicture:=first_picture shifted(0,-0.5a);
+ save b;
+ pickup tiny.nib;
+ if (main_name_string="less") or (main_name_string="greater"):
+ y0=good.y math_axis; lft x1=Appr; rt x2=w-Appr;
+ b=(rth-tiny)/cosd angle(x2-x1,0.5spread4);
+ penpos1(b,90); penpos2(b,90);
+ if (main_name_string="less"): y1=y0+0.5a; y1-y2=-0.5spread4;
+ else: y2=y0+0.5a; y1-y2=0.5spread4; fi
+ filldraw stroke z1e..z2e; penlabels(1,2);
+ elseif main_name_string="predecessor":
+ pos2(rth,90); pos3(rth,90);
+ lft x2=Appr; y2=y3=math_axis+0.5spread1;
+ rt x1l=rt x1=w-Appr; y1=y2r+0.5spread4;
+ x3=0.50[x2,x1l];
+ y1l=y1r=y2r+vround(0.5spread4
+ *(0.5[1,1/abs cosd angle(z3l-z1)]));
+ x1l-x1r=diag_width(rth-tiny,z3l-z1l);
+ filldraw stroke z1e{z3l-z1l}...z2e{left};
+ penlabels(1,2,3);
+ else:
+ pos2(rth,90); pos3(rth,90);
+ rt x2=w-Appr; y2=y3=math_axis+0.5spread1;
+ lft x1l=lft x1=Appr; y1=y2r+0.5spread4;
+ x3=0.50[x2,x1l];
+ y1l=y1r=y2r+vround(0.5spread4
+ *(0.5[1,1/abs cosd angle(z3l-z1)]));
+ x1l-x1r=-diag_width(rth-tiny,z3l-z1l);
+ filldraw stroke z1e{z3l-z1l}...z2e{right};
+ penlabels(1,2,3);
+ fi
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(main_name_with(_not_upperslant),
+ 12u#+2appr#,asc_height#,asc_depth#);
+ "not " & main_name_string&" upper slant sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); top y1l=h; bot y2l=-d;
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(main_name_with(_opposite),
+ 12u#+2appr#,v_center(1.5spread4#+spread1#+rth#));
+ main_name_string&" and opposite sign";
+ currentpicture:=(first_picture
+ shifted(0,vround(0.5a+0.25spread4)))
+ +(second_picture
+ shifted(0,-vround(0.5a+0.25spread4)));
+endchar;
+
+beginchar(main_name_with(_eq_opposite),12u#+2appr#,
+ v_center(2spread4#+2spread0#+rth#));
+ main_name_string&" bar opposite sign";
+ currentpicture:=(first_picture
+ shifted(0,vround(spread0+0.5spread4)))
+ +(second_picture
+ shifted(0,-vround(spread0+0.5spread4)));
+ pickup tiny.nib; pos1(rth,90); pos2(rth,90);
+ lft x1=Appr; rt x2=w-Appr; y1=y2=math_axis;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(main_name_with(_eqq_opposite),12u#+2appr#,
+ v_center(2spread4#+2spread0#+spread1#+rth#));
+ main_name_string&" equal opposite 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-y3=y2-y4=spread1; 0.5[y1,y3]=0.5[y2,y4]=math_axis;
+ currentpicture:=(first_picture
+ shifted(0,vround(spread0+0.5spread1+0.5spread4)))
+ +(second_picture
+ shifted(0,-vround(spread0+0.5spread1+0.5spread4)));
+ filldraw stroke z1e..z2e; filldraw stroke z3e..z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(main_name_with(_sim),12u#+2appr#,
+ v_center(spread4#+spread1#+spread0#+rth#));
+ main_name_string&" similarity sign";
+ numeric b,c; b=vround(0.5spread1+0.5spread0);
+ c=b-vround(0.5(spread4+spread1)+spread0);
+ currentpicture:=(first_picture shifted(0,b))
+ +(sim_picture shifted(0,c));
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(main_name_with(_not_sim),
+ 12u#+2appr#,v_center(max(asc_height#+asc_depth#,
+ spread4#+spread1#+spread0#+rth#)));
+ "not "&main_name_string&" similarity sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0);
+ v_adjust(1l,2l,math_axis,max(h+d,spread4+spread0+2spread1));
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(main_name_with(_sim_not),
+ 12u#+2appr#,v_center(spread4#+spread1#+spread0#+rth#));
+ main_name_string&" but not similarity sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ y0=math_axis-0.5(spread4+spread0);
+ x0=0.5w;
+ v_adjust(1r,2l,y0,2spread1);
+ lft x2l-Appr=w-Appr-rt x1r=hround 2.75u;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(0,1,2);
+endchar;
+
+beginchar(main_name_with(_approx),
+ 12u#+2appr#,v_center(spread4#+2spread1#+spread0#+2rth#));
+ main_name_string&" approximative sign";
+ numeric b,c; b=vround(spread1+0.5spread0+0.5rth);
+ c=b-vround(0.5(spread4+spread1)+spread0);
+ currentpicture:=(first_picture shifted(0,b))
+ +(sim_picture shifted(0,c))
+ +(sim_picture shifted(0,c-spread1-rth));
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(main_name_with(_not_approx),
+ 12u#+2appr#,v_center(max(asc_height#+asc_depth#,
+ spread4#+2spread1#+spread0#+2rth#)));
+ main_name_string&" but not approximative sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0);
+ v_adjust(1l,2l,math_axis,max(h+d,spread4+spread0+3spread1));
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(main_name_with(_approx_not),
+ 12u#+2appr#,v_center(spread4#+2spread1#+spread0#+2rth#));
+ main_name_string&" but not approximative sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ y0=math_axis-0.5(spread4+spread0);
+ x0=0.5w;
+ v_adjust(1r,2l,y0,3spread1);
+ lft x2l-Appr=w-Appr-rt x1r=hround 2.5u;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(0,1,2);
+endchar;
+
+beginchar(main_name_with(_dot),
+ 12u#+2appr#,v_center(spread4#+rth#));
+ main_name_string&" with dot sign";
+ currentpicture:=first_picture; pickup tiny.nib;
+ adjust_dot1((
+ if (main_name_string="less") or (main_name_string="predecessor"):
+ w-Appr-u-0.5dtsz else: Appr+u+0.5dtsz fi,
+ good.y math_axis),dtsz,false,true);
+ dot(1,1');
+endchar;
+
+
+
+
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathltlk.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathltlk.mf
new file mode 100644
index 00000000000..eba7feea358
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathltlk.mf
@@ -0,0 +1,673 @@
+% mathematical symbols by Anthony Phan.
+% file: mathltlk.mf (mathematical letter-like 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;
+
+use_rule1;
+
+%turningcheck:=0;
+
+%
+% A
+%
+
+beginchar(for_all,8.2u#+2appr#,cap_height#,0);
+ "Universal quantifier";
+ pickup tiny.nib;
+ lft x1l=w-rt x3r=appr-hround 0.5u; x2=x4=0.5[x1l,x3r];
+ top y1l=top y3r=h; bot y2=bot y4=-o;
+ adjust_slanted_bar(1l,2,1,2l)(0.5(rth-tiny),1);
+ adjust_slanted_bar(3r,4,3,4r)(0.5(rth-tiny),-1);
+ forsuffixes $=1,2,3,4: z$r-z$=z$-z$l; endfor
+ z5=whatever[z1r,z2r]; z5=whatever[z3l,z4l];
+ top y6r-bot y6l=top y7r-bot y7l=rth;
+ top y6r=top y7r=vround(x_height+0.5rth);
+ forsuffixes $=r,l: z6$=whatever[z1,z2]; z7$=whatever[z3,z4]; endfor
+ filldraw z1l--z2l--z4r--z3r--z3l--z5--z1r--cycle;
+ filldraw stroke z6e..z7e; penlabels(1,2,3,4,5,6,7);
+endchar;
+
+%
+% C
+%
+
+beginchar(complement,5.5u#+2appr#,cap_height#,0);
+ "Complement";
+ autorounded; pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0);
+ pos7(rth,0); pos8(rth,0);
+ h-bot y1=top y8+d=vround 0.25(h+d);
+ y3+0.5rth=h+o; y6-0.5rth=-d-o;
+ rt x1r=w-appr; x1=x2=x7=x8;
+ x4=x5=appr+0.5rth; x3=x6=0.5[x1,x4];
+ y2=y4=max(y3-x1+x3,1/6[y1,y3]);
+ y5=y7=min(y6+x1-x3,1/6[y8,y6]);
+ filldraw stroke z1e..z2e; filldraw stroke z7e..z8e;
+ pickup rule.nib;
+ draw z2 up_to_left z3 left_to_down
+ z4..z5 down_to_right z6 right_to_up z7;
+ penlabels(1,2,7,8); labels(3,4,5,6);
+endchar;
+
+%
+% E
+%
+
+beginchar(there_exists,6.5u#+appr#+Appr#,cap_height#,0);
+ "Existential quantifier";
+ pickup tiny.nib;
+ pos1(rth,90); pos4(rth,-90); pos5(rth,90); pos6(rth,90);
+ y2l=y1l; y2r=y1r; y3l=y4l; y3r=y4r; top y1r=h; bot y4r=0;
+ top y5r=top y6r=vround 0.5(h+rth);
+ x2r-x2l=x3r-x3l=rth-tiny;
+ lft x1=lft x4=lft x5-hround 0.15u=appr;
+ rt x2r=rt x3r=w-Appr; x6=0.5[x2l,x2r]; filldraw stroke z5e..z6e;
+ filldraw stroke z1e--z2e--z3e--z4e; penlabels(1,2,3,4,5,6);
+endchar;
+
+beginchar(there_not_exists,6.5u#+appr#+Appr#,
+ min(body_height#,cap_height#+asc_depth#),asc_depth#);
+ "Not existential quantifier";
+ pickup tiny.nib;
+ pos1(rth,90); pos4(rth,-90); pos5(rth,90); pos6(rth,90);
+ y2l=y1l; y2r=y1r; y3l=y4l; y3r=y4r; top y1r=cap_height; bot y4r=0;
+ top y5r=top y6r=vround 0.5(cap_height+rth);
+ x2r-x2l=x3r-x3l=rth-tiny;
+ lft x1=lft x4=lft x5-hround 0.15u=appr;
+ rt x2r=rt x3r=w-Appr; x6=0.5[x2l,x2r]; filldraw stroke z5e..z6e;
+ filldraw stroke z1e--z2e--z3e--z4e;
+ lft x8l-appr=w-Appr-rt x7r=hround u;
+ bot y8l=-d-eps; y7r-y1r=y4r-y8l;
+ adjust_slanted_bar(8l,7r,8r,7l)(rth-tiny,-1);
+ filldraw stroke z7e..z8e; penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+%
+% F
+%
+
+beginchar(F_inverse,6.5u#+appr#+Appr#,cap_height#,0);
+ "F inverse";
+ pickup tiny.nib;
+ pos1(rth,0); pos3(rth,-90); pos4(rth,90); pos5(rth,90);
+ y2l=y3l; y2r=y3r; top y1=h; bot y3r=0;
+ top y4r=top y5r=vround 0.5(h+rth);
+ lft x3=lft x4-hround 0.15u=appr; rt x1r=w-Appr;
+ x1r=x2r; x1l=x2l; x5=x1; filldraw stroke z4e..z5e;
+ filldraw stroke z1e--z2e--z3e; penlabels(1,2,3,4,5);
+endchar;
+
+%
+% G
+%
+
+beginchar(G_inverse,11.2u#+2appr#,cap_height#,0);
+ "G inverse (game)";
+ pickup tiny.nib;
+ top y2r=h+o; bot y4r=-o; y3=y0=0.5[y2r,y4r];
+ top y7r=vround y3;
+ rt x3r=w-appr; rt x3r-lft x0r=hround 13u;
+ x2=x4=0.5[x0r,x3r]; lft x6r=appr; x6l-x6r=rth-tiny;
+ pos0(rth,180); pos2(rth,90); pos3(rth,0); pos4(rth,-90);
+ pos7(rth,90); rt x7=hround x2;
+ path tmp_path.r,tmp_path.l; numeric t[].r,t[].l;
+ forsuffixes $=r,l: y6$=y7$;
+ tmp_path.$=z0$ up_to_right z2$ right_to_down z3$
+ down_to_left z4$ left_to_up z0$;
+ t2$=xpart(tmp_path.$ intersectiontimes (z6$..(x6$,y4$)));
+ z5$=point t2$ of tmp_path.$;
+ endfor
+ t1r=xpart(tmp_path.r intersectiontimes (z6r..(x6r,y2r)));
+ z1r=point t1r of tmp_path.r; y1=y3;
+ z1-z1r=whatever*(direction t1r of tmp_path.r rotated -90);
+ t1l=xpart(tmp_path.l intersectiontimes (z1r..z1));
+ z1l=point t1l of tmp_path.l;
+ filldraw stroke subpath (t1e,t2e) of tmp_path.e--z6e--z7e;
+ penlabels(0,1,2,3,4,5,6,7);
+endchar;
+
+%
+% O
+%
+
+beginchar(empty_set,min(15.2u#,asc_height#+asc_depth#)+2appr#,
+ asc_height#,asc_depth#);
+ "The empty set";
+ pickup rule.nib;
+ a:=w-2appr;
+ lft x3=w-rt x1=appr+hround(a/16.5)-eps;
+ lft x5=appr; rt x6=w-appr;
+ y2=good.y(math_axis+x1-0.5w)+eps;
+ y6=good.y(math_axis+x6-0.5w);
+ 0.5[y2,y4]=0.5[y5,y6]=math_axis;
+ x2=x4=0.5[x1,x3]; y1=y3=0.5[y2,y4];
+ draw superellipse(z1,z2,z3,z4,1/sqrt 2);
+ draw z5..z6; labels(1,2,3,4,5,6);
+endchar;
+
+beginchar(diameter_sign,12u#+2appr#,fig_height#,0);
+ "Diameter sign";
+ pickup rule.nib;
+ top y2=top y6-o=h; bot y4=bot y5+o=-d;
+ lft x3=appr; rt x1=w-appr;
+ lft x5=appr+hround u; rt x6=w-appr-hround u;
+ x2=x4=0.5[x1,x3]; y1=y3=0.5[y2,y4];
+ draw superellipse(z1,z2,z3,z4,1/sqrt 2);
+ draw z5..z6; labels(1,2,3,4,5,6);
+endchar;
+
+%
+% T
+%
+
+beginchar(top_sign,11.2u#+2appr#,cap_height#,0);
+ "Top sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+ top y1=top y3r=top y4r=cap_height; bot y2=-o;
+ lft x1l=hround 0.5(w-rth);
+ x2=x1; lft x3=appr; x1-x3=x4-x1;
+ filldraw stroke z1e..z2e; % stem
+ filldraw stroke z3e..z4e; % crossbar
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(not_top_sign,11.2u#+2appr#,cap_height#,0);
+ "Not top sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+ top y1=top y3r=top y4r=cap_height; bot y2=-o;
+ lft x1l=hround 0.5(w-rth);
+ x2=x1; lft x3=appr; x1-x3=x4-x1;
+ filldraw stroke z1e..z2e; % stem
+ filldraw stroke z3e..z4e; % crossbar
+ lft x5r=lft x5l=appr; rt x6r=rt x6l=w-appr;
+ h-top y6r=bot y5l+d=hround 0.15(h+d)-eps;
+ numeric a,b; a=rth-tiny; b=abs(z6r-z5l);
+ y5r-y5l=y6r-y6l=a/(((x6r-x5l)/b)*((b+-+a)/b)+((y6r-y5l)/b)*(a/b));
+ filldraw stroke z5e..z6e;
+ penlabels(1,2,3,4,5,6);
+endchar;
+
+beginchar(bot_sign,11.2u#+2appr#,cap_height#,0);
+ "Bot sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+ bot y2=bot y3l=bot y4l=0; top y1=cap_height+o;
+ lft x1l=hround 0.5(w-rth); x2=x1;
+ lft x3=appr; x1-x3=x4-x1;
+ filldraw stroke z1e..z2e; % stem
+ filldraw stroke z3e..z4e; % crossbar
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(not_bot_sign,11.2u#+2appr#,cap_height#,0);
+ "Not bot sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90);
+ bot y2=bot y3l=bot y4l=0; top y1=cap_height+o;
+ lft x1l=hround 0.5(w-rth); x2=x1;
+ lft x3=appr; x1-x3=x4-x1;
+ filldraw stroke z1e..z2e; % stem
+ filldraw stroke z3e..z4e; % crossbar
+ lft x5r=lft x5l=appr; rt x6r=rt x6l=w-appr;
+ h-top y6r=bot y5l+d=hround 0.15(h+d)-eps;
+ numeric a,b; a=rth-tiny; b=abs(z6r-z5l);
+ y5r-y5l=y6r-y6l=a/(((x6r-x5l)/b)*((b+-+a)/b)+((y6r-y5l)/b)*(a/b));
+ filldraw stroke z5e..z6e;
+ penlabels(1,2,3,4,5,6);
+endchar;
+
+%
+% EPSILONS
+%
+
+% use_rule2;
+
+rth:=ceiling((1/3[rth1#,rth2#])*hppp);
+pickup pencircle scaled rth;
+math_axis:=good.x(math_axis#*hppp);
+
+beginchar(belong_to,7.5u#+2appr#,v_center(spread3#));
+ "Belong to";
+ pickup tiny.nib;
+ pos2(rth,90); pos6(rth,90); pos3(rth,90); pos4(rth,270);
+ y3=y6=math_axis;
+ y2-y3=y3-y4=vround(0.5spread3-0.5rth+0.5[oo,o])+eps;
+ top y1r=vround(y3+0.5spread3); y1r-y3=y3-y5r;
+ rt x1r=rt x5r+hround 0.6u=w-appr; x3=appr-ho+0.5rth;
+ x2r=0.5[x1r,x3]; x4=0.5[x5r,x3];
+ z1'-z1r=(z2r-z1r) xscaled 0.35; z5'-z5r=(z4r-z5r) xscaled 0.325;
+ pos1(rth,angle(z1'-z1r)-90); pos5(rth,angle(z5r-z5')-90);
+ x6=good.x x1l;
+ filldraw stroke z2e{right}...z1e{z1r-z1'};
+ filldraw stroke z5e{z5'-z5r}...z4e{left};
+ filldraw stroke z3e..z6e;
+ pickup pencircle scaled rth;
+ draw z2..controls 0.625[z2,(x3,y2)] and 0.65[z3,(x3,y2)]..
+ z3..controls 0.65[z3,(x3,y4)] and 0.625[z4,(x3,y4)]..z4;
+ penlabels(1,2,3,4,5,6,7,1',5');
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(not_belong_to,7.5u#+2appr#,asc_height#,asc_depth#);
+ "Not belong sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ lft x2l=w-rt x1r=appr+hround u;
+ top y1r=h+eps; 0.5[y1r,y2l]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(var_not_belong_to,7.5u#+2appr#,asc_height#,asc_depth#);
+ "Variant not belong sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0);
+ top y1l=h+eps; 0.5[y1l,y2l]=math_axis;
+ lft x1l=lft x2l=vround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(belong_to_bar,7.5u#+2appr#,
+ math_axis#+0.5spread3#+spread1#+0.5rth#,
+ 0.5spread3#-math_axis#);
+ "Variant not reverse belong sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); top y1r=top y2r=h;
+ lft x1l=appr; rt x2=w-appr;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(rev_belong_to,7.5u#+2appr#,v_center(spread3#));
+ "Reverse belong to";
+ pickup tiny.nib;
+ pos2(rth,-90); pos6(rth,90); pos3(rth,90); pos4(rth,90);
+ y3=y6=math_axis;
+ y3-y2=y4-y3=vround(0.5spread3-0.5rth+0.5[oo,o])+eps;
+ top y5r=vround(y3+0.5spread3); y1r-y3=y3-y5r;
+ lft x1r=lft x5r-hround 0.6u=appr; x3=w-appr+ho-0.5rth;
+ x2r=0.5[x1r,x3]; x4=0.5[x5r,x3];
+ z1'-z1r=(z2r-z1r) xscaled 0.35; z5'-z5r=(z4r-z5r) xscaled 0.325;
+ pos1(rth,angle(z1'-z1r)-90); pos5(rth,angle(z5r-z5')-90);
+ x6=good.x x1l;
+ filldraw stroke z2e{left}...z1e{z1r-z1'};
+ filldraw stroke z5e{z5'-z5r}...z4e{right};
+ filldraw stroke z6e..z3e;
+ pickup pencircle scaled rth;
+ draw z2..controls 0.625[z2,(x3,y2)] and 0.65[z3,(x3,y2)]..
+ z3..controls 0.65[z3,(x3,y4)] and 0.625[z4,(x3,y4)]..z4;
+ penlabels(1,2,3,4,5,6,7,1',5');
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(not_rev_belong_to,7.5u#+2appr#,asc_height#,asc_depth#);
+ "Not reverse belong sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pickup tiny.nib;
+ lft x2l=w-rt x1r=appr+hround u;
+ top y1r=h+eps; 0.5[y1r,y2l]=math_axis;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(var_not_rev_belong_to,7.5u#+2appr#,asc_height#,asc_depth#);
+ "Variant not reverse belong sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0);
+ top y1l=h; 0.5[y1l,y2l]=math_axis;
+ lft x1l=lft x2l=vround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(rev_belong_to_bar,7.5u#+2appr#,math_axis#+0.5spread3#,
+ 0.5spread3#+spread1#+0.5rth#-math_axis#);
+ "Variant not reverse belong sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90); bot y1l=bot y2l=-d;
+ lft x1l=appr; rt x2=w-appr;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+%
+% U
+%
+
+use_rule1;
+
+beginchar(cap_sign,12u#+2appr#,x_height#,0);
+ "Small cap sign";
+ pickup tiny.nib;
+ pos1(rth,180); pos2(rth,180);
+ pos4(rth,0); pos5(rth,0);
+ y3+0.5rth=h+o; bot y1r=bot y5r=-d; y2=y4=2/3[y3,y1r];
+ lft x1r=w-rt x5r=appr+hround 0.8u;
+ x1=x2; x4=x5; x3=0.5[x2,x4];
+ filldraw stroke z1e..z2e; filldraw stroke z4e..z5e;
+ pickup rule.nib; autorounded;
+ draw z2 down_to_right z3 right_to_up z4;
+ penlabels(1,2,3,4,5);
+endchar;
+
+beginchar(cup_sign,12u#+2appr#,x_height#,0);
+ "Small cup sign";
+ pickup tiny.nib;
+ pos1(rth,180); pos2(rth,180);
+ pos4(rth,0); pos5(rth,0);
+ y3-0.5rth=-d-o; top y1r=top y5r=h; y2=y4=2/3[y3,y1r];
+ lft x1r=w-rt x5r=appr+hround 0.8u;
+ x1=x2; x4=x5; x3=0.5[x2,x4];
+ filldraw stroke z5e..z4e; filldraw stroke z2e..z1e;
+ pickup rule.nib; autorounded;
+ draw z2 down_to_right z3 right_to_up z4;
+ penlabels(1,2,3,4,5);
+endchar;
+
+beginchar(cup_plus,12u#+2appr#,x_height#,0);
+ "Small cup-plus sign";
+ ensure_centering_of(rth);
+ %
+ pickup tiny.nib;
+ pos1(rth,180); pos2(rth,180); pos3(rth,-90);
+ pos4(rth,0); pos5(rth,0);
+ y3-0.5rth=-d-o; top y1r=top y5r=h; y2=y4=2/3[y3,y1r];
+ lft x1r=w-rt x5r=appr+hround 0.8u;
+ x1=x2; x4=x5; x3=0.5[x2,x4];
+ filldraw stroke z5e..z4e; filldraw stroke z2e..z1e;
+ %
+ pos6(rth,0); pos7(rth,0); pos8(rth,90); pos9(rth,90);
+ top y6=h; x6=x7=0.5w;
+ numeric a;
+ a=0.5(min(lft x5r-rt x1r-1.2u,h-rth-0.6u)-rth);
+ y6-y8r=y8l-y7=vround a; x6l-x8=x9-x6r=hround a; y8=y9;
+ filldraw stroke z6e..z7e; filldraw stroke z8e..z9e;
+ pickup rule.nib; autorounded;
+ draw z2 down_to_right z3 right_to_up z4;
+ penlabels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+beginchar(sqcap_sign,12u#+2appr#,x_height#,0);
+ "Small square cap sign";
+ pickup tiny.nib;
+ pos1(rth,180); pos4(rth,0);
+ top y2r=top y3r=h; bot y1=bot y4=-d;
+ top y2r-bot y2l=top y3r-bot y3l=rth;
+ lft x1r=w-rt x4r=appr+hround 0.95u;
+ x2r=x1r; x3r=x4r; x2l=x1l; x3l=x4l;
+ filldraw stroke z1e--z2e--z3e--z4e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(sqcup_sign,12u#+2appr#,x_height#,0);
+ "Small square cup sign";
+ pickup tiny.nib;
+ pos1(rth,180); pos4(rth,0);
+ bot y2r=bot y3r=-d; top y1=top y4=h;
+ top y2l-bot y2r=top y3l-bot y3r=rth;
+ lft x1r=w-rt x4r=appr+hround 0.95u;
+ x2r=x1r; x3r=x4r; x2l=x1l; x3l=x4l;
+ filldraw stroke z4e--z3e--z2e--z1e;
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(sqcup_plus,12u#+2appr#,x_height#,0);
+ "Small square cup-plus sign";
+ pickup tiny.nib;
+ ensure_centering_of(rth);
+ pos1(rth,180); pos4(rth,0);
+ bot y2r=bot y3r=-d; top y1=top y4=h;
+ top y2l-bot y2r=top y3l-bot y3r=rth;
+ lft x1r=w-rt x4r=appr+hround 0.95u;
+ x2r=x1r; x3r=x4r; x2l=x1l; x3l=x4l;
+ filldraw stroke z4e--z3e--z2e--z1e;
+ %
+ pos6(rth,0); pos7(rth,0); pos8(rth,90); pos9(rth,90);
+ top y6=h; x6=x7=0.5w;
+ numeric a;
+ a=0.5(min(lft x4l-rt x1l-1.2u,h-rth-0.6u)-rth);
+ y6-y8r=y8l-y7=vround a; x6l-x8=x9-x6r=hround a; y8=y9;
+ filldraw stroke z6e..z7e; filldraw stroke z8e..z9e;
+ penlabels(1,2,3,4,6,7,8,9);
+endchar;
+
+def tmp_program(expr stem,orientation,$)=
+ autorounded; pickup tiny.nib;
+ pos1(stem,0); pos2(stem,0);
+ pos4(stem,180); pos5(stem,180);
+ lft x1l=w-rt x5l=appr+hround $;
+ x1l=x2l; x4l=x5l; x3=0.5[x1,x5];
+ if orientation=up: pos3(stem,90);
+ top y1=top y5=h; bot y3l=-d-o;
+ y2=y4=min(0.25[y1,y3r],y3+0.5(x5-x1));
+ else: pos3(stem,-90);
+ bot y1=bot y5=-d; top y3l=h+o;
+ y2=y4=max(0.25[y1,y3r],y3-0.5(x5-x1));
+ fi
+ filldraw stroke z1e..z2e..controls (x2e,y3e) and (flatness[x3e,x2e],y3e)
+ ..z3e..controls (flatness[x3e,x4e],y3e) and (x4e,y3e)..z4e..z5e;
+ penlabels(1,2,3,4,5);
+enddef;
+
+beginchar(bold_cap,12u#+2appr#,x_height#,0);
+ "Bold cap";
+ tmp_program(stem,down,0.8u);
+endchar;
+
+beginchar(bold_cup,12u#+2appr#,x_height#,0);
+ "Bold cup";
+ tmp_program(stem,up,0.8u);
+endchar;
+
+%
+% V
+%
+
+beginchar(wedge_sign,12u#+2appr#,x_height#,0);
+ "Wedge sign";
+ pickup tiny.nib;
+ top y2r=x_height+o; bot y1r=0; y1r=y1l=y3r=y3l;
+ x2r=good.x 0.5w;
+ x3r-x2r=x2r-x1r=hround((y2r-y1r)/sqrt3);
+ x1l-x1r=diag_width(rth-tiny,z2r-z1r);
+ x3r-x3l=diag_width(rth-tiny,z2r-z3r);
+ z2l-z1l=whatever*(z2r-z1r); z2l-z3l=whatever*(z2r-z3r);
+ filldraw stroke z1e--z2e--z3e; penlabels(1,2,3);
+endchar;
+
+beginchar(vee_sign,12u#+2appr#,x_height#,0);
+ "Vee sign";
+ pickup tiny.nib;
+ bot y2r=-o; top y1r=x_height; y1r=y1l=y3r=y3l;
+ x2r=good.x 0.5w;
+ x3r-x2r=x2r-x1r=-hround((y2r-y1r)/sqrt3);
+ x1l-x1r=diag_width(rth-tiny,z2r-z1r);
+ x3r-x3l=diag_width(rth-tiny,z2r-z3r);
+ z2l-z1l=whatever*(z2r-z1r); z2l-z3l=whatever*(z2r-z3r);
+ filldraw stroke z3e--z2e--z1e; penlabels(1,2,3);
+endchar;
+
+beginchar(wedge_eq,12u#+2appr#,x_height#,0);
+ "Wedge-bar sign";
+ pickup tiny.nib;
+ top y2r=x_height; bot y1r=0; y1r=y1l=y3r=y3l;
+ x2r=good.x 0.5w;
+ x3r-x2r=x2r-x1r=hround((y2r-y1r+o)/sqrt3);% see wedge sign (+o)
+ x1l-x1r=diag_width(rth-tiny,z2r-z1r);
+ x3r-x3l=diag_width(rth-tiny,z2r-z3r);
+ z2l-z1l=whatever*(z2r-z1r); z2l-z3l=whatever*(z2r-z3r);
+ pos4(rth,90); pos5(rth,90); y4r=y5r=y2r;
+ lft x4=min(Appr,lft x1r); x5-x3r=x1r-x4;
+ filldraw stroke z1e--z2e--z3e; filldraw stroke z4e..z5e;
+ penlabels(1,2,3,4,5);
+endchar;
+
+beginchar(vee_eq,12u#+2appr#,x_height#,0);
+ "Vee-bar sign";
+ pickup tiny.nib;
+ bot y2r=0; top y1r=x_height; y1r=y1l=y3r=y3l;
+ x2r=good.x 0.5w;
+ x3r-x2r=x2r-x1r=-hround((y2r-y1r-o)/sqrt3);% see vee sign (-o)
+ x1l-x1r=diag_width(rth-tiny,z2r-z1r);
+ x3r-x3l=diag_width(rth-tiny,z2r-z3r);
+ z2l-z1l=whatever*(z2r-z1r); z2l-z3l=whatever*(z2r-z3r);
+ pos4(rth,-90); pos5(rth,-90); y4r=y5r=y2r;
+ rt x4=max(w-Appr,rt x1r); x5-x3r=x1r-x4;
+ filldraw stroke z3e--z2e--z1e; filldraw stroke z4e..z5e;
+ penlabels(1,2,3,4,5);
+endchar;
+
+beginchar(wedge_eqq,12u#+2appr#,asc_height#,0);% strange choice
+ "Wedge-equal sign";
+ pickup tiny.nib;
+ top y2r=x_height; bot y1r=0; y1r=y1l=y3r=y3l;
+ x2r=good.x 0.5w;
+ x3r-x2r=x2r-x1r=hround((y2r-y1r+o)/sqrt3);% see wedge sign (+o)
+ x1l-x1r=diag_width(rth-tiny,z2r-z1r);
+ x3r-x3l=diag_width(rth-tiny,z2r-z3r);
+ z2l-z1l=whatever*(z2r-z1r); z2l-z3l=whatever*(z2r-z3r);
+ pos4(rth,90); pos5(rth,90); pos6(rth,90); pos7(rth,90);
+ y4r=y5r=y2r; y6=y7=y4+spread1;
+ lft x4=min(Appr,lft x1r); x5-x3r=x1r-x4; x4=x6; x5=x7;
+ filldraw stroke z1e--z2e--z3e; filldraw stroke z4e..z5e;
+ filldraw stroke z6e..z7e; penlabels(1,2,3,4,5,6,7);
+endchar;
+
+beginchar(vee_eqq,12u#+2appr#,asc_height#,0);% strange choice
+ "Vee-equal sign";
+ pickup tiny.nib;
+ bot y2r=0+spread1; top y1r=x_height+spread1; y1r=y1l=y3r=y3l;
+ x2r=good.x 0.5w;
+ x3r-x2r=x2r-x1r=-hround((y2r-y1r-o)/sqrt3);% see vee sign (-o)
+ x1l-x1r=diag_width(rth-tiny,z2r-z1r);
+ x3r-x3l=diag_width(rth-tiny,z2r-z3r);
+ z2l-z1l=whatever*(z2r-z1r); z2l-z3l=whatever*(z2r-z3r);
+ pos4(rth,-90); pos5(rth,-90); pos6(rth,-90); pos7(rth,-90);
+ y4r=y5r=y2r; y6=y7=y4-spread1;
+ rt x4=max(w-Appr,rt x1r); x5-x3r=x1r-x4; x4=x6; x5=x7;
+ filldraw stroke z3e--z2e--z1e; filldraw stroke z4e..z5e;
+ filldraw stroke z6e..z7e; penlabels(1,2,3,4,5,6,7);
+endchar;
+
+beginchar(wedge_curly,12u#+2appr#,x_height#,0);
+ "Curly wedge sign";
+ pickup tiny.nib;
+ x2=hround 0.5(w-rth)+0.5rth;
+ top y2=h+o; pos2(rth,0); bot y1r=bot y3l=0;
+ lft x1r=hround min(appr+1.0u,lft x2l-((y2r-y1r)/sqrt3));
+ x3l-x2r=x2l-x1r; x1l=x1r; x3l=x3r;
+ x4=x2; pos4(rth,0); y4=0.625[y2,y1r];
+ y1l-y1r=y3r-y3l=(rth-tiny)/cosd angle(z4r-z1r);
+ filldraw stroke z2e{down}...z1e{z1r-z4r};
+ filldraw stroke z2e{down}...z3e{z3l-z4l};
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(vee_curly,12u#+2appr#,x_height#,0);
+ "Curly vee sign";
+ pickup tiny.nib;
+ x2=hround 0.5(w-rth)+0.5rth;
+ bot y2=-o; pos2(rth,0); top y1r=top y3l=h;
+ lft x1r=hround min(appr+1.0u,lft x2l+((y2r-y1r)/sqrt3));
+ x1l=x1r; x3l=x3r; x3l-x2r=x2l-x1r;
+ x4=x2; pos4(rth,0); y4=0.625[y2,y1r];
+ y1r-y1l=y3l-y3r=(rth-tiny)/cosd angle(z4r-z1r);
+ filldraw stroke z2e{up}...z1e{z1r-z4r};
+ filldraw stroke z2e{up}...z3e{z3l-z4l};
+ penlabels(1,2,3,4);
+endchar;
+
+beginchar(double_cap_sign,
+ 12u#+2appr#,cap_height#,0);% maybe too high
+ "Double cap sign";
+ pickup tiny.nib;
+ pos1(rth,180); pos2(rth,180);
+ pos4(rth,0); pos5(rth,0);
+ pos6(rth,180); pos7(rth,180);
+ pos9(rth,0); pos10(rth,0);
+ rt x1l=w-appr; lft x5l=appr;
+ numeric a; a=min(spread1,0.25(x1-x5));
+ x1=x2; x4=x5; x6=x7; x9=x10; x3=x8=0.5[x1,x5];
+ x1-x6=x10-x5=hround a;
+ bot y1=bot y5=-d-o; bot y6=bot y10=-d;
+ y3+0.5rth=h+o; y8-y3=-vround a;
+ y2=y4=y7=y9=1/3[y8,y6];
+ filldraw stroke z1e..z2e; filldraw stroke z4e..z5e;
+ filldraw stroke z6e..z7e; filldraw stroke z9e..z10e;
+ pickup rule.nib; autorounded;
+ draw z2 up_to_right z3 right_to_down z4;
+ draw z7 up_to_right z8 right_to_down z9;
+ penlabels(1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+beginchar(double_cup_sign,
+ 12u#+2appr#,cap_height#,0);% maybe too high
+ "Double cup sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0);
+ pos4(rth,180); pos5(rth,180);
+ pos6(rth,0); pos7(rth,0);
+ pos9(rth,180); pos10(rth,180);
+ rt x1r=w-appr; lft x5r=appr;
+ numeric a; a=min(spread1,0.25(x1-x5));
+ x1=x2; x4=x5; x6=x7; x9=x10; x3=x8=0.5[x1,x5];
+ x1-x6=x10-x5=hround a;
+ top y1=top y5=h+o; top y6=top y10=h;
+ y3-0.5rth=-d-o; y8-y3=vround a;
+ y2=y4=y7=y9=1/3[y8,y6];
+ filldraw stroke z1e..z2e; filldraw stroke z4e..z5e;
+ filldraw stroke z6e..z7e; filldraw stroke z9e..z10e;
+ pickup rule.nib; autorounded;
+ draw z2 down_to_right z3 right_to_up z4;
+ draw z7 down_to_right z8 right_to_up z9;
+ penlabels(1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+beginchar(double_sqcap_sign,
+ 12u#+2appr#,cap_height#,0);% maybe too high
+ "Double square cap sign";
+ pickup tiny.nib;
+ pos1(rth,180); pos3(rth,90); pos5(rth,0);
+ pos6(rth,180); pos8(rth,90); pos10(rth,0);
+ lft x1r=appr; rt x5r=w-appr;
+ numeric a; a=min(spread1,0.25(x5-x1));
+ x6-x1=x5-x10=hround a; x3=x8=0.5[x1,x5];
+ bot y1=bot y5=-d-o; bot y6=bot y10=-d;
+ top y3r=h; y8-y3=-vround a;
+ forsuffixes $=,r,l:
+ x1$=x2$; x4$=x5$; x6$=x7$; x9$=x10$;
+ y2$=y3$=y4$; y7$=y8$=y9$; endfor
+ filldraw stroke z1e--z2e--z4e--z5e;
+ filldraw stroke z6e--z7e--z9e--z10e;
+ penlabels(1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+beginchar(double_sqcup_sign,
+ 12u#+2appr#,cap_height#,0);% maybe too high
+ "Double square cup sign";
+ pickup tiny.nib;
+ pos1(rth,0); pos3(rth,90); pos5(rth,180);
+ pos6(rth,0); pos8(rth,90); pos10(rth,180);
+ lft x1l=appr; rt x5l=w-appr;
+ numeric a; a=min(spread1,0.25(x5-x1));
+ x6-x1=x5-x10=hround a; x3=x8=0.5[x1,x5];
+ top y1=top y5=h+o; top y6=top y10=h;
+ bot y3l=0; y8-y3=vround a;
+ forsuffixes $=,r,l:
+ x1$=x2$; x4$=x5$; x6$=x7$; x9$=x10$;
+ y2$=y3$=y4$; y7$=y8$=y9$; endfor
+ filldraw stroke z1e--z2e--z4e--z5e;
+ filldraw stroke z6e--z7e--z9e--z10e;
+ penlabels(1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathmbcb.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathmbcb.mf
new file mode 100644
index 00000000000..f08a8eba68e
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathmbcb.mf
@@ -0,0 +1,498 @@
+% mathematical symbols by Anthony Phan.
+% file: mathmbcb.mf (symbols medium or big in circles or boxes)
+% last modification: May 16, 2005.
+% Only known charcodes will be generated.
+
+def horizontal_rules_list=
+ 0.5[-d,h]-math_axis,0.5[-d,h]-math_axis+x_height,
+ 0.25[-d,h],0.5[-d,h],0.75[-d,h] enddef;
+
+extra_beginchar_save:=extra_beginchar;
+numeric display_over_text;
+
+% Beware: one can not execute conditionnal commands
+% thru the following construction. For instance,
+% on_size(use_rule1,use_rule2,use_rule3) would
+% lead to the use of rule3.
+
+def on_size(expr $,$$,$$$)=
+ if substring (0,1) of main_name_string="m": $
+ elseif substring (0,1) of main_name_string="b": $$
+ else: $$$ fi% "B" case or else
+enddef;
+
+if substring (0,1) of main_name_string="m":
+ let tmp_bounds=arithmetic_bounds;
+ def tmp_radius=6.75u enddef;
+ use_rule1;
+elseif substring (0,1) of main_name_string="b":
+ def tmp_bounds=10/6dh#+2appr#,0,10/6dh# enddef;
+ % def tmp_bounds=18u#+2appr#,0,10/6dh# enddef;
+ def tmp_radius=0.5(h+d) enddef;
+ use_rule2;
+else:% "B" case or else
+ def tmp_bounds= 1.20*10/6dh#+2appr#,
+ 0,1.20*10/6dh# enddef;
+ % def tmp_bounds= 25.2u#+2appr#,0,14/6dh# enddef;
+ def tmp_radius=0.5(h+d) enddef;
+ use_rule3;
+fi
+
+numeric tmp_dtsz;
+a:=on_size(max(0.82u,1.25u-rth1),1.33u,1.20*1.33u);
+tmp_dtsz=on_size(dtsz,1.2dtsz,1.20*1.2dtsz);
+tmp_string:=on_size("Medium ","Textstyle ","Displaystyle ")
+& substring (1,infinity) of main_name_string;
+extra_beginchar:=extra_beginchar & on_size("","","padded bigop_padding#;");
+
+% I know what anyone will think while reading this file:
+% ``this guy had totally messed up with boundaries''.
+% Believe me, I had not.
+
+% The next programs put a circle or a box exactly around the point
+% z0. So that z0 must be adjusted with respect to the pen
+% with which the circle will be drawn.
+
+if substring (1,infinity) of main_name_string="circle":
+ vardef tmp_program=
+ autorounded; pickup rule.nib;
+ x0=good.x 0.5w; y0=good.y 0.5[-d,h];
+ for i=1 upto 8:
+ z[i]=z0+round(tmp_radius-0.5rth)*right rotated(45*(i-1));
+ endfor; labels(0,1,2,3,4,5,6,7,8);
+ tmp_path:=z1{up}...z2{z3-z1}
+ ...z3{left}...z4{z5-z3}...z5{down}...z6{z7-z5}
+ ...z7{right}...z8{z1-z7}...cycle; draw tmp_path;
+ enddef;
+ def dot_spread=4*tmp_radius/(3*3.14159) enddef;
+ % average point of some half disc
+ def prepare_triangle(expr orientation)=
+ save b,c; pickup tiny.nib;
+ b=min(on_size(7u,12u,1.20*12u),
+ 2*sqrt(3)*(tmp_radius-rth-a));
+ c=on_size(rth0,rth1,rth2);
+ tmp_boolean:=true
+ enddef;
+else:
+ vardef tmp_program=
+ pickup rule.nib;
+ x0=good.x 0.5w; y0=good.y 0.5[-d,h];
+ pickup tiny.nib;
+ for i=1 step 2 until 7:
+ z[i]=z0+round(tmp_radius-0.5rth)*right rotated(45*(i-1));
+ endfor;
+ pos1(rth,0); pos5(rth,180);
+ pos3(rth,90); pos7(rth,-90);
+ forsuffixes $=,r,l:
+ x1$=x2$=x8$; x5$=x4$=x6$;
+ y2$=y3$=y4$; y6$=y7$=y8$;
+ endfor
+ penlabels(0,1,2,3,4,5,6,7,8);
+ filldraw stroke z8e--z6e--z4e--z2e--z8e;
+ tmp_path:=z1--z2--z3--z4--z5--z6--z7--z8--cycle;
+ pickup rule.nib;
+ enddef;
+ def dot_spread=0.5(y3-y0) enddef;
+ def prepare_triangle(expr orientation)=
+ save b,c; pickup tiny.nib;
+ b=min(on_size(7u,12u,1.20*12u),
+ 2*sqrt(3)*(tmp_radius-rth-a));
+ c=on_size(rth0,rth1,rth2);
+ tmp_boolean:=false;
+ save triangle_foot;
+ triangle_foot=
+ if (orientation=up)or(orientation=down): y0 else: x0 fi
+ if (orientation=up)or(orientation=right): - else: + fi
+ 0.5[1/3,1/2]*0.5b*sqrt 3
+ enddef;
+fi
+
+%
+% Let's go
+%
+
+beginchar(main_name_with(_plus),tmp_bounds);
+ tmp_string & " plus";
+ tmp_program;
+ pickup tiny.nib;
+ top y9=vround(y3-0.5rth-a); y3-y9=y10-y7; y11=y12=y0;
+ rt x12=hround(x1-0.5rth-a); x1-x12=x11-x5; x9=x10=x0;
+ pos9(rth,0); pos10(rth,0); pos11(rth,90); pos12(rth,90);
+ filldraw stroke z9e..z10e; filldraw stroke z11e..z12e;
+ penlabels(9,10,11,12);
+endchar;
+
+beginchar(main_name_with(_minus),tmp_bounds);
+ tmp_string & " minus";
+ tmp_program;
+ pickup tiny.nib;
+ rt x9=hround(x1-0.5rth-a);
+ x10-x5=x1-x9; y9=y10=y0; pos9(rth,90); pos10(rth,90);
+ filldraw stroke z10e..z9e; penlabels(9,10,11,12);
+endchar;
+
+beginchar(main_name_with(_times),tmp_bounds);
+ tmp_string & " times";
+ tmp_program;
+ pickup tiny.nib;
+ rt x0'=hround(x1-0.5rth-a); y0=y0';
+ z9-z0=z0-z10=(z0'-z0) rotated 45; z11-z0=z0-z12=(z0'-z0) rotated -45;
+ pos9(rth+2eps,-45); pos10(rth+2eps,-45);
+ pos11(rth+2eps,45); pos12(rth+2eps,45);
+ filldraw stroke z9e..z10e; filldraw stroke z12e..z11e;
+ penlabels(9,10,11,12);
+endchar;
+
+beginchar(main_name_with(_division),tmp_bounds);
+ tmp_string & " division";
+ tmp_program;
+ pickup tiny.nib;
+ rt x9=hround(x1-0.5rth-a); x10-x5=x1-x9;
+ y9=y10=y0; pos9(rth,90); pos10(rth,90);
+ filldraw stroke z10e..z9e; penlabels(9,10);
+ pickup null.nib;
+ adjust_dot11((x0,y0+dot_spread),tmp_dtsz,true,false); dot(11,11');
+ adjust_dot12((x0,y0-dot_spread),tmp_dtsz,true,false); dot(12,12');
+endchar;
+
+beginchar(main_name_with(_dot),tmp_bounds);
+ tmp_string & " dot";
+ tmp_program;
+ pickup null.nib;
+ adjust_dot9(z0,1.3tmp_dtsz,true,true); dot(9,9');
+endchar;
+
+beginchar(main_name_with(_circle),tmp_bounds);
+ tmp_string & " circle";
+ tmp_program;
+ numeric b;
+ b=min(max(on_size(7u,7u,1.20*7u),tmp_dtsz),tmp_radius-rth-a);
+ pickup rule.nib0; adjust_dot9((x0,y0),b,true,true);
+ full_dot:=false; dot(9,9');
+endchar;
+
+% the asterisk is the same in textstyle and displaystyle
+
+beginchar(main_name_with(_asterisk),tmp_bounds);
+ tmp_string & " asterisk";
+ tmp_program;
+ autorounded;
+ interim stress:=0.5;
+ pickup null.nib;
+ numeric b,c,dag_stem,dag_curve;
+ dag_curve=on_size(ast_curve,round 1.1cap_curve,round 1.1cap_curve);
+ dag_stem=on_size(ast_stem,hair,hair);
+ b=on_size(1.8ast_stem,2.6hair,2.6hair);
+ c=on_size(1.4dag_stem,0.625b,0.625b);
+ spread:=min(on_size(ast_size,12u,12u),2(tmp_radius-rth-a));
+ for $=9 upto 14: z[$]=b*dir(($-9)*60+30)+z0;
+ z[$]'=c*dir(($-9)*60+60)+z0; endfor
+ filldraw for $=9 upto 14: dagger_stroke[$](round(0.5spread-b)+eps,
+ dag_curve,dag_stem,dir(($-9)*60+30))...z[$]'...endfor cycle;
+endchar;
+
+% the asterisk is the same in textstyle and displaystyle
+
+beginchar(main_name_with(_co_asterisk),tmp_bounds);
+ tmp_string & " co-asterisk";
+ tmp_program;
+ autorounded;
+ interim stress:=0.5;
+ pickup null.nib;
+ numeric b,c,dag_stem,dag_curve;
+ dag_curve=on_size(ast_curve,round 1.1cap_curve,round 1.1cap_curve);
+ dag_stem=on_size(ast_stem,hair,hair);
+ b=1.8dag_stem; c=1.4dag_stem;
+ spread:=min(on_size(ast_size,12u,12u),2(tmp_radius-rth-a));
+ for $=9 upto 14: z[$]=b*dir(($-9)*60)+z0;
+ z[$]'=c*dir(($-9)*60+30)+z0; endfor
+ filldraw for $=9 upto 14: dagger_stroke[$](round(0.5spread-b)+eps,
+ dag_curve,dag_stem,dir(($-9)*60))...z[$]'...endfor cycle;
+endchar;
+
+beginchar(main_name_with(_left),tmp_bounds);
+ tmp_string & " left";
+ tmp_program;
+ draw z3..z7; draw z0..z5;
+endchar;
+
+beginchar(main_name_with(_right),tmp_bounds);
+ tmp_string & " right";
+ tmp_program;
+ draw z3..z7; draw z0..z1;
+endchar;
+
+beginchar(main_name_with(_top),tmp_bounds);
+ tmp_string & " top";
+ tmp_program;
+ draw z1..z5; draw z0..z7;
+endchar;
+
+beginchar(main_name_with(_bot),tmp_bounds);
+ tmp_string & " bot";
+ tmp_program;
+ draw z1..z5; draw z0..z3;
+endchar;
+
+beginchar(main_name_with(_slash),tmp_bounds);
+ tmp_string & " slash";
+ tmp_program;
+ draw z2..z6;
+endchar;
+
+beginchar(main_name_with(_backslash),tmp_bounds);
+ tmp_string & " backslash";
+ tmp_program;
+ draw z4..z8;
+endchar;
+
+beginchar(main_name_with(_sign),tmp_bounds);
+ tmp_string & " sign";
+ tmp_program;
+endchar;
+
+beginchar(main_name_with(_triangle_up),tmp_bounds);
+ tmp_string & " triangle up";
+ tmp_program;
+ begingroup save math_axis; math_axis=y0;
+ prepare_triangle(up);
+ set_triangle'(up,b,c,tmp_boolean,false);
+ filldraw stroke z1'e--z2'e--z3'e--z1'e;
+ endgroup;
+endchar;
+
+% UNSUPPORTED
+
+beginchar(main_name_with(_truc),tmp_bounds);
+ tmp_string & " truc";
+ tmp_program;
+ x9=x0; y9=good.y
+ if substring (1,infinity) of main_name_string="circle":
+ 0.632466 else: 2/3 fi [top y7,bot y3];
+ z10=tmp_path intersectionpoint (z9..(x5,y9));
+ z11=tmp_path intersectionpoint (z9..(x1,y9));
+ draw z7..z9; draw z10..z11; labels(9,10,11);
+endchar;
+
+% numerics are such that all the three parts
+% have almost the same area. (look at the circle's case)
+
+beginchar(main_name_with(_curt),tmp_bounds);
+ tmp_string & " curt";
+ tmp_program;
+ x9=x0; y9=good.y
+ if substring (1,infinity) of main_name_string="circle":
+ 0.632466 else: 2/3 fi [bot y3,top y7];
+ z10=tmp_path intersectionpoint (z9..(x5,y9));
+ z11=tmp_path intersectionpoint (z9..(x1,y9));
+ draw z3..z9; draw z10..z11; labels(9,10,11);
+endchar;
+
+% hummm, too big
+beginchar(main_name_with(_full_circle),tmp_bounds);
+ tmp_string & " full circle";
+ tmp_program;
+ numeric b;
+ b=min(max(on_size(7u-rth0,7u-rth0,1.20*7u-rth0),
+ tmp_dtsz),tmp_radius-rth-a);
+ pickup rule.nib0; adjust_dot9((x0,y0),b,true,true);
+ dot(9,9');
+endchar;
+
+% the star is the same in textstyle and displaystyle
+
+beginchar(main_name_with(_five_star),tmp_bounds);
+ tmp_string & " five star";
+ tmp_program;
+ pickup tiny.nib;
+ save b,tense;
+ b=on_size(3.5u+o,6u+o,6u+o);
+ tense=on_size(0.2,0.1,0.1);
+ draw_star.a(z0,5,b,tense,90,false);
+ labels(a);
+endchar;
+
+% the star is the same in textstyle and displaystyle
+
+beginchar(main_name_with(_six_star),tmp_bounds);
+ tmp_string & " six star";
+ tmp_program;
+ pickup tiny.nib;
+ save b,tense;
+ b=on_size(3.5u,6u+o,6u+o);
+ tense=on_size(0.4,0.3,0.3);
+ draw_star.a(z0,6,b,tense,90,false);
+ labels(a);
+endchar;
+
+beginchar(main_name_with(_triangle_down),tmp_bounds);
+ tmp_string & " triangle down";
+ tmp_program;
+ begingroup save math_axis; math_axis=y0;
+ prepare_triangle(down);
+ set_triangle'(down,b,c,tmp_boolean,false);
+ filldraw stroke z1'e--z2'e--z3'e--z1'e;
+ endgroup;
+endchar;
+
+beginchar(main_name_with(_triangle_left),tmp_bounds);
+ tmp_string & " triangle left";
+ tmp_program;
+ begingroup save math_axis; math_axis=y0;
+ prepare_triangle(left);
+ set_triangle'(left,b,c,tmp_boolean,false);
+ filldraw stroke z1'e--z2'e--z3'e--z1'e;
+ endgroup;
+endchar;
+
+beginchar(main_name_with(_triangle_right),tmp_bounds);
+ tmp_string & " triangle right";
+ tmp_program;
+ begingroup save math_axis; math_axis=y0;
+ prepare_triangle(right);
+ set_triangle'(right,b,c,tmp_boolean,false);
+ filldraw stroke z1'e--z2'e--z3'e--z1'e;
+ endgroup;
+endchar;
+
+beginchar(main_name_with(_top_dot_minus),tmp_bounds);
+ tmp_string & " top dot minus";
+ tmp_program; pickup tiny.nib;
+ rt x9=hround(x1-0.5rth-a); x10-x5=x1-x9;
+ y9=y10=y0; pos9(rth,90); pos10(rth,90);
+ filldraw stroke z10e..z9e; penlabels(9,10);
+ pickup null.nib;
+ adjust_dot11((x0,y0+dot_spread),tmp_dtsz,true,false); dot(11,11');
+endchar;
+
+beginchar(main_name_with(_bot_dot_minus),tmp_bounds);
+ tmp_string & " bot dot minus";
+ tmp_program;
+ pickup tiny.nib;
+ rt x9=hround(x1-0.5rth-a); x10-x5=x1-x9;
+ y9=y10=y0; pos9(rth,90); pos10(rth,90);
+ filldraw stroke z10e..z9e; penlabels(9,10);
+ pickup null.nib;
+ adjust_dot11((x0,y0-dot_spread),tmp_dtsz,true,false); dot(11,11');
+endchar;
+
+beginchar(main_name_with(_horiz),tmp_bounds);
+ tmp_string & " horizontal";
+ tmp_program;
+ draw z1..z5;
+endchar;
+
+beginchar(main_name_with(_vert),tmp_bounds);
+ tmp_string & " vertical";
+ tmp_program;
+ draw z3..z7;
+endchar;
+
+beginchar(main_name_with(_cross),tmp_bounds);
+ tmp_string & " cross";
+ tmp_program;
+ draw z1..z5; draw z3..z7;
+endchar;
+
+beginchar(main_name_with(_across),tmp_bounds);
+ tmp_string & " across";
+ tmp_program;
+ draw z2..z6; draw z4..z8;
+endchar;
+
+beginchar(main_name_with(_wedge),tmp_bounds);
+ tmp_string & " wedge";
+ tmp_program;
+ draw z8--z3--z6;
+endchar;
+
+beginchar(main_name_with(_vee),tmp_bounds);
+ tmp_string & " vee";
+ tmp_program;
+ draw z2--z7--z4;
+endchar;
+
+beginchar(main_name_with(_black_left),tmp_bounds);
+ tmp_string & " black left";
+ tmp_program;
+ fill subpath (2,6) of tmp_path--cycle;
+endchar;
+
+beginchar(main_name_with(_black_right),tmp_bounds);
+ tmp_string & " black right";
+ tmp_program;
+ fill subpath (6,8) of tmp_path
+ & subpath (0,2) of tmp_path--cycle;
+endchar;
+
+beginchar(main_name_with(_black_top),tmp_bounds);
+ tmp_string & " black top";
+ tmp_program;
+ fill subpath (0,4) of tmp_path--cycle;
+endchar;
+
+beginchar(main_name_with(_black_bot),tmp_bounds);
+ tmp_string & " black bot";
+ tmp_program;
+ fill subpath (4,8) of tmp_path--cycle;
+endchar;
+
+beginchar(main_name_with(_black_northwest),tmp_bounds);
+ tmp_string & " black north-west";
+ tmp_program;
+ fill subpath (1,5) of tmp_path--cycle;
+endchar;
+
+beginchar(main_name_with(_black_northeast),tmp_bounds);
+ tmp_string & " black north-east";
+ tmp_program;
+ fill subpath (7,8) of tmp_path
+ --subpath (0,3) of tmp_path--cycle;
+endchar;
+
+beginchar(main_name_with(_black_southwest),tmp_bounds);
+ tmp_string & " black south-west";
+ tmp_program;
+ fill subpath (3,7) of tmp_path--cycle;
+endchar;
+
+beginchar(main_name_with(_black_southeast),tmp_bounds);
+ tmp_string & " black south-east";
+ tmp_program;
+ fill subpath (5,8) of tmp_path
+ --subpath (0,1) of tmp_path--cycle;
+endchar;
+
+% There is no normalization for the next symbol as it seems...
+
+beginchar(main_name_with(_ying_yang),tmp_bounds);
+ tmp_string & " Ying-Yang";
+ tmp_program;
+ autorounded;
+ y9=bot y3; y10=0.5[y9,y0]; y11=0.5[y0,y12]; y12=top y7;
+ x0=x9=x12; x10=ceiling(x0+y0-y11); x10-x0=x0-x11;
+ pickup null.nib;
+ fill subpath (6,8) of tmp_path
+ -- subpath (0,2) of tmp_path
+ --z9 right_to_down z10 down_to_left
+ z0 left_to_down z11 down_to_right z12
+ --cycle;
+ adjust_dot13((x0,y10),tmp_dtsz,true,true);
+ adjust_dot14((x0,y11),tmp_dtsz,true,true);
+ dot(13,13'); unfill dot_path(14,14');
+ labels(9,10,11,12,14,14');
+endchar;
+
+beginchar(main_name_with(_peace_and_love),tmp_bounds);
+ tmp_string & " peace and love";
+ tmp_program;
+ z9=tmp_path intersectionpoint (z0..(z0+2(tmp_radius)*dir 210));
+ z10=tmp_path intersectionpoint (z0..(z0+2(tmp_radius)*dir 330));
+ draw z3..z7; draw z0..z9; draw z0..z10;
+ labels(9,10);
+endchar;
+
+% numerics are such that all the three parts
+% have almost the same area. (look at the circle's case)
+
+extra_beginchar:=extra_beginchar_save;
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathprmt.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathprmt.mf
new file mode 100644
index 00000000000..11f6d0929de
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathprmt.mf
@@ -0,0 +1,168 @@
+% Mathematical symbols by Anthony Phan.
+% file: matha10.mf (parameters' file for 10 points fonts)
+% last modification: May 16, 2005.
+
+% Look at rth.frac for fractions and such rule_thickness.
+
+if unknown mathbase: input mathbase fi
+
+numeric gen_; gen_=0;
+for $=12pt#,10pt#,9pt#,8pt#,7pt#,6pt#,5pt#:
+ if designsize<$: gen_:=gen_+1; fi
+endfor;
+
+vardef gen(expr unit)(text t)=
+ save a,b; a=0; for $=t:
+ if gen_>=a: b:=$; fi
+ a:=a+1; endfor; b*unit
+enddef;
+
+superness :=1/sqrt2;
+flatness :=0.0625;
+slant :=0.25;
+beak_darkness :=11/30;
+dh# :=0.6designsize;
+bigop_padding#:=1/12dh#;
+astro :=0;% 0 for san-serif, 1 for cm-like, in between...
+math_spread :=gen(1)(0,0.2,0.4,0.6,0.8,1);
+
+u# :=gen(1/36pt#)( 23.5, 20, 18.5, 17, 15.5, 14, 12.5);
+letter_fit# :=gen(1/36pt#)( 0, 0, 0, 0, 2, 3, 5);
+
+body_height# :=gen(1/36pt#)( 324, 270, 243, 216, 189, 162, 135);
+asc_height# :=gen(1/36pt#)( 300, 250, 225, 200, 175, 150, 125);
+cap_height# :=gen(1/36pt#)( 295.2, 246, 221.4, 196.8, 172.2, 147.6, 123);
+fig_height# :=gen(1/36pt#)( 278.4, 232, 208.8, 185.6, 162.4, 139.2, 116);
+x_height# :=gen(1/36pt#)( 186, 155, 139.5, 124, 108.5, 93, 77.5);
+math_axis# :=gen(1/36pt#)( 108, 90, 81, 72, 63, 54, 45);
+desc_depth# :=gen(1/36pt#)( 84, 70, 63, 56, 49, 42, 35);
+dtsz# :=gen(1/36pt#)( 42, 38, 35, 32, 29, 26, 22);
+ast_size# :=gen(1/36pt#)( 140, 140, 140, 140, 140, 140, 140);
+ast_curve# :=gen(1/36pt#)( 28, 28, 28, 28, 28, 28, 28);
+ast_stem# :=gen(1/36pt#)( 8, 8, 8, 8, 8, 8, 8);
+
+% Next parameters may affect daggers, asterisks, infinity,
+% integrals, sums, similarity relations.
+
+curve# :=gen(1/36pt#)( 33, 30, 28, 25.5, 23, 20.5, 18);
+stem# :=gen(1/36pt#)( 28, 25, 24, 22, 20, 18, 16);
+hair# :=gen(1/36pt#)( 9.5, 9, 9, 9, 8.5, 8, 7.5);
+vair# :=gen(1/36pt#)( 8.5, 8, 8, 8, 7, 7, 6);
+cap_curve# :=gen(1/36pt#)( 40, 37, 33, 30, 27, 24, 21);
+cap_stem# :=gen(1/36pt#)( 35, 32, 29, 26.5, 24, 21.5, 19);
+cap_hair# :=gen(1/36pt#)( 11.5, 11, 10, 9.5, 9, 8.5, 8);
+slab# :=gen(1/36pt#)( 12.5, 11, 10, 9.5, 9, 8.5, 8);
+stem_corr# :=gen(1/36pt#)( 1, 1, 1, 1, 0.9, 0.8, 0.7);
+vair_corr# :=gen(1/36pt#)( 1, 1, 1, 1, 0.9, 0.8, 0.7);
+o# :=gen(1/36pt#)( 9, 8, 7, 6, 5, 4.5, 4);
+ho# :=gen(1/36pt#)( 9, 8, 7, 6, 5, 4.5, 4);
+dish# :=gen(1/36pt#)( 1, 1, 1, 1, 0.9, 0.8, 0.7);
+
+% RULE THICKNESSES
+
+rth1# :=gen(1pt#)(0.44,0.4,0.38,0.36,0.34,0.31,0.28);
+rth0# := 3/4 rth1#;
+rth2# := 4.5/4 rth1#;
+rth3# := 5/4 rth1#;
+rth4# := 5.5/4 rth1#;
+
+rth.frac#:=0.3pt#;
+
+crisp# :=gen(1/36pt#)( 0, 0, 0, 0, 0, 0, 0);
+tiny# :=gen(1/36pt#)( 8, 8, 8, 8, 7, 6.5, 6);
+fine# :=gen(1/36pt#)( 7, 7, 7, 7, 6, 6, 5);
+
+% VARIOUS SPREADS
+
+% thin space between > and _
+spread0#:=math_spread[.21x_height#,.255x_height#];
+
+% equal sign
+spread1#:=math_spread[.35x_height#,.425x_height#];
+
+% subset like symbols
+spread2#:=math_spread[.87x_height#,1.01x_height#];
+
+% infinity, asterisk, belong_to...
+spread3#:=math_spread[x_height#,1.2x_height#];
+
+% greater etc.
+spread4#:=math_spread[17/16x_height#,9/8x_height#];
+
+%
+% FONT METRICS
+%
+% They are supposed to be the same as Computer Modern's ones.
+% Please check carefully if it's true.
+
+if font_identifier_="mathx":
+
+% CMEX's like
+
+ fontdimen8:
+ rth0#, % default_rule_thickness
+ gen(40/36pt#)(1.2,1,.9,.8,.7,.6,.5), % big_op_spacing1
+ gen(60/36pt#)(1.2,1,.9,.8,.7,.6,.5), % big_op_spacing2
+ gen(72/36pt#)(1.2,1,.9,.8,.7,.6,.5), % big_op_spacing3
+ gen(216/36pt#)(1.2,1,.9,.8,.7,.6,.5), % big_op_spacing4
+ gen(1/36pt#)(36,36,36,36,36,36,36); % big_op_spacing5
+
+else:
+
+% CMSY's like
+
+ subs:=gen(1)(8/12,7/10,6/9,6/8,5/7,5/6,5/5);
+
+ fontdimen8:
+
+% \fontdimen8 (num1)
+ math_axis#+3.51rth.frac#+gen(1/36pt#)(54,54,36,36,36,36,36)
+ +subs*desc_depth#,
+
+% \fontdimen9 (num2)
+ math_axis#+1.51rth.frac#+gen(1/36pt#)(30,30,30,24,12,9,3),
+
+% \fontdimen10 (num3)
+ math_axis#+1.51rth.frac#+gen(1/36pt#)(48,48,43,38,34,29,24),
+
+% \fontdimen11 (denom1)
+ -(math_axis#-3.51rth.frac#-subs*fig_height#
+ -gen(1/36pt#)(124,124,111,98,86,74,63)),
+
+% \fontdimen12 (denom2)
+ -(math_axis#-1.51rth.frac#-subs*fig_height#
+ -gen(1/36pt#)(30,30,30,24,12,9,3)),
+
+% \fontdimen13 (sup1)
+ gen(1pt#)(8.99,8.99,8.49,7.49,6.99,6.49,5.99)-subs*asc_height#,
+
+% \fontdimen14 (sup2)
+ gen(1pt#)(8.49,8.49,7.99,7.99,6.49,5.99,5.49)-subs*asc_height#,
+
+% \fontdimen15 (sup3)
+ gen(1/36pt#)(104,104,93,82,72,62,53),
+
+% \fontdimen16 (sub1)
+ gen(1/36pt#)(54,54,36,36,36,36,36),
+
+% \fontdimen17 (sub2)
+ if gen_<2: -(8.49pt#-2subs*asc_height#-3.1rth.frac#)
+ elseif gen_=2: -(7.99pt#-2subs*asc_height#-3.1rth.frac#)
+ else: gen(1/36pt#)(72,72,72,72,72,72,72) fi,
+
+% \fontdimen18 (sup_drop)
+ subs*asc_height#-36/36pt#,
+
+% \fontdimen19 (sub_drop)
+ 18/36pt#,
+
+% \fontdimen20 (delim1)
+ gen(1pt#)( 23.9, 23.9, 23.9, 11.9, 11.9, 11.9, 9.9),
+
+% \fontdimen21 (delim2)
+ gen(1pt#)( 10.1, 10.1, 9.1, 9.1, 8.1, 8.1, 7.1),
+
+% \fontdimen22 (axis)
+ math_axis#;
+
+fi
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathsmsy.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathsmsy.mf
new file mode 100644
index 00000000000..fbf04c4acc3
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathsmsy.mf
@@ -0,0 +1,237 @@
+% mathematical symbols by Anthony Phan.
+% file: mathsmsy.mf (various small 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,
+ 0.5[-d,h],math_axis
+enddef;
+
+% SMALL TRIANGLES
+
+beginchar(triangle_small_left,
+ 7u#+2appr#,v_center(7u#));
+ "Small triangle left";
+ pickup tiny.nib;
+ a:=7u;
+ set_triangle(left,a,rth0,true,false);
+ filldraw stroke z1e--z2e--z3e--z1e;
+endchar;
+
+beginchar(triangle_small_right,
+ 7u#+2appr#,v_center(7u#));
+ "Small triangle right";
+ pickup tiny.nib;
+ a:=7u;
+ set_triangle(right,a,rth0,true,false);
+ filldraw stroke z1e--z2e--z3e--z1e;
+endchar;
+
+beginchar(triangle_small_up,
+ 7u#+2appr#,v_center(7u#));
+ "Small triangle up";
+ pickup tiny.nib;
+ a:=7u;
+ set_triangle(up,a,rth0,true,false);
+ filldraw stroke z1e--z2e--z3e--z1e;
+endchar;
+
+beginchar(triangle_small_down,
+ 7u#+2appr#,v_center(7u#));
+ "Small triangle down";
+ pickup tiny.nib;
+ a:=7u;
+ set_triangle(down,a,rth0,true,false);
+ filldraw stroke z1e--z2e--z3e--z1e;
+endchar;
+
+% FULL SMALL TRIANGLES
+
+beginchar(triangle_small_full_left,
+ 7u#+2appr#,v_center(7u#));
+ "Small full triangle left";
+ pickup tiny.nib;
+ a:=7u-0.5rth0;
+ set_triangle(left,a,rth0,true,false);
+ filldraw z1r--z2r--z3r--cycle;
+endchar;
+
+beginchar(triangle_small_full_right,
+ 7u#+2appr#,v_center(7u#));
+ "Small full triangle right";
+ pickup tiny.nib;
+ a:=7u-0.5rth0;
+ set_triangle(right,a,rth0,true,false);
+ filldraw z1r--z2r--z3r--cycle;
+endchar;
+
+beginchar(triangle_small_full_up,
+ 7u#+2appr#,v_center(7u#));
+ "Small full triangle up";
+ pickup tiny.nib;
+ a:=7u-0.5rth0;
+ set_triangle(up,a,rth0,true,false);
+ filldraw z1r--z2r--z3r--cycle;
+endchar;
+
+beginchar(triangle_small_full_down,
+ 7u#+2appr#,v_center(7u#));
+ "Small full triangle down";
+ pickup tiny.nib;
+ a:=7u-0.5rth0;
+ set_triangle(down,a,rth0,true,false);
+ filldraw z1r--z2r--z3r--cycle;
+endchar;
+
+% MEDIUM TRIANGLES
+
+beginchar(triangle_med_left,
+ 12u#+2appr#,x_height#,0);
+ "Medium triangle left";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3;
+ set_triangle(left,a,rth1,true,false);
+ filldraw stroke z1e--z2e--z3e--z1e;
+endchar;
+
+beginchar(triangle_med_right,
+ 12u#+2appr#,x_height#,0);
+ "Medium triangle right";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3;
+ set_triangle(right,a,rth1,true,false);
+ filldraw stroke z1e--z2e--z3e--z1e;
+endchar;
+
+beginchar(triangle_med_up,
+ 12u#+2appr#,x_height#,0);
+ "Medium triangle up";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3; triangle_foot:=0;
+ set_triangle(up,a,rth1,false,false);
+ filldraw stroke z1e--z2e--z3e--z1e;
+endchar;
+
+beginchar(triangle_med_down,
+ 12u#+2appr#,x_height#,0);
+ "Medium triangle down";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3; triangle_foot:=h;
+ set_triangle(down,a,rth1,false,false);
+ filldraw stroke z1e--z2e--z3e--z1e;
+endchar;
+
+% MEDIUM FULL TRIANGLES
+
+beginchar(triangle_med_full_left,
+ 12u#+2appr#,x_height#,0);
+ "Medium full triangle left";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3;
+ set_triangle(left,a,rth1,true,false);
+ filldraw z1r--z2r--z3r--cycle;
+endchar;
+
+beginchar(triangle_med_full_right,
+ 12u#+2appr#,x_height#,0);
+ "Medium full triangle right";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3;
+ set_triangle(right,a,rth1,true,false);
+ filldraw z1r--z2r--z3r--cycle;
+endchar;
+
+beginchar(triangle_med_full_up,
+ 12u#+2appr#,x_height#,0);
+ "Medium full triangle up";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3; triangle_foot:=0;
+ set_triangle(up,a,rth1,false,false);
+ filldraw z1r--z2r--z3r--cycle;
+endchar;
+
+beginchar(triangle_med_full_down,
+ 12u#+2appr#,x_height#,0);
+ "Medium full triangle down";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3; triangle_foot:=h;
+ set_triangle(down,a,rth1,false,false);
+ filldraw z1r--z2r--z3r--cycle;
+endchar;
+
+% BIG TRIANGLES
+
+beginchar(triangle_big_left,
+ 13u#+2appr#,cap_height#,0);
+ "Big triangle left";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3;
+ set_triangle(left,a,rth1,true,false);
+ filldraw stroke z1e--z2e--z3e--z1e;
+endchar;
+
+beginchar(triangle_big_right,
+ 13u#+2appr#,cap_height#,0);
+ "Big triangle right";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3;
+ set_triangle(right,a,rth1,true,false);
+ filldraw stroke z1e--z2e--z3e--z1e;
+endchar;
+
+beginchar(triangle_big_up,
+ 13u#+2appr#,cap_height#,0);
+ "Big triangle up";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3; triangle_foot:=0;
+ set_triangle(up,a,rth1,false,false);
+ filldraw stroke z1e--z2e--z3e--z1e;
+endchar;
+
+beginchar(triangle_big_down,
+ 13u#+2appr#,cap_height#,0);
+ "Big triangle down";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3; triangle_foot:=h;
+ set_triangle(down,a,rth1,false,false);
+ filldraw stroke z1e--z2e--z3e--z1e;
+endchar;
+
+% BIG FULL TRIANGLES
+
+beginchar(triangle_big_full_left,
+ 13u#+2appr#,cap_height#,0);
+ "Big full triangle left";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3;
+ set_triangle(left,a,rth1,true,false);
+ filldraw z1r--z2r--z3r--cycle;
+endchar;
+
+beginchar(triangle_big_full_right,
+ 13u#+2appr#,cap_height#,0);
+ "Big full triangle right";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3;
+ set_triangle(right,a,rth1,true,false);
+ filldraw z1r--z2r--z3r--cycle;
+endchar;
+
+beginchar(triangle_big_full_up,
+ 13u#+2appr#,cap_height#,0);
+ "Big full triangle up";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3; triangle_foot:=0;
+ set_triangle(up,a,rth1,false,false);
+ filldraw z1r--z2r--z3r--cycle;
+endchar;
+
+beginchar(triangle_big_full_down,
+ 13u#+2appr#,cap_height#,0);
+ "Big full triangle down";
+ pickup tiny.nib;
+ a:=2(h+o)/sqrt 3; triangle_foot:=h;
+ set_triangle(down,a,rth1,false,false);
+ filldraw z1r--z2r--z3r--cycle;
+endchar; \ No newline at end of file
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathsubs.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathsubs.mf
new file mode 100644
index 00000000000..8d87cd7d380
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathsubs.mf
@@ -0,0 +1,257 @@
+% mathematical symbols by Anthony Phan.
+% file: mathsubs.mf (subset symbols)
+% last modification: May 16, 2005.
+% Only known charcodes will be generated.
+
+% Inclusion signs and related things (relations).
+% Some pictures overlap the bottom. It is necessary
+% for correct centering of the whole box.
+% Spreads for cross bars have been checked.
+
+def horizontal_rules_list=math_axis,
+ -body_depth,-desc_depth,x_height,cap_height,asc_height,body_height
+enddef;
+
+%turningcheck:=0;
+
+use_rule1;
+
+beginpicture(tmp,12u#+2appr#,v_center(spread2#+rth#));
+pickup tiny.nib;
+if main_name_string="subset":
+ pos1(rth,90); pos2(rth,90);
+ pos4(rth,270); pos5(rth,270);
+ y1-y5=spread2; 0.5[y1,y5]=y3=math_axis; y2=y1; y4=y5;
+ rt x1=rt x5=w-Appr; x3-0.5rth=appr; x2=x4=1/3[x3,x1];
+ filldraw stroke z5e..z4e; filldraw stroke z2e..z1e;
+ pickup rule.nib; autorounded;
+ draw z2 left_to_down z3 down_to_right z4;
+elseif main_name_string="supset":
+ pos1(rth,90); pos2(rth,90);
+ pos3(rth,0); pos4(rth,-90); pos 5(rth,-90);
+ y1-y5=spread2; 0.5[y1,y5]=y3=math_axis; y2=y1; y4=y5;
+ lft x1=lft x5=Appr; x3+0.5rth=w-appr; x2=x4=1/3[x3,x1];
+ filldraw stroke z1e..z2e; filldraw stroke z4e..z5e;
+ pickup rule.nib; autorounded;
+ draw z2 right_to_down z3 down_to_left z4;
+elseif main_name_string="sqsubset":
+ pos1(rth,90); pos4(rth,-90);
+ x2l-x2r=x3l-x3r=rth-tiny;
+ y1-y4=spread2; 0.5[y1,y4]=math_axis;
+ rt x1=rt x4=w-Appr; lft x2r=lft x3r=Appr;
+ forsuffixes $=r,l: y1$=y2$; y3$=y4$; endfor
+ filldraw stroke z4e--z3e--z2e--z1e;
+else:
+ pos1(rth,90); pos4(rth,-90);
+ x2r-x2l=x3r-x3l=rth-tiny;
+ y1-y4=spread2; 0.5[y1,y4]=math_axis;
+ lft x1=lft x4=Appr; rt x2r=rt x3r=w-Appr;
+ forsuffixes $=r,l: y1$=y2$; y3$=y4$; endfor
+ filldraw stroke z1e--z2e--z3e--z4e;
+fi
+endpicture;
+
+beginchar(main_name_with(),
+ 12u#+2appr#,v_center(spread2#+rth#));
+ main_name_string&" sign";
+ currentpicture:=tmp_picture;
+endchar;
+
+beginchar(main_name_with(_not),
+ 12u#+2appr#,asc_height#,asc_depth#);
+ "not "&main_name_string&" sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0);
+ v_adjust(1l,2l,math_axis,max(h+d,spread2+spread1));
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(main_name_with(_eq),
+ 12u#+2appr#,v_center(spread2#+rth#+spread1#));
+ main_name_string&" or equal sign";
+ currentpicture:=tmp_picture
+ shifted(0,0.5spread1);
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90);
+ y1=y2=math_axis-0.5(spread2+spread1);
+ lft x1=Appr; rt x2=w-Appr;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(main_name_with(_not_eq),
+ 12u#+2appr#,asc_height#,asc_depth#);
+ "not "&main_name_string&" nor equal sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0);
+ v_adjust(1l,2l,math_axis,max(h+d,spread2+2spread1));
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(main_name_with(_eq_not),
+ 12u#+2appr#,v_center(spread2#+rth#+spread1#));
+ main_name_string&" but not equal sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ y0=math_axis-0.5(spread2+spread1);
+ x0=0.5w;
+ v_adjust(1r,2l,y0,1.5spread1-0.5rth);
+ lft x2l-Appr=w-Appr-rt x1r=hround 3.5u;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(0,1,2);
+endchar;
+
+beginchar(main_name_with(_eq_varnot),
+ 12u#+2appr#,v_center(spread2#+rth#+spread1#));
+ "variant "&main_name_string&" but not equal sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ y0=math_axis-0.5spread2; x0=0.5w;
+ v_adjust(1r,2l,y0,2.5spread1-0.5rth);
+ lft x2l-Appr=w-Appr-rt x1r=hround 2.75u;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(0,1,2);
+endchar;
+
+beginchar(main_name_with(_eqq),
+ 12u#+2appr#,v_center(spread2#+rth#+2spread1#));
+ main_name_string&" or equal-equal sign";
+ currentpicture:=tmp_picture shifted(0,0.5spread1);
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90);
+ y1=y2=math_axis+spread1-0.5spread2-2spread1;
+ lft x1=Appr; rt x2=w-Appr;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(main_name_with(_not_eqq),
+ 12u#+2appr#,asc_height#,asc_depth#);
+ "not "&main_name_string&" nor equal-equal sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ pos1(rth,0); pos2(rth,0);
+ v_adjust(1l,2l,math_axis,max(h+d,spread2+3spread1));
+ lft x1l=lft x2l=hround 0.5(w-rth);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(main_name_with(_eqq_not),
+ 12u#+2appr#,v_center(spread2#+rth#+2spread1#));
+ main_name_string&" but not equal-equal sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ y0=math_axis-0.5(spread2+spread1);
+ x0=0.5w;
+ v_adjust(1r,2l,y0,2.5spread1-0.5rth);
+ lft x2l-Appr=w-Appr-rt x1r=hround 2.75u;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(0,1,2);
+endchar;
+
+beginchar(main_name_with(_eqq_varnot),
+ 12u#+2appr#,v_center(spread2#+rth#+2spread1#));
+ "variant "&main_name_string&" but not equal-equal sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ y0=math_axis-0.5(spread2); x0=0.5w;
+ v_adjust(1r,2l,y0,3.5spread1-0.5rth);
+ lft x2l-Appr=w-Appr-rt x1r=hround 2.25u;
+ adjust_slanted_bar(2l,1r,2r,1l)(rth-tiny,-1);
+ filldraw stroke z1e..z2e; penlabels(0,1,2);
+endchar;
+
+beginchar(main_name_with(_double),
+ arithmetic_bounds);
+ main_name_string&" double sign";
+ pickup tiny.nib;
+ numeric a; a=0.5min(spread2,0.5(h+d-rth));
+ if main_name_string="subset":
+ rt x1=rt x5=w-appr; rt x6=rt x10=w-Appr;
+ y1-y5=4vround a; y6-y10=2vround a;
+ y3=y8=0.5[y1,y5]=0.5[y6,y10]=math_axis;
+ y2=y1; y4=y5; y7=y6; y9=y10;
+ pos1(rth,90); pos2(rth,90);
+ pos3(rth,180); pos4(rth,270); pos5(rth,270);
+ pos6(rth,90); pos7(rth,90);
+ pos8(rth,180); pos9(rth,270); pos10(rth,270);
+ lft x3r=appr; x8-x3=hround a;
+ x2=x4=x7=x9=1/3[x8,x6];
+ filldraw stroke z5e..z4e left_to_up
+ z3e up_to_right z2e..z1e;
+ filldraw stroke z10e..z9e left_to_up
+ z8e up_to_right z7e..z6e;
+ penlabels(1,2,3,4,5,6,7,8,9,10);
+ elseif main_name_string="supset":
+ lft x1=lft x5=appr; lft x6=lft x10=Appr;
+ y1-y5=4vround a; y6-y10=2vround a;
+ y3=y8=0.5[y1,y5]=0.5[y6,y10]=math_axis;
+ y2=y1; y4=y5; y7=y6; y9=y10;
+ pos1(rth,90); pos2(rth,90);
+ pos3(rth,0); pos4(rth,270); pos5(rth,270);
+ pos6(rth,90); pos7(rth,90);
+ pos8(rth,0); pos9(rth,270); pos10(rth,270);
+ rt x3r=w-appr; x8-x3=-hround a;
+ x2=x4=x7=x9=1/3[x8,x6];
+ filldraw stroke z1e..z2e right_to_down
+ z3e down_to_left z4e..z5e;
+ filldraw stroke z6e..z7e right_to_down
+ z8e down_to_left z9e..z10e;
+ penlabels(1,2,3,4,5,6,7,8,9,10);
+ elseif main_name_string="sqsubset":
+ rt x1=rt x5=w-appr; rt x6=rt x10=w-Appr;
+ y1-y5=4vround a; y6-y10=2vround a;
+ y3=y8=0.5[y1,y5]=0.5[y6,y10]=math_axis;
+ lft x3r=Appr; x8-x3=hround a;
+ pos1(rth,90); pos3(rth,180); pos5(rth,270);
+ pos6(rth,90); pos8(rth,180); pos10(rth,270);
+ forsuffixes $=,r,l: x2$=x3$=x4$; y1$=y2$; y4$=y5$;
+ x7$=x8$=x9$; y6$=y7$; y9$=y10$; endfor
+ filldraw stroke z5e--z4e--z2e--z1e;
+ filldraw stroke z10e--z9e--z7e--z6e;
+ penlabels(1,2,3,4,5,6,7,8,9,10);
+ else:
+ lft x1=lft x5=appr; lft x6=lft x10=Appr;
+ y1-y5=4vround a; y6-y10=2vround a;
+ y3=y8=0.5[y1,y5]=0.5[y6,y10]=math_axis;
+ rt x3r=w-Appr; x8-x3=-hround a;
+ pos1(rth,90); pos3(rth,0); pos5(rth,270);
+ pos6(rth,90); pos8(rth,0); pos10(rth,270);
+ forsuffixes $=,r,l: x2$=x3$=x4$; y1$=y2$; y4$=y5$;
+ x7$=x8$=x9$; y6$=y7$; y9$=y10$; endfor
+ filldraw stroke z1e--z2e--z4e--z5e;
+ filldraw stroke z6e--z7e--z9e--z10e;
+ penlabels(1,2,3,4,5,6,7,8,9,10);
+ fi
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(main_name_with(_double_not),
+ 12u#+2appr#,asc_height#,asc_depth#);
+ "not "&main_name_string&" double sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ numeric a; a=
+ if (main_name_string="subset")
+ or (main_name_string="sqsubset"): - fi
+ 0.5min(spread2,0.5(h+d-rth));
+ pos1(rth,0); pos2(rth,0);
+ v_adjust(1l,2l,math_axis,max(h+d,12u+spread1));
+ lft x1l=lft x2l=hround 0.5(w-0.5rth-0.5a);
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(main_name_with(_dot),
+ 12u#+2appr#,v_center(spread2#+rth#));
+ main_name_string&" with dot sign";
+ currentpicture:=tmp_picture;
+ adjust_dot1((math_axis,
+ if (main_name_string="subset")
+ or (main_name_string="sqsubset"): w-appr-0.5dtsz
+ else: appr+0.5dtsz fi),dtsz,true,false);
+ dot(1,1');
+endchar;
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;
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathu10.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathu10.mf
new file mode 100644
index 00000000000..e671d499182
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathu10.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathu10.mf (math serie U at 10 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathu"; font_size 10pt#;
+font_coding_scheme "mathu";
+
+input mathprmt;
+input mathudrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathudrv.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathudrv.mf
new file mode 100644
index 00000000000..5915f015ed4
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathudrv.mf
@@ -0,0 +1,189 @@
+% mathematical symbols by Anthony Phan.
+% file: mathadrv.mf (driver file for matha serie,
+% U stands for Unsupported)
+% last modification: May 16, 2005.
+
+mode_setup;
+
+math_setup;
+
+% Activate to allow characters with undefined code.
+% (for proof mode compilation)
+% let iff=always_iff;
+% turningcheck:=0;
+% true_size:=true;
+
+% BINARY OPERATORS
+
+% mathsymb.mf
+
+% mathsmsy
+
+triangle_med_up:=hex"80";
+triangle_med_down:=hex"81";
+triangle_med_left:=hex"82";
+triangle_med_right:=hex"83";
+triangle_med_full_up:=hex"84";
+triangle_med_full_down:=hex"85";
+triangle_med_full_left:=hex"86";
+triangle_med_full_right:=hex"87";
+
+triangle_big_up:=hex"88";
+triangle_big_down:=hex"89";
+triangle_big_left:=hex"8A";
+triangle_big_right:=hex"8B";
+triangle_big_full_up:=hex"8C";
+triangle_big_full_down:=hex"8D";
+triangle_big_full_left:=hex"8E";
+triangle_big_full_right:=hex"8F";
+
+% RELATIONS
+
+% mathsymb.mf
+
+% mathsimi.mf
+
+% mathfine.mf
+
+% upper_asterisk:=hex"3A"; lower_asterisk:=hex"3B";
+% triple_asterisk:=hex"3C";
+
+% hex"30"...hex"35", numerals...
+
+% mathltlk.mf
+
+% LETTER LIKE SYMBOLS
+
+% mathltlk.mf
+
+Q_northwest:=hex"BC";
+Q_northeast:=hex"BD";
+Q_southwest:=hex"BE";
+Q_southeast:=hex"BF";
+
+backprime_sign :=hex"90";
+smile_small :=hex"91";
+frown_small :=hex"92";
+sim_sim_bar :=hex"93";
+sim_sim_not_bar :=hex"94";
+bar_sim :=hex"95";
+bar_sim_not :=hex"96"; sim_vert :=hex"97";
+sim_reverse :=hex"98";
+sim_reverse_bar :=hex"99";
+nuclear_sign :=hex"9A";
+Bourbaki_Z :=hex"9B";
+reverse_negation_sign:=hex"9C";
+greek_motive:=hex"9D";
+ghanean_motive:=hex"9E";
+smash_product_sign:=hex"9F";
+
+cap_dot :=hex"A0";
+cup_dot :=hex"A1";
+sqcap_dot :=hex"A2";
+sqcup_dot :=hex"A3";
+
+% DELIMITERS
+
+% parenthesis
+
+% TRIANGLES AS RELATIONS
+
+% ARROWS
+
+% let the show begin :
+
+input mathusym;
+%input mathgrey;
+input mathfine;
+input mathsmsy;
+
+main_name_string:="mcircle";% ``m'' stands for medium.
+t:=hex"C0";
+forsuffixes $=
+ _truc,_curt,_full_circle,_five_star,_six_star,
+ _triangle_down,_triangle_left,_triangle_right,
+ _top_dot_minus,_bot_dot_minus,_horiz,_vert,_cross,_across,
+ _wedge,_vee,
+ _black_left,_black_right,_black_top,_black_bot,
+ _black_northwest,_black_northeast,_black_southwest,_black_southeast,
+ _ying_yang,_peace_and_love:
+ main_name_with($):=t; t:=t+1; endfor;
+input mathmbcb;
+
+main_name_string:="mbox";% ``m'' stands for medium.
+t:=hex"E0";
+forsuffixes $=
+ _truc,_curt,_full_circle,_five_star,_six_star,
+ _triangle_down,_triangle_left,_triangle_right,
+ _top_dot_minus,_bot_dot_minus,_horiz,_vert,_cross,_across,
+ _wedge,_vee,
+ _black_left,_black_right,_black_top,_black_bot,
+ _black_northwest,_black_northeast,_black_southwest,_black_southeast,
+ _ying_yang,_peace_and_love:
+ main_name_with($):=t; t:=t+1; endfor;
+input mathmbcb;
+
+% parameters for TFM files.
+
+font_slant=0;
+font_x_height=x_height#;
+font_normal_stretch=3u#;
+font_normal_shrink=2u#;
+font_quad=18u#+4letter_fit#;
+font_extra_space=2u#;
+font_normal_space=6u#+2letter_fit#;
+
+end.
+
+main_name_string:="bcircle";% ``m'' stands for medium.
+t:=hex"80";
+forsuffixes $=
+ _truc,_curt,_full_circle,_five_star,_six_star,
+ _triangle_down,_triangle_left,_triangle_right,
+ _top_dot_minus,_bot_dot_minus,_horiz,_vert,_cross,_across,
+ _wedge,_vee,
+ _black_left,_black_right,_black_top,_black_bot,
+ _black_northwest,_black_northeast,_black_southwest,_black_southeast,
+ _ying_yang,_peace_and_love:
+ main_name_with($):=t; t:=t+1; endfor;
+%input mathmbcb;
+
+main_name_string:="Bcircle";% ``m'' stands for medium.
+t:=hex"C0";
+forsuffixes $=
+ _truc,_curt,_full_circle,_five_star,_six_star,
+ _triangle_down,_triangle_left,_triangle_right,
+ _top_dot_minus,_bot_dot_minus,_horiz,_vert,_cross,_across,
+ _wedge,_vee,
+ _black_left,_black_right,_black_top,_black_bot,
+ _black_northwest,_black_northeast,_black_southwest,_black_southeast,
+ _ying_yang,_peace_and_love:
+ main_name_with($):=t; t:=t+1; endfor;
+%input mathmbcb;
+
+
+main_name_string:="bbox";% ``m'' stands for medium.
+t:=hex"A0";
+forsuffixes $=
+ _truc,_curt,_full_circle,_five_star,_six_star,
+ _triangle_down,_triangle_left,_triangle_right,
+ _top_dot_minus,_bot_dot_minus,_horiz,_vert,_cross,_across,
+ _wedge,_vee,
+ _black_left,_black_right,_black_top,_black_bot,
+ _black_northwest,_black_northeast,_black_southwest,_black_southeast,
+ _ying_yang,_peace_and_love:
+ main_name_with($):=t; t:=t+1; endfor;
+%input mathmbcb;
+
+main_name_string:="Bbox";% ``m'' stands for medium.
+t:=hex"E0";
+forsuffixes $=
+ _truc,_curt,_full_circle,_five_star,_six_star,
+ _triangle_down,_triangle_left,_triangle_right,
+ _top_dot_minus,_bot_dot_minus,_horiz,_vert,_cross,_across,
+ _wedge,_vee,
+ _black_left,_black_right,_black_top,_black_bot,
+ _black_northwest,_black_northeast,_black_southwest,_black_southeast,
+ _ying_yang,_peace_and_love:
+ main_name_with($):=t; t:=t+1; endfor;
+%input mathmbcb;
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathusym.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathusym.mf
new file mode 100644
index 00000000000..5e6047c99d6
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathusym.mf
@@ -0,0 +1,516 @@
+% mathematical symbols by Anthony Phan.
+% file: mathusym.mf (various unsupported 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;
+
+vardef draw_polygon@#(expr center,n_edges,angle_init,sqrt_area)=
+ save a,b;
+ x@#=good.x xpart center; y@#=good.y ypart center;
+ a=sqrt_area/sqrt((n_edges*cosd(180/n_edges)*sind(180/n_edges)))
+ -0.5currentbreadth;
+ b=(rth-currentbreadth)/cosd(180/n_edges);
+ for $=1 upto n_edges:
+ z@#[$]r=z@#+round(a*dir(($-1)*360/n_edges+angle_init));
+ z@#[$]r-z@#[$]l=b*dir(($-1)*360/n_edges+angle_init);
+ penlabels(@#[$]);
+ endfor
+ filldraw stroke for $=1 upto n_edges: z@#[$]e--endfor z@#[1]e;
+enddef;
+
+use_rule1;
+
+% The square root of the total area has been calculated
+% so that circle would fit the bounding box.
+
+beginchar(hex"B0",arithmetic_bounds);
+ "Square a";
+ pickup tiny.nib;
+ draw_polygon.a((0.5w,math_axis),4,45,6u*sqrt 3.14159);
+ labels(a);
+endchar;
+
+beginchar(hex"B1",arithmetic_bounds);
+ "Pentagon a";
+ pickup tiny.nib;
+ draw_polygon.a((0.5w,math_axis),5,90,6u*sqrt 3.14159);
+ labels(a);
+endchar;
+
+beginchar(hex"B2",arithmetic_bounds);
+ "Hexagon a";
+ pickup tiny.nib;
+ draw_polygon.a((0.5w,math_axis),6,90,6u*sqrt 3.14159);
+ labels(a);
+endchar;
+
+beginchar(hex"B3",arithmetic_bounds);
+ "Octogon a";
+ pickup tiny.nib;
+ draw_polygon.a((0.5w,math_axis),8,22.5,6u*sqrt 3.14159);
+ labels(a);
+endchar;
+
+beginchar(hex"B4",arithmetic_bounds);
+ "Square b";
+ pickup tiny.nib;
+ draw_polygon.a((0.5w,math_axis),4,0,6u*sqrt 3.14159);
+ labels(a);
+endchar;
+
+beginchar(hex"B5",arithmetic_bounds);
+ "Pentagon b";
+ pickup tiny.nib;
+ draw_polygon.a((0.5w,math_axis),5,-90,6u*sqrt 3.14159);
+ labels(a);
+endchar;
+
+beginchar(hex"B6",arithmetic_bounds);
+ "Hexagon b";
+ pickup tiny.nib;
+ draw_polygon.a((0.5w,math_axis),6,0,6u*sqrt 3.14159);
+ labels(a);
+endchar;
+
+beginchar(hex"B7",arithmetic_bounds);
+ "Octogon b";
+ pickup tiny.nib;
+ draw_polygon.a((0.5w,math_axis),8,0,6u*sqrt 3.14159);
+ labels(a);
+endchar;
+
+use_rule0;
+
+beginchar(hex"B8",arithmetic_bounds);
+ "5-bright-star";
+ pickup tiny.nib;
+ draw_star.a((0.5w,math_axis),5,6u,0.05,90,true);
+ labels(a);
+endchar;
+
+beginchar(hex"B9",arithmetic_bounds);
+ "5-black-star";
+ pickup tiny.nib;
+ draw_star.a((0.5w,math_axis),5,6u,0.1,90,false);
+ labels(a);
+endchar;
+
+beginchar(hex"BA",arithmetic_bounds);
+ "6-bright-star";
+ pickup tiny.nib;
+ draw_star.a((0.5w,math_axis),6,6u,0.05,90,true);
+ labels(a);
+endchar;
+
+beginchar(hex"BB",arithmetic_bounds);
+ "6-black-star";
+ pickup tiny.nib;
+ draw_star.a((0.5w,math_axis),6,6u,0.2,90,false);
+ labels(a);
+endchar;
+
+use_rule1;
+
+% mathltlk.mf
+
+%
+% Q
+%
+
+beginchar(Q_northwest,13u#+2appr#,cap_height#,0);
+ "Q northwest";
+ autorounded; pickup rule.nib;
+ top y2=h+o; bot y4=-d-o; lft x3=appr; rt x1=w-appr;
+ x2=x4=0.5[x1,x3]; y1=y3=0.5[y2,y4];
+ tmp_path:=superellipse(z1,z2,z3,z4,1/sqrt 2);
+ draw tmp_path; pickup tiny.nib; top y5=h; lft x5=appr;
+ z5'=tmp_path intersectionpoint ((x2,y1)..z5);
+ (sqrt 2)*(z5-z5')=z5'-z6; a:=angle(z5-z6)-90; pos5(rth,a); pos6(rth,a);
+ filldraw stroke z5e..z6e;
+ labels(1,2,3,4); penlabels(5,6);
+endchar;
+
+beginchar(Q_northeast,13u#+2appr#,cap_height#,0);
+ "Q northeast";
+ autorounded; pickup rule.nib;
+ top y2=h+o; bot y4=-d-o; lft x3=appr; rt x1=w-appr;
+ x2=x4=0.5[x1,x3]; y1=y3=0.5[y2,y4];
+ tmp_path:=superellipse(z1,z2,z3,z4,1/sqrt 2);
+ draw tmp_path; pickup tiny.nib; top y5=h; rt x5=w-appr;
+ z5'=tmp_path intersectionpoint ((x2,y1)..z5);
+ (sqrt 2)*(z5-z5')=z5'-z6; a:=angle(z5-z6)-90; pos5(rth,a); pos6(rth,a);
+ filldraw stroke z5e..z6e;
+ labels(1,2,3,4); penlabels(5,6);
+endchar;
+
+beginchar(Q_southwest,13u#+2appr#,cap_height#,0);
+ "Q southwest";
+ autorounded; pickup rule.nib;
+ top y2=h+o; bot y4=-d-o; lft x3=appr; rt x1=w-appr;
+ x2=x4=0.5[x1,x3]; y1=y3=0.5[y2,y4];
+ tmp_path:=superellipse(z1,z2,z3,z4,1/sqrt 2);
+ draw tmp_path; pickup tiny.nib; bot y5=-d; lft x5=appr;
+ z5'=tmp_path intersectionpoint ((x2,y1)..z5);
+ (sqrt 2)*(z5-z5')=z5'-z6; a:=angle(z5-z6)-90; pos5(rth,a); pos6(rth,a);
+ filldraw stroke z5e..z6e;
+ labels(1,2,3,4); penlabels(5,6);
+endchar;
+
+beginchar(Q_southeast,13u#+2appr#,cap_height#,0);
+ "Q southeast";
+ autorounded; pickup rule.nib;
+ top y2=h+o; bot y4=-d-o; lft x3=appr; rt x1=w-appr;
+ x2=x4=0.5[x1,x3]; y1=y3=0.5[y2,y4];
+ tmp_path:=superellipse(z1,z2,z3,z4,1/sqrt 2);
+ draw tmp_path; pickup tiny.nib; bot y5=-d; rt x5=w-appr;
+ z5'=tmp_path intersectionpoint ((x2,y1)..z5);
+ (sqrt 2)*(z5-z5')=z5'-z6; a:=angle(z5-z6)-90; pos5(rth,a); pos6(rth,a);
+ filldraw stroke z5e..z6e;
+ labels(1,2,3,4); penlabels(5,6);
+endchar;
+
+%
+% Z
+%
+
+vardef tmp_program(expr stem,radius,
+ up_adjustment,bot_adjustment)=
+ pickup tiny.nib; save R,a,c,s;
+ pos1(stem,90); pos2(stem,90); pos3(stem,0);
+ pos6(stem,0); pos7(stem,90); pos8(stem,90);
+ bot y1l=bot y2l=y0-radius=y3-radius=-d;
+ top y7r=top y8r=y0'+radius=y6+radius=h;
+ rt x1+hround bot_adjustment=rt x6r=w-appr;
+ x0'=x7=w-appr-radius;
+ lft x3l=lft x8-hround up_adjustment=appr;
+ x0=x2=appr+radius;
+ a=0.5length(z0'-z0); R=radius-0.5stem;
+ c=0.5((R/a)*(abs(x0'-x0)/a)-(abs(y0'-y0)/a)*((a+-+R)/a));
+ s=1+-+c; z5-z0'=-R*(c,s); z4-z0=R*(c,s);
+ pos4(stem,angle(-c,-s)); pos5(stem,angle(-c,-s));
+ filldraw stroke z1e..z2e left_to_up z3e...z4e
+ ---z5e...z6e up_to_left z7e..z8e;
+ penlabels(1,2,3,4,5,6,7,8); labels(0,0');
+enddef;
+
+beginchar(Bourbaki_Z,12u#+2appr#,cap_height#,0);
+ "Bourbaki's Z";
+ tmp_program(cap_stem,1.6cap_stem,1.2*0.6u,1.2*0.3u);
+endchar;
+
+beginchar(bBourbaki_Z,16u#+2appr#,0,10/6dh#);
+ "Bourbaki's Z";
+ tmp_program(round 1.2cap_curve,1.6*1.2cap_curve,1.6*0.6u,1.6*0.3u);
+endchar;
+
+beginchar(BBourbaki_Z,22u#+2appr#,0,14/6dh#);
+ "Bourbaki's Z";
+ tmp_program(round 1.4cap_curve,1.6*1.4cap_curve,2.2*0.6u,2.2*0.3u);
+endchar;
+
+% mathsymb.mf
+
+beginchar(nuclear_sign,arithmetic_bounds);
+ "Nuclear sign";
+ a:=0.13; t:=1.6;
+ autorounded;
+ pickup null.nib;
+ adjust_dot1((0.5w,0.5[-d,h]),dtsz,true,true);
+ dot(1,1');
+ pickup rule.nib0;
+ top y7=top y4=h; bot y2=bot y9=-d;
+ lft x5=lft x8=appr; rt x6=rt x3=w-appr;
+ y5=y6=a[y2,y4]; y3=y8=a[y4,y2];
+ x2=x7=a[x5,x6]; x4=x9=a[x6,x5];
+ draw z2{right}..tension atleast t..z3{up}...z4{left}
+ ..tension atleast t..z5{down}...cycle;
+ draw z6{up}..tension atleast t..z7{left}...z8{down}
+ ..tension atleast t..z9{right}...cycle;
+ labels(2,3,4,5,4,5,6,7,8,9);
+endchar;
+
+% SMILES AND FROWNS
+
+use_rule1;
+
+beginchar(smile_small,12u#+2appr#,v_center(spread1#+rth#));
+ "Small smile sign";
+ pickup tiny.nib;
+ pos2(rth,90);
+ y2=math_axis-0.5spread1; y1l=y3l=y2l+spread1;
+ 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(rth,angle(z1'-z1l)+90);
+ pos3(rth,angle(z3'-z3l)-90);
+ filldraw stroke z1e{z1'-z1l}...z2e{right}...z3e{z3l-z3'};
+ penlabels(1,2,3); labels(1',3');
+endchar;
+
+beginchar(frown_small,12u#+2appr#,v_center(spread1#+rth#));
+ "Small frown sign";
+ pickup tiny.nib;
+ pos2(rth,90);
+ y2=math_axis+0.5spread1; y1r=y3r=y2r-spread1;
+ 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(rth,angle(z1'-z1r)+90);
+ pos3(rth,angle(z3'-z3r)-90);
+ filldraw stroke z1e{z1'-z1r}...z2e{right}...z3e{z3r-z3'};
+ penlabels(1,2,3); labels(1',3');
+endchar;
+
+make_sim_picture;
+
+beginchar(sim_sim_bar,12u#+2appr#,v_center(3spread1#+2rth#));
+ "Similarity-similarity-bar sign";
+ currentpicture:=(sim_picture shifted(0,spread1+rth))+
+ sim_picture;% shifted(0,-0.5(spread1+rth));
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90);
+ lft x1=Appr; rt x2=w-Appr; y1=y2=math_axis-1.5spread1;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(sim_sim_not_bar,12u#+2appr#,asc_height#,asc_depth#);
+ "Not similarity-similarity_bar sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ lft x2l-appr=w-appr-rt x1r=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 z2e..z1e; penlabels(1,2);
+endchar;
+
+beginchar(bar_sim,12u#+2appr#,v_center(2spread1#+rth#));
+ "Bar-similarity sign";
+ currentpicture:=sim_picture shifted(0,-vround 0.5spread1);
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90);
+ lft x1=Appr; rt x2=w-Appr; y1=y2=math_axis+spread1;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+ tmp_picture:=currentpicture;
+endchar;
+
+beginchar(bar_sim_not,arithmetic_bounds);
+ "Not bar-similarity sign";
+ currentpicture:=tmp_picture;
+ pickup tiny.nib;
+ lft x2l-Appr=w-Appr-rt x1r=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(sim_vert,arithmetic_bounds);
+ "Sim-vert sign";
+ currentpicture:=sim_picture rotatedaround((0.5w,math_axis),90);
+endchar;
+
+beginchar(sim_reverse,12u#+2appr#,v_center(spread1#+rth#));
+ "Sim-reverse sign";
+ currentpicture:=sim_picture reflectedabout((0.5w,0),(0.5w,h));
+endchar;
+
+beginchar(sim_reverse_bar,12u#+2appr#,v_center(2spread1#+rth#));
+ "Sim-reverse-bar sign";
+ currentpicture:=sim_picture reflectedabout((0.5w,0),(0.5w,h))
+ shifted(0,vround 0.5spread1);
+ pickup tiny.nib;
+ pos1(rth,90); pos2(rth,90);
+ lft x1=Appr; rt x2=w-Appr; y1=y2=math_axis-spread1;
+ filldraw stroke z1e..z2e; penlabels(1,2);
+endchar;
+
+beginchar(reverse_negation_sign,12u#+2appr#,v_center(spread1#+rth#));
+ "Reverse negation sign";
+ pickup tiny.nib;
+ pos1(rth,-90); pos3(rth,0);
+ y2r=y1r; y2l=y1l; x2l=x3l; x2r=x3r;
+ y1=math_axis+0.5spread1; y1r-y3=spread1;
+ rt x1=w-Appr; lft x3l=Appr;
+ filldraw stroke z1e--z2e--z3e;
+ penlabels(1,2,3);
+endchar;
+
+beginchar(smash_product_sign,arithmetic_bounds);
+ "Smash product sign";
+ pickup tiny.nib;
+ top y1r=top y5l=h+eps; bot y4l=bot y8r=-d-eps;
+ lft x3l=lft x6l=appr-eps; rt x2r=rt x7r=w-appr+eps;
+ y1r-y3l=y5r-y7l=y6l-y8r=y2r-y4l=vround((spread1+rth-tiny)/sqrt 2);
+ x1r-x3l=x7r-x5l=x8r-x6l=x2r-x4l=hround((spread1+rth-tiny)/sqrt 2);
+ pos1(rth,45); pos2(rth,45); pos3(rth,45); pos4(rth,45);
+ pos5(rth,-45); pos6(rth,-45); pos7(rth,-45); pos8(rth,-45);
+ 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;
+
+% The next design is taken from my favorite pen:
+% a Omas' Paragon.
+
+beginchar(greek_motive,24u#,body_height#,0);
+ "Decorative greek motive";
+ numeric a,b; a=2max(hround 0.5rth1,1);
+ b=a*(1++slant);
+ pickup pencircle scaled a;
+ if 0.5w<>good.x 0.5w: change_width; fi
+ x21=x22=good.x 0.5w;
+ x1=x3=x5l=x6l=-1; x2=x4=x20l=x19l=w+1;
+ x7=x8=good.x 0.75[x1,x21]; x17=x18=x21+(x21-x7);
+ x9=x10=good.x 0.5[x1,x21]; x15=x16=x21+(x21-x9);
+ x11=x12=good.x 0.25[x1,x21]; x13=x14=x21+(x21-x11);
+ y1r=y2r=h; y3l=y4l=-d; penpos1(a,90);
+ penpos2(a,90); penpos3(a,90); penpos4(a,90);
+ penpos5(0.5b+1,0); penpos20(0.5b+1,180);
+ penpos21(b,0); penpos22(b,0);
+ y6=y7=y18=y19=good.y 0.2[y3,y1]; y22=bot y6;
+ y12=y21=y13=good.y 0.8[y3,y1]; y5=y20=top y12;
+ y10=y11=y14=y15=good.y 0.3[y6,y12];
+ y8=y9=y16=y17=good.y 0.7[y6,y12];
+ forsuffixes $=6,7,12,13,18,19:
+ y$r-y$l=a; z$=0.5[z$r,z$l]; endfor
+ forsuffixes $=8,9,10,11,14,15,16,17:
+ y$l-y$r=a; z$=0.5[z$r,z$l]; endfor
+ forsuffixes $=9,10,13,14,17,18:
+ x$r-x$l=b; endfor
+ x6r-x6l=x19l-x19r=0.5b+1;
+ forsuffixes $=7,8,11,12,15,16:
+ x$l-x$r=b; endfor
+ penstroke z1e..z2e; penstroke z3e..z4e; penstroke z21e..z22e;
+ penstroke z5e--z6e--z7e--z8e--z9e--z10e--z11e--
+ z12e--z13e--z14e--z15e--z16e--z17e--z18e--z19e--z20e;
+ penlabels(range 1 thru 22);
+endchar;
+
+% The next motive appears in ITC's Kokoa font.
+% The designer (Jochen Schuss) has been inspired by
+% a trip in Ghana. It is therefore possible that
+% this design is not copyright since it may be
+% a traditionnal one.
+
+beginchar(ghanean_motive,14u#,body_height#,body_depth#);
+ "Decorative ghanean motive";
+ numeric a; a=2max(hround 0.5rth1,1);
+ pickup pencircle scaled a;
+ if 0.5w<>good.x 0.5w: change_width; fi
+ numeric b; b=vround((h+d)/7);
+ x2=x3=x8l=x15l=x21l=0.5w;
+ x1r=x5r=x12r=x19l=x20l=0;
+ x4r=x11r=x18r=x23l=x22l=w;
+ y1r=y4r=h;
+ y1r-y5r=y5r-y12r=y12r-y19l=b;
+ y4r-y11r=y11r-y18r=y18r-y23l=b;
+ y3-y8l=y8l-y15l=y15l-y21l=b;
+ y1r-y2=y2-y3=y19l-y20l=y23l-y22l=2b;
+ x6=x7=good.x 2/3[x1r,x2]; x9=x10=x2+(x2-x6);
+ x13=x14=good.x 1/3[x1r,x2]; x16=x17=x2+(x2-x13);
+ forsuffixes $=2,3,6,7,13,14:
+ x$r-x$l=a; x$=0.5[x$r,x$l];
+ endfor
+ forsuffixes $=10,9,17,16:
+ x$r-x$l=-a; x$=0.5[x$r,x$l];
+ endfor
+ numeric b,c;
+ b=a/abs cosd angle(z2-z1r);
+ c=a/abs cosd angle(z2-z4r);
+ penpos1(b,90); penpos5(b,90); penpos12(b,90);
+ penpos4(c,90); penpos11(c,90); penpos18(c,90);
+ x19r-x19l=x20r-x20l=x23l-x23r=x22l-x22r=0.5a;
+%
+ z21r-(z21l+z1r-z1l)=whatever*(z2-z1r);
+ z21r-(z21l+z4r-z4l)=whatever*(z2-z4r);
+ z8r-z8l=z15r-z15l=z21r-z21l;
+%
+ z2l-z1l=whatever*(z2-z1r); z3-z3l=whatever*(z2-z1r);
+ z6r-z5r=whatever*(z2-z1r); z6l-z5l=whatever*(z2-z1r);
+ z8r-z7r=whatever*(z2-z1r); z8l-z7l=whatever*(z2-z1r);
+ z13r-z12r=whatever*(z2-z1r); z13l-z12l=whatever*(z2-z1r);
+ z15r-z14r=whatever*(z2-z1r); z15l-z14l=whatever*(z2-z1r);
+ z19r-z19l=whatever*(z2-z1r);
+ z21r-z20r=whatever*(z2-z1r);% z21l-z20l=whatever*(z2-z1r);
+%
+ z2r-z4l=whatever*(z2-z4r); z3-z3r=whatever*(z2-z4r);
+ z10r-z11r=whatever*(z2-z4r); z10l-z11l=whatever*(z2-z4r);
+ z8r-z9r=whatever*(z2-z4r); z8l-z9l=whatever*(z2-z4r);
+ z17r-z18r=whatever*(z2-z4r); z17l-z18l=whatever*(z2-z4r);
+ z15r-z16r=whatever*(z2-z4r); z15l-z16l=whatever*(z2-z4r);
+ z23r-z23l=whatever*(z2-z4r);
+ z21r-z22r=whatever*(z2-z4r);% z21l-z22l=whatever*(z2-z4r);
+%
+ fill z1r--z2--z4r--z4l--z2r--z3r--z3--z3l--z2l--z1l--cycle;
+ penstroke z5e--z6e--z7e--z8e--z9e--z10e--z11e;
+ penstroke z12e--z13e--z14e--z15e--z16e--z17e--z18e;
+ penstroke z19e--z20e--z21e--z22e--z23e;
+ penlabels(range 1 thru 23);
+endchar;
+
+%
+% doted symbols
+%
+
+beginchar(cap_dot,12u#+2appr#,x_height#,0);
+ "Small cap with dot sign";
+ pickup tiny.nib;
+ pos1(rth,180); pos2(rth,180);
+ pos4(rth,0); pos5(rth,0);
+ y3+0.5rth=h+o; bot y1r=bot y5r=-d; y2=y4=2/3[y3,y1r];
+ lft x1r=w-rt x5r=appr+hround 0.8u;
+ x1=x2; x4=x5; x3=0.5[x2,x4];
+ filldraw stroke z1e..z2e; filldraw stroke z4e..z5e;
+ pickup rule.nib; autorounded;
+ draw z2 up_to_right z3 right_to_down z4;
+ penlabels(1,2,3,4,5);
+ adjust_dot6((0.5w,h-math_axis),dtsz,false,true);
+ dot(6,6');
+endchar;
+
+beginchar(cup_dot,12u#+2appr#,x_height#,0);
+ "Small cup with dot sign";
+ pickup tiny.nib;
+ pos1(rth,180); pos2(rth,180);
+ pos4(rth,0); pos5(rth,0);
+ y3-0.5rth=-d-o; top y1r=top y5r=h; y2=y4=2/3[y3,y1r];
+ lft x1r=w-rt x5r=appr+hround 0.8u;
+ x1=x2; x4=x5; x3=0.5[x2,x4];
+ filldraw stroke z5e..z4e; filldraw stroke z2e..z1e;
+ pickup rule.nib; autorounded;
+ draw z2 down_to_right z3 right_to_up z4;
+ penlabels(1,2,3,4,5);
+ adjust_dot6((0.5w,math_axis),dtsz,false,true);
+ dot(6,6');
+endchar;
+
+beginchar(sqcap_dot,12u#+2appr#,x_height#,0);
+ "Small square cap with dot sign";
+ pickup tiny.nib;
+ pos1(rth,180); pos4(rth,0);
+ top y2r=top y3r=h; bot y1=bot y4=-d;
+ top y2r-bot y2l=top y3r-bot y3l=rth;
+ lft x1r=w-rt x4r=appr+hround 0.95u;
+ x2r=x1r; x3r=x4r; x2l=x1l; x3l=x4l;
+ filldraw stroke z1e--z2e--z3e--z4e;
+ penlabels(1,2,3,4);
+ adjust_dot5((0.5w,h-math_axis),dtsz,false,true);
+ dot(5,5');
+endchar;
+
+beginchar(sqcup_dot,12u#+2appr#,x_height#,0);
+ "Small square cup with dot sign";
+ pickup tiny.nib;
+ pos1(rth,180); pos4(rth,0);
+ bot y2r=bot y3r=-d; top y1=top y4=h;
+ top y2l-bot y2r=top y3l-bot y3r=rth;
+ lft x1r=w-rt x4r=appr+hround 0.95u;
+ x2r=x1r; x3r=x4r; x2l=x1l; x3l=x4l;
+ filldraw stroke z4e--z3e--z2e--z1e;
+ penlabels(1,2,3,4);
+ adjust_dot5((0.5w,math_axis),dtsz,false,true);
+ dot(5,5');
+endchar;
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathux10.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathux10.mf
new file mode 100644
index 00000000000..1fd122aa54f
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathux10.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathux10.mf (unsupported math serie X at 10 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathux"; font_size 10pt#;
+font_coding_scheme "mathux";
+
+input mathprmt;
+input mathuxdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathuxdrv.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathuxdrv.mf
new file mode 100644
index 00000000000..824e167885e
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathuxdrv.mf
@@ -0,0 +1,435 @@
+% mathematical symbols by Anthony Phan.
+% file: mathuxdrv.mf (unsupported eXtensible symbols driver file)
+% last modification: May 16, 2005.
+
+mode_setup;
+
+math_setup;
+
+% PARENTHESIS
+
+%%paren_left_big:=hex"00"; paren_left_Big:=hex"01";
+%%paren_left_bigg:=hex"02"; paren_left_Bigg:=hex"03";
+%%paren_left_top:=hex"04"; paren_left_bot:=hex"05";
+%%paren_left_mid:=hex"06";
+%%
+%%paren_right_big:=hex"08"; paren_right_Big:=hex"09";
+%%paren_right_bigg:=hex"0A"; paren_right_Bigg:=hex"0B";
+%%paren_right_top:=hex"0C"; paren_right_bot:=hex"0D";
+%%paren_right_mid:=hex"0E";
+%%
+%%charlist paren_left_big: paren_left_Big:
+%%paren_left_bigg: paren_left_Bigg: paren_left_top;
+%%extensible paren_left_top:
+%%paren_left_top,0,paren_left_bot,paren_left_mid;
+%%
+%%charlist paren_right_big: paren_right_Big:
+%%paren_right_bigg: paren_right_Bigg: paren_right_top;
+%%extensible paren_right_top:
+%%paren_right_top,0,paren_right_bot,paren_right_mid;
+%%
+%%% BRACKETS
+%%
+%%bracket_left_big:=hex"10"; bracket_left_Big:=hex"11";
+%%bracket_left_bigg:=hex"12"; bracket_left_Bigg:=hex"13";
+%%bracket_left_top:=hex"14"; bracket_left_bot:=hex"15";
+%%bracket_left_mid:=hex"16";
+%%
+%%bracket_right_big:=hex"18"; bracket_right_Big:=hex"19";
+%%bracket_right_bigg:=hex"1A"; bracket_right_Bigg:=hex"1B";
+%%bracket_right_top:=hex"1C"; bracket_right_bot:=hex"1D";
+%%bracket_right_mid:=hex"1E";
+%%
+%%charlist bracket_left_big: bracket_left_Big:
+%%bracket_left_bigg: bracket_left_Bigg: bracket_left_top;
+%%extensible bracket_left_top:
+%%bracket_left_top,0,bracket_left_bot,bracket_left_mid;
+%%
+%%charlist bracket_right_big: bracket_right_Big:
+%%bracket_right_bigg: bracket_right_Bigg: bracket_right_top;
+%%extensible bracket_right_top:
+%%bracket_right_top,0,bracket_right_bot,bracket_right_mid;
+%%
+%%% BRACES
+%%
+%%brace_left_big:=hex"20"; brace_left_Big:=hex"21";
+%%brace_left_bigg:=hex"22"; brace_left_Bigg:=hex"23";
+%%brace_left_top:=hex"24"; brace_left_bot:=hex"25";
+%%brace_left_mid:=hex"26"; brace_left_mod:=hex"27";
+%%
+%%brace_right_big:=hex"28"; brace_right_Big:=hex"29";
+%%brace_right_bigg:=hex"2A"; brace_right_Bigg:=hex"2B";
+%%brace_right_top:=hex"2C"; brace_right_bot:=hex"2D";
+%%brace_right_mid:=hex"2E"; brace_right_mod:=hex"2F";
+%%
+%%charlist brace_left_big: brace_left_Big:
+%%brace_left_bigg: brace_left_Bigg: brace_left_top;
+%%extensible brace_left_top:
+%%brace_left_top,brace_left_mid,brace_left_bot,brace_left_mod;
+%%
+%%charlist brace_right_big: brace_right_Big:
+%%brace_right_bigg: brace_right_Bigg: brace_right_top;
+%%extensible brace_right_top:
+%%brace_right_top,brace_right_mid,brace_right_bot,brace_right_mod;
+%%
+%%% BBBRACKETS
+%%
+%%bbbracket_left_big:=hex"30"; bbbracket_left_Big:=hex"31";
+%%bbbracket_left_bigg:=hex"32"; bbbracket_left_Bigg:=hex"33";
+%%bbbracket_left_top:=hex"34"; bbbracket_left_bot:=hex"35";
+%%bbbracket_left_mid:=hex"36";
+%%
+%%bbbracket_right_big:=hex"38"; bbbracket_right_Big:=hex"39";
+%%bbbracket_right_bigg:=hex"3A"; bbbracket_right_Bigg:=hex"3B";
+%%bbbracket_right_top:=hex"3C"; bbbracket_right_bot:=hex"3D";
+%%bbbracket_right_mid:=hex"3E";
+%%
+%%charlist bbbracket_left_big: bbbracket_left_Big:
+%%bbbracket_left_bigg: bbbracket_left_Bigg: bbbracket_left_top;
+%%extensible bbbracket_left_top:
+%%bbbracket_left_top,0,bbbracket_left_bot,bbbracket_left_mid;
+%%
+%%charlist bbbracket_right_big: bbbracket_right_Big:
+%%bbbracket_right_bigg: bbbracket_right_Bigg: bbbracket_right_top;
+%%extensible bbbracket_right_top:
+%%bbbracket_right_top,0,bbbracket_right_bot,bbbracket_right_mid;
+%%
+%%% ANGLES
+%%
+%%angle_left_big:=hex"40"; angle_left_Big:=hex"41";
+%%angle_left_bigg:=hex"42"; angle_left_Bigg:=hex"43";
+%%angle_right_big:=hex"44"; angle_right_Big:=hex"45";
+%%angle_right_bigg:=hex"46"; angle_right_Bigg:=hex"47";
+%%
+%%charlist angle_left_big: angle_left_Big:
+%%angle_left_bigg: angle_left_Bigg;
+%%charlist angle_right_big: angle_right_Big:
+%%angle_right_bigg: angle_right_Bigg;
+%%
+%%% SLASHES
+%%
+%%backslash_big:=hex"48"; backslash_Big:=hex"49";
+%%backslash_bigg:=hex"4A"; backslash_Bigg:=hex"4B";
+%%slash_big:=hex"4C"; slash_Big:=hex"4D";
+%%slash_bigg:=hex"4E"; slash_Bigg:=hex"4F";
+%%
+%%charlist backslash_big: backslash_Big:
+%%backslash_bigg: backslash_Bigg;
+%%charlist slash_big: slash_Big:
+%%slash_bigg: slash_Bigg;
+%%
+%%% CEILINGS AND FLOORS
+%%
+%%ceiling_left_big:=hex"50"; ceiling_left_Big:=hex"51";
+%%ceiling_left_bigg:=hex"52"; ceiling_left_Bigg:=hex"53";
+%%ceiling_left_top:=bracket_left_top;
+%%ceiling_left_mid:=bracket_left_mid;
+%%
+%%ceiling_right_big:=hex"54"; ceiling_right_Big:=hex"55";
+%%ceiling_right_bigg:=hex"56"; ceiling_right_Bigg:=hex"57";
+%%ceiling_right_top:=bracket_right_top;
+%%ceiling_right_mid:=bracket_right_mid;
+%%
+%%charlist ceiling_left_big: ceiling_left_Big:
+%%ceiling_left_bigg: ceiling_left_Bigg: ceiling_left_mid;
+%%extensible ceiling_left_mid:
+%%ceiling_left_top,0,0,ceiling_left_mid;
+%%
+%%charlist ceiling_right_big: ceiling_right_Big:
+%%ceiling_right_bigg: ceiling_right_Bigg: ceiling_right_mid;
+%%extensible ceiling_right_mid:
+%%ceiling_right_top,0,0,ceiling_right_mid;
+%%
+%%floor_left_big:=hex"58"; floor_left_Big:=hex"59";
+%%floor_left_bigg:=hex"5A"; floor_left_Bigg:=hex"5B";
+%%floor_left_bot:=bracket_left_bot;
+%%floor_left_mid:=bracket_left_mid;
+%%
+%%floor_right_big:=hex"5C"; floor_right_Big:=hex"5D";
+%%floor_right_bigg:=hex"5E"; floor_right_Bigg:=hex"5F";
+%%floor_right_bot:=bracket_right_bot;
+%%floor_right_mid:=bracket_right_mid;
+%%
+%%charlist floor_left_big: floor_left_Big:
+%%floor_left_bigg: floor_left_Bigg: floor_left_bot;
+%%extensible floor_left_bot:
+%%0,0,floor_left_bot,floor_left_mid;
+%%
+%%charlist floor_right_big: floor_right_Big:
+%%floor_right_bigg: floor_right_Bigg: floor_right_bot;
+%%extensible floor_right_bot:
+%%0,0,floor_right_bot,floor_right_mid;
+%%
+%%radical_sign:=hex"60"; radical_big :=hex"61";
+%%radical_Big :=hex"62"; radical_bigg:=hex"63";
+%%radical_Bigg:=hex"64"; radical_bot :=hex"65";
+%%radical_mod :=hex"66"; radical_top :=hex"67";
+%%
+%%charlist radical_big: radical_Big:
+%%radical_bigg: radical_Bigg: radical_top;
+%%extensible radical_top:
+%%radical_top,0,radical_bot,radical_mod;
+%%
+%%overbrace_left :=hex"68";
+%%overbrace_mid :=hex"69";
+%%overbrace_right :=hex"6A";
+%%overbrace_mod :=hex"6B";
+%%underbrace_left :=hex"6C";
+%%underbrace_mid :=hex"6D";
+%%underbrace_right:=hex"6E";
+%%underbrace_mod :=hex"6F";
+%%
+%%vert_mod:=hex"07"; vvert_mod:=hex"0F"; vvvert_mod:=hex"17";
+%%vert_thick_mod:=hex"1F"; left_filet:=hex"37"; right_filet:=hex"3F";
+%%
+%%extensible vert_mod: 0,0,0,vert_mod;
+%%extensible vvert_mod: 0,0,0,vvert_mod;
+%%extensible vvvert_mod: 0,0,0,vvvert_mod;
+%%extensible vert_thick_mod: 0,0,0,vert_thick_mod;
+%%extensible left_filet: left_filet,
+%%left_filet,0,left_filet;
+%%extensible right_filet: right_filet,
+%%right_filet,0,right_filet;
+%%
+%%% BONUS
+%%
+%%group_left_big:=hex"76";
+%%group_right_big:=hex"77";
+%%
+%%% lgroup
+%%charlist group_left_big: brace_left_bot;
+%%extensible brace_left_bot:
+%%brace_left_top,0,brace_left_bot,brace_left_mod;
+%%% rgroup
+%%charlist group_right_big: brace_right_bot;
+%%extensible brace_right_bot:
+%%brace_right_top,0,brace_right_bot,brace_right_mod;
+%%
+%%% lmoustache, hope it works
+%%extensible paren_left_bot:
+%%brace_left_top,0,brace_right_bot,brace_left_mod;
+%%% rmoustache, hope it works
+%%extensible paren_right_bot:
+%%brace_right_top,0,brace_left_bot,brace_right_mod;
+%%
+%%input mathbdel;
+%%
+%input mathacnt;
+%%
+%%bplus_sign :=hex"90"; Bplus_sign :=hex"A0";
+%%btimes_sign :=hex"91"; Btimes_sign :=hex"A1";
+%%bcomplement :=hex"92"; Bcomplement :=hex"A2";
+%bcap_sign :=hex"93"; Bcap_sign :=hex"A3";
+%%bcup_sign :=hex"94"; Bcup_sign :=hex"A4";
+%%bcup_plus :=hex"95"; Bcup_plus :=hex"A5";
+%%bsqcap_sign :=hex"96"; Bsqcap_sign :=hex"A6";
+%%bsqcup_sign :=hex"97"; Bsqcup_sign :=hex"A7";
+%%bsqcup_plus :=hex"98"; Bsqcup_plus :=hex"A8";
+%%bwedge_sign :=hex"99"; Bwedge_sign :=hex"A9";
+%%bvee_sign :=hex"9A"; Bvee_sign :=hex"AA";
+%%bwedge_curly:=hex"9B"; Bwedge_curly:=hex"AB";
+%%bvee_curly :=hex"9C"; Bvee_curly :=hex"AC";
+%%
+%%charlist bplus_sign: Bplus_sign;
+%%charlist btimes_sign: Btimes_sign;
+%%charlist bcomplement: Bcomplement;
+%%charlist bcap_sign: Bcap_sign;
+%%charlist bcup_sign: Bcup_sign;
+%%charlist bcup_plus: Bcup_plus;
+%%charlist bsqcap_sign: Bsqcap_sign;
+%%charlist bsqcup_sign: Bsqcup_sign;
+%%charlist bsqcup_plus: Bsqcup_plus;
+%%charlist bwedge_sign: Bwedge_sign;
+%%charlist bvee_sign: Bvee_sign;
+%%charlist bwedge_curly: Bwedge_curly;
+%%charlist bvee_curly: Bvee_curly;
+%%
+%%summation_sign :=hex"B0"; Summation_sign :=hex"B8";
+%%product_sign :=hex"B1"; Product_sign :=hex"B9";
+%%coproduct_sign :=hex"B2"; Coproduct_sign :=hex"BA";
+%%bintegral_sign :=hex"B3"; Bintegral_sign :=hex"BB";
+%%bintegral_double :=hex"B4"; Bintegral_double :=hex"BC";
+%%bintegral_triple :=hex"B5"; Bintegral_triple :=hex"BD";
+%%bintegral_contour:=hex"B6"; Bintegral_contour:=hex"BE";
+%%bintegral_dblcont:=hex"B7"; Bintegral_dblcont:=hex"BF";
+%%
+%%charlist summation_sign: Summation_sign;
+%%charlist product_sign: Product_sign;
+%%charlist coproduct_sign: Coproduct_sign;
+%%charlist bintegral_sign: Bintegral_sign;
+%%charlist bintegral_double: Bintegral_double;
+%%charlist bintegral_triple: Bintegral_triple;
+%%charlist bintegral_contour: Bintegral_contour;
+%%charlist bintegral_dblcont: Bintegral_dblcont;
+
+complement:=hex"43";
+bold_complement:=hex"44";
+bold_cup:=hex"45";
+bold_cap:=hex"46";
+Bourbaki_Z:=hex"47";
+btriangle_up:=hex"48";
+btriangle_down:=hex"49";
+bBourbaki_Z:=hex"4A"; BBourbaki_Z:=hex"4B";
+charlist bBourbaki_Z:BBourbaki_Z;
+btruc_sign :=hex"4C"; Btruc_sign :=hex"4D";
+bcurt_sign :=hex"4E"; Bcurt_sign :=hex"4F";
+charlist btruc_sign: Btruc_sign;
+charlist bcurt_sign: Bcurt_sign;
+
+bintegral_sign := hex"50";
+bintegral_contour_pos :=hex"51";
+bintegral_contour_neg :=hex"52";
+bintegral_square :=hex"53";
+bintegral_square_pos :=hex"54";
+bintegral_square_neg :=hex"55";
+% Bintegral_sign :=hex"BB";
+%%bintegral_double :=hex"B4"; Bintegral_double :=hex"BC";
+%%bintegral_triple :=hex"B5"; Bintegral_triple :=hex"BD";
+%%bintegral_contour:=hex"B6"; Bintegral_contour:=hex"BE";
+%%bintegral_dblcont:=hex"B7"; Bintegral_dblcont:=hex"BF";
+
+input mathbigs;
+input mathltlk;
+
+%%main_name_string:="bcircle";% ``b'' stands for big.
+%%t:=hex"C0";
+%%forsuffixes $=_plus,_minus,_times,_division,
+%% _dot,_circle,_asterisk,_co_asterisk,
+%% _left,_right,_top,_bot,
+%% _sign,_slash,_backslash,_triangle_up:
+%% main_name_with($):=t; t:=t+1; endfor;
+%%
+%%input mathmbcb;
+%%
+%%main_name_string:="bbox";% ``b'' stands for big.
+%%t:=hex"D0";
+%%forsuffixes $=_plus,_minus,_times,_division,
+%% _dot,_circle,_asterisk,_co_asterisk,
+%% _left,_right,_top,_bot,
+%% _sign,_slash,_backslash,_triangle_up:
+%% main_name_with($):=t; t:=t+1; endfor;
+%%
+%%input mathmbcb;
+%%
+%%main_name_string:="Bcircle";% ``B'' stands for Big.
+%%t:=hex"E0";
+%%forsuffixes $=_plus,_minus,_times,_division,
+%% _dot,_circle,_asterisk,_co_asterisk,
+%% _left,_right,_top,_bot,
+%% _sign,_slash,_backslash,_triangle_up:
+%% main_name_with($):=t; t:=t+1; endfor;
+%%
+%%input mathmbcb;
+%%
+%%main_name_string:="Bbox";% ``B'' stands for Big.
+%%t:=hex"F0";
+%%forsuffixes $=_plus,_minus,_times,_division,
+%% _dot,_circle,_asterisk,_co_asterisk,
+%% _left,_right,_top,_bot,
+%% _sign,_slash,_backslash,_triangle_up:
+%% main_name_with($):=t; t:=t+1; endfor;
+%%
+%%input mathmbcb;
+%%
+%%forsuffixes $=_plus,_minus,_times,_division,
+%% _dot,_circle,_asterisk,_co_asterisk,
+%% _left,_right,_top,_bot,
+%% _sign,_slash,_backslash,_triangle_up:
+%% charlist scantokens("bcircle" & str$):scantokens("Bcircle" & str$);
+%% charlist scantokens("bbox" & str$):scantokens("Bbox" & str$);
+%%endfor;
+%%
+% see also:
+
+main_name_string:="bcircle";
+t:=hex"80";
+forsuffixes $=
+ _truc,_curt,_full_circle,_five_star,_six_star,
+ _triangle_down,_triangle_left,_triangle_right,
+ _top_dot_minus,_bot_dot_minus,_horiz,_vert,_cross,_across,
+ _wedge,_vee,
+ _black_left,_black_right,_black_top,_black_bot,
+ _black_northwest,_black_northeast,_black_southwest,_black_southeast,
+ _ying_yang,_peace_and_love:
+ main_name_with($):=t; t:=t+1; endfor;
+input mathmbcb;
+
+main_name_string:="bbox";
+t:=hex"A0";
+forsuffixes $=
+ _truc,_curt,_full_circle,_five_star,_six_star,
+ _triangle_down,_triangle_left,_triangle_right,
+ _top_dot_minus,_bot_dot_minus,_horiz,_vert,_cross,_across,
+ _wedge,_vee,
+ _black_left,_black_right,_black_top,_black_bot,
+ _black_northwest,_black_northeast,_black_southwest,_black_southeast,
+ _ying_yang,_peace_and_love:
+ main_name_with($):=t; t:=t+1; endfor;
+input mathmbcb;
+
+main_name_string:="Bcircle";
+t:=hex"C0";
+forsuffixes $=
+ _truc,_curt,_full_circle,_five_star,_six_star,
+ _triangle_down,_triangle_left,_triangle_right,
+ _top_dot_minus,_bot_dot_minus,_horiz,_vert,_cross,_across,
+ _wedge,_vee,
+ _black_left,_black_right,_black_top,_black_bot,
+ _black_northwest,_black_northeast,_black_southwest,_black_southeast,
+ _ying_yang,_peace_and_love:
+ main_name_with($):=t; t:=t+1; endfor;
+input mathmbcb;
+
+main_name_string:="Bbox";
+t:=hex"E0";
+forsuffixes $=
+ _truc,_curt,_full_circle,_five_star,_six_star,
+ _triangle_down,_triangle_left,_triangle_right,
+ _top_dot_minus,_bot_dot_minus,_horiz,_vert,_cross,_across,
+ _wedge,_vee,
+ _black_left,_black_right,_black_top,_black_bot,
+ _black_northwest,_black_northeast,_black_southwest,_black_southeast,
+ _ying_yang,_peace_and_love:
+ main_name_with($):=t; t:=t+1; endfor;
+input mathmbcb;
+
+forsuffixes $=
+ _truc,_curt,_full_circle,_five_star,_six_star,
+ _triangle_down,_triangle_left,_triangle_right,
+ _top_dot_minus,_bot_dot_minus,_horiz,_vert,_cross,_across,
+ _wedge,_vee,
+ _black_left,_black_right,_black_top,_black_bot,
+ _black_northwest,_black_northeast,_black_southwest,_black_southeast,
+ _ying_yang,_peace_and_love:
+ charlist scantokens("bcircle" & str$):scantokens("Bcircle" & str$);
+ charlist scantokens("bbox" & str$):scantokens("Bbox" & str$);
+endfor;
+
+%%arrow_top:=hex"9D"; arrow_bot:=hex"9E"; arrow_mod:=hex"9F";
+%%extensible arrow_top: arrow_top,0,0,arrow_mod;
+%%extensible arrow_bot: 0,0,arrow_bot,arrow_mod;
+%%extensible arrow_mod: arrow_top,0,arrow_bot,arrow_mod;
+%%
+%%double_arrow_top:=hex"AD"; double_arrow_bot:=hex"AE";
+%%double_arrow_mod:=hex"AF";
+%%extensible double_arrow_top: double_arrow_top,0,0,double_arrow_mod;
+%%extensible double_arrow_bot: 0,0,double_arrow_bot,double_arrow_mod;
+%%extensible double_arrow_mod: double_arrow_top,0,double_arrow_bot,
+%%double_arrow_mod;
+%%
+%%input matharrw;
+
+% parameters for TFM files.
+
+font_slant=0;
+font_x_height=x_height#;
+%font_normal_stretch=3u#;
+%font_normal_shrink=2u#;
+font_quad=18u#+4letter_fit#;
+%font_extra_space=2u#;
+%font_normal_space=6u#+2letter_fit#;
+
+end.
+
+
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathx10.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathx10.mf
new file mode 100644
index 00000000000..0e13922bbee
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathx10.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathx10.mf (math serie X at 10 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathx"; font_size 10pt#;
+font_coding_scheme "mathx";
+
+input mathprmt;
+input mathxdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathx12.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathx12.mf
new file mode 100644
index 00000000000..c547b8a9110
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathx12.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathx12.mf (math serie X at 12 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathx"; font_size 12pt#;
+font_coding_scheme "mathx";
+
+input mathprmt;
+input mathxdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathx5.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathx5.mf
new file mode 100644
index 00000000000..1e16fd19d40
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathx5.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathx5.mf (math serie X at 5 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathx"; font_size 5pt#;
+font_coding_scheme "mathx";
+
+input mathprmt;
+input mathxdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathx6.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathx6.mf
new file mode 100644
index 00000000000..0125608b9e6
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathx6.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathx6.mf (math serie X at 6 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathx"; font_size 6pt#;
+font_coding_scheme "mathx";
+
+input mathprmt;
+input mathxdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathx7.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathx7.mf
new file mode 100644
index 00000000000..25745ac3f2f
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathx7.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathx7.mf (math serie X at 7 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathx"; font_size 7pt#;
+font_coding_scheme "mathx";
+
+input mathprmt;
+input mathxdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathx8.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathx8.mf
new file mode 100644
index 00000000000..69cc300240b
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathx8.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathx8.mf (math serie X at 8 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathx"; font_size 8pt#;
+font_coding_scheme "mathx";
+
+input mathprmt;
+input mathxdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathx9.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathx9.mf
new file mode 100644
index 00000000000..224749075d3
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathx9.mf
@@ -0,0 +1,10 @@
+% mathematical symbols by Anthony Phan.
+% file: mathx9.mf (math serie X at 9 points)
+% last modification: May 16, 2005.
+
+font_identifier:="mathx"; font_size 9pt#;
+font_coding_scheme "mathx";
+
+input mathprmt;
+input mathxdrv;
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathxdrv.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathxdrv.mf
new file mode 100644
index 00000000000..184e7cbd8d6
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathxdrv.mf
@@ -0,0 +1,371 @@
+% mathematical symbols by Anthony Phan.
+% file: mathxdrv.mf (eXtensible symbols driver file)
+% last modification: May 16, 2005.
+
+mode_setup;
+
+math_setup;
+
+% PARENTHESIS
+
+paren_left_big:=hex"00"; paren_left_Big:=hex"01";
+paren_left_bigg:=hex"02"; paren_left_Bigg:=hex"03";
+paren_left_top:=hex"04"; paren_left_bot:=hex"05";
+paren_left_mid:=hex"06";
+
+paren_right_big:=hex"08"; paren_right_Big:=hex"09";
+paren_right_bigg:=hex"0A"; paren_right_Bigg:=hex"0B";
+paren_right_top:=hex"0C"; paren_right_bot:=hex"0D";
+paren_right_mid:=hex"0E";
+
+charlist paren_left_big: paren_left_Big:
+paren_left_bigg: paren_left_Bigg: paren_left_top;
+extensible paren_left_top:
+paren_left_top,0,paren_left_bot,paren_left_mid;
+
+charlist paren_right_big: paren_right_Big:
+paren_right_bigg: paren_right_Bigg: paren_right_top;
+extensible paren_right_top:
+paren_right_top,0,paren_right_bot,paren_right_mid;
+
+% BRACKETS
+
+bracket_left_big:=hex"10"; bracket_left_Big:=hex"11";
+bracket_left_bigg:=hex"12"; bracket_left_Bigg:=hex"13";
+bracket_left_top:=hex"14"; bracket_left_bot:=hex"15";
+bracket_left_mid:=hex"16";
+
+bracket_right_big:=hex"18"; bracket_right_Big:=hex"19";
+bracket_right_bigg:=hex"1A"; bracket_right_Bigg:=hex"1B";
+bracket_right_top:=hex"1C"; bracket_right_bot:=hex"1D";
+bracket_right_mid:=hex"1E";
+
+charlist bracket_left_big: bracket_left_Big:
+bracket_left_bigg: bracket_left_Bigg: bracket_left_top;
+extensible bracket_left_top:
+bracket_left_top,0,bracket_left_bot,bracket_left_mid;
+
+charlist bracket_right_big: bracket_right_Big:
+bracket_right_bigg: bracket_right_Bigg: bracket_right_top;
+extensible bracket_right_top:
+bracket_right_top,0,bracket_right_bot,bracket_right_mid;
+
+% BRACES
+
+brace_left_big:=hex"20"; brace_left_Big:=hex"21";
+brace_left_bigg:=hex"22"; brace_left_Bigg:=hex"23";
+brace_left_top:=hex"24"; brace_left_bot:=hex"25";
+brace_left_mid:=hex"26"; brace_left_mod:=hex"27";
+
+brace_right_big:=hex"28"; brace_right_Big:=hex"29";
+brace_right_bigg:=hex"2A"; brace_right_Bigg:=hex"2B";
+brace_right_top:=hex"2C"; brace_right_bot:=hex"2D";
+brace_right_mid:=hex"2E"; brace_right_mod:=hex"2F";
+
+charlist brace_left_big: brace_left_Big:
+brace_left_bigg: brace_left_Bigg: brace_left_top;
+extensible brace_left_top:
+brace_left_top,brace_left_mid,brace_left_bot,brace_left_mod;
+
+charlist brace_right_big: brace_right_Big:
+brace_right_bigg: brace_right_Bigg: brace_right_top;
+extensible brace_right_top:
+brace_right_top,brace_right_mid,brace_right_bot,brace_right_mod;
+
+% BBBRACKETS
+
+bbbracket_left_big:=hex"30"; bbbracket_left_Big:=hex"31";
+bbbracket_left_bigg:=hex"32"; bbbracket_left_Bigg:=hex"33";
+bbbracket_left_top:=hex"34"; bbbracket_left_bot:=hex"35";
+bbbracket_left_mid:=hex"36";
+
+bbbracket_right_big:=hex"38"; bbbracket_right_Big:=hex"39";
+bbbracket_right_bigg:=hex"3A"; bbbracket_right_Bigg:=hex"3B";
+bbbracket_right_top:=hex"3C"; bbbracket_right_bot:=hex"3D";
+bbbracket_right_mid:=hex"3E";
+
+charlist bbbracket_left_big: bbbracket_left_Big:
+bbbracket_left_bigg: bbbracket_left_Bigg: bbbracket_left_top;
+extensible bbbracket_left_top:
+bbbracket_left_top,0,bbbracket_left_bot,bbbracket_left_mid;
+
+charlist bbbracket_right_big: bbbracket_right_Big:
+bbbracket_right_bigg: bbbracket_right_Bigg: bbbracket_right_top;
+extensible bbbracket_right_top:
+bbbracket_right_top,0,bbbracket_right_bot,bbbracket_right_mid;
+
+% ANGLES
+
+angle_left_big:=hex"40"; angle_left_Big:=hex"41";
+angle_left_bigg:=hex"42"; angle_left_Bigg:=hex"43";
+angle_right_big:=hex"44"; angle_right_Big:=hex"45";
+angle_right_bigg:=hex"46"; angle_right_Bigg:=hex"47";
+
+charlist angle_left_big: angle_left_Big:
+angle_left_bigg: angle_left_Bigg;
+charlist angle_right_big: angle_right_Big:
+angle_right_bigg: angle_right_Bigg;
+
+% SLASHES
+
+backslash_big:=hex"48"; backslash_Big:=hex"49";
+backslash_bigg:=hex"4A"; backslash_Bigg:=hex"4B";
+slash_big:=hex"4C"; slash_Big:=hex"4D";
+slash_bigg:=hex"4E"; slash_Bigg:=hex"4F";
+
+charlist backslash_big: backslash_Big:
+backslash_bigg: backslash_Bigg;
+charlist slash_big: slash_Big:
+slash_bigg: slash_Bigg;
+
+% CEILINGS AND FLOORS
+
+ceiling_left_big:=hex"50"; ceiling_left_Big:=hex"51";
+ceiling_left_bigg:=hex"52"; ceiling_left_Bigg:=hex"53";
+ceiling_left_top:=bracket_left_top;
+ceiling_left_mid:=bracket_left_mid;
+
+ceiling_right_big:=hex"54"; ceiling_right_Big:=hex"55";
+ceiling_right_bigg:=hex"56"; ceiling_right_Bigg:=hex"57";
+ceiling_right_top:=bracket_right_top;
+ceiling_right_mid:=bracket_right_mid;
+
+charlist ceiling_left_big: ceiling_left_Big:
+ceiling_left_bigg: ceiling_left_Bigg: ceiling_left_mid;
+extensible ceiling_left_mid:
+ceiling_left_top,0,0,ceiling_left_mid;
+
+charlist ceiling_right_big: ceiling_right_Big:
+ceiling_right_bigg: ceiling_right_Bigg: ceiling_right_mid;
+extensible ceiling_right_mid:
+ceiling_right_top,0,0,ceiling_right_mid;
+
+floor_left_big:=hex"58"; floor_left_Big:=hex"59";
+floor_left_bigg:=hex"5A"; floor_left_Bigg:=hex"5B";
+floor_left_bot:=bracket_left_bot;
+floor_left_mid:=bracket_left_mid;
+
+floor_right_big:=hex"5C"; floor_right_Big:=hex"5D";
+floor_right_bigg:=hex"5E"; floor_right_Bigg:=hex"5F";
+floor_right_bot:=bracket_right_bot;
+floor_right_mid:=bracket_right_mid;
+
+charlist floor_left_big: floor_left_Big:
+floor_left_bigg: floor_left_Bigg: floor_left_bot;
+extensible floor_left_bot:
+0,0,floor_left_bot,floor_left_mid;
+
+charlist floor_right_big: floor_right_Big:
+floor_right_bigg: floor_right_Bigg: floor_right_bot;
+extensible floor_right_bot:
+0,0,floor_right_bot,floor_right_mid;
+
+radical_sign:=hex"60"; radical_big :=hex"61";
+radical_Big :=hex"62"; radical_bigg:=hex"63";
+radical_Bigg:=hex"64"; radical_bot :=hex"65";
+radical_mod :=hex"66"; radical_top :=hex"67";
+
+charlist radical_big: radical_Big:
+radical_bigg: radical_Bigg: radical_top;
+extensible radical_top:
+radical_top,0,radical_bot,radical_mod;
+
+overbrace_left :=hex"68";
+overbrace_mid :=hex"69";
+overbrace_right :=hex"6A";
+overbrace_mod :=hex"6B";
+underbrace_left :=hex"6C";
+underbrace_mid :=hex"6D";
+underbrace_right:=hex"6E";
+underbrace_mod :=hex"6F";
+
+vert_mod:=hex"07"; vvert_mod:=hex"0F"; vvvert_mod:=hex"17";
+vert_thick_mod:=hex"1F"; left_filet:=hex"37"; right_filet:=hex"3F";
+
+extensible vert_mod: 0,0,0,vert_mod;
+extensible vvert_mod: 0,0,0,vvert_mod;
+extensible vvvert_mod: 0,0,0,vvvert_mod;
+extensible vert_thick_mod: 0,0,0,vert_thick_mod;
+extensible left_filet: left_filet,
+left_filet,0,left_filet;
+extensible right_filet: right_filet,
+right_filet,0,right_filet;
+
+% BONUS
+
+group_left_big:=hex"76";
+group_right_big:=hex"77";
+
+% lgroup
+charlist group_left_big: brace_left_bot;
+extensible brace_left_bot:
+brace_left_top,0,brace_left_bot,brace_left_mod;
+% rgroup
+charlist group_right_big: brace_right_bot;
+extensible brace_right_bot:
+brace_right_top,0,brace_right_bot,brace_right_mod;
+
+% lmoustache, hope it works
+extensible paren_left_bot:
+brace_left_top,0,brace_right_bot,brace_left_mod;
+% rmoustache, hope it works
+extensible paren_right_bot:
+brace_right_top,0,brace_left_bot,brace_right_mod;
+
+input mathbdel;
+
+input mathacnt;
+
+bplus_sign :=hex"90"; Bplus_sign :=hex"A0";
+btimes_sign :=hex"91"; Btimes_sign :=hex"A1";
+bcomplement :=hex"92"; Bcomplement :=hex"A2";
+%btruc_sign :=hex"93"; Btruc_sign :=hex"A3";
+%bcurt_sign :=hex"94"; Bcurt_sign :=hex"A4";
+bcap_sign :=hex"93"; Bcap_sign :=hex"A3";
+bcup_sign :=hex"94"; Bcup_sign :=hex"A4";
+bcup_plus :=hex"95"; Bcup_plus :=hex"A5";
+bsqcap_sign :=hex"96"; Bsqcap_sign :=hex"A6";
+bsqcup_sign :=hex"97"; Bsqcup_sign :=hex"A7";
+bsqcup_plus :=hex"98"; Bsqcup_plus :=hex"A8";
+bwedge_sign :=hex"99"; Bwedge_sign :=hex"A9";
+bvee_sign :=hex"9A"; Bvee_sign :=hex"AA";
+bwedge_curly:=hex"9B"; Bwedge_curly:=hex"AB";
+bvee_curly :=hex"9C"; Bvee_curly :=hex"AC";
+
+charlist bplus_sign: Bplus_sign;
+charlist btimes_sign: Btimes_sign;
+charlist bcomplement: Bcomplement;
+%charlist btruc_sign: Btruc_sign;
+%charlist bcurt_sign: Bcurt_sign;
+charlist bcap_sign: Bcap_sign;
+charlist bcup_sign: Bcup_sign;
+charlist bcup_plus: Bcup_plus;
+charlist bsqcap_sign: Bsqcap_sign;
+charlist bsqcup_sign: Bsqcup_sign;
+charlist bsqcup_plus: Bsqcup_plus;
+charlist bwedge_sign: Bwedge_sign;
+charlist bvee_sign: Bvee_sign;
+charlist bwedge_curly: Bwedge_curly;
+charlist bvee_curly: Bvee_curly;
+
+summation_sign :=hex"B0"; Summation_sign :=hex"B8";
+product_sign :=hex"B1"; Product_sign :=hex"B9";
+coproduct_sign :=hex"B2"; Coproduct_sign :=hex"BA";
+bintegral_sign :=hex"B3"; Bintegral_sign :=hex"BB";
+bintegral_double :=hex"B4"; Bintegral_double :=hex"BC";
+bintegral_triple :=hex"B5"; Bintegral_triple :=hex"BD";
+bintegral_contour:=hex"B6"; Bintegral_contour:=hex"BE";
+bintegral_dblcont:=hex"B7"; Bintegral_dblcont:=hex"BF";
+
+charlist summation_sign: Summation_sign;
+charlist product_sign: Product_sign;
+charlist coproduct_sign: Coproduct_sign;
+charlist bintegral_sign: Bintegral_sign;
+charlist bintegral_double: Bintegral_double;
+charlist bintegral_triple: Bintegral_triple;
+charlist bintegral_contour: Bintegral_contour;
+charlist bintegral_dblcont: Bintegral_dblcont;
+
+%small_summation_sign:=hex"40";
+%small_product_sign:=hex"41";
+%small_coproduct_sign:=hex"42";
+%complement:=hex"43";
+%bold_complement:=hex"44";
+%bold_cup:=hex"45";
+%bold_cap:=hex"46";
+%Bourbaki_Z:=hex"47";
+%btriangle_up:=hex"48";
+%btriangle_down:=hex"49";
+%bBourbaki_Z:=hex"4A";
+%BBourbaki_Z:=hex"4B";
+%charlist bBourbaki_Z:BBourbaki_Z;
+
+input mathbigs;
+input mathltlk;
+
+main_name_string:="bcircle";% ``b'' stands for big.
+t:=hex"C0";
+forsuffixes $=_plus,_minus,_times,_division,
+ _dot,_circle,_asterisk,_co_asterisk,
+ _left,_right,_top,_bot,
+ _sign,_slash,_backslash,_triangle_up:
+ main_name_with($):=t; t:=t+1; endfor;
+
+input mathmbcb;
+
+main_name_string:="bbox";% ``b'' stands for big.
+t:=hex"D0";
+forsuffixes $=_plus,_minus,_times,_division,
+ _dot,_circle,_asterisk,_co_asterisk,
+ _left,_right,_top,_bot,
+ _sign,_slash,_backslash,_triangle_up:
+ main_name_with($):=t; t:=t+1; endfor;
+
+input mathmbcb;
+
+main_name_string:="Bcircle";% ``B'' stands for Big.
+t:=hex"E0";
+forsuffixes $=_plus,_minus,_times,_division,
+ _dot,_circle,_asterisk,_co_asterisk,
+ _left,_right,_top,_bot,
+ _sign,_slash,_backslash,_triangle_up:
+ main_name_with($):=t; t:=t+1; endfor;
+
+input mathmbcb;
+
+main_name_string:="Bbox";% ``B'' stands for Big.
+t:=hex"F0";
+forsuffixes $=_plus,_minus,_times,_division,
+ _dot,_circle,_asterisk,_co_asterisk,
+ _left,_right,_top,_bot,
+ _sign,_slash,_backslash,_triangle_up:
+ main_name_with($):=t; t:=t+1; endfor;
+
+input mathmbcb;
+
+forsuffixes $=_plus,_minus,_times,_division,
+ _dot,_circle,_asterisk,_co_asterisk,
+ _left,_right,_top,_bot,
+ _sign,_slash,_backslash,_triangle_up:
+ charlist scantokens("bcircle" & str$):scantokens("Bcircle" & str$);
+ charlist scantokens("bbox" & str$):scantokens("Bbox" & str$);
+endfor;
+
+% see also:
+% _peace_and_love,_ying_yang,
+% _truc,_curt,_full_circle,_five_star,_six_star,
+% _triangle_down,_triangle_left,_triangle_right,
+% _top_dot_minus,_bot_dot_minus,_horiz,_vert,_cross,_across,
+% _wedge,_vee,
+% _black_left,_black_right,_black_top,_black_bot,
+% _black_northwest,_black_northeast,_black_southwest,_black_southeast:
+
+
+arrow_top:=hex"9D"; arrow_bot:=hex"9E"; arrow_mod:=hex"9F";
+extensible arrow_top: arrow_top,0,0,arrow_mod;
+extensible arrow_bot: 0,0,arrow_bot,arrow_mod;
+extensible arrow_mod: arrow_top,0,arrow_bot,arrow_mod;
+
+double_arrow_top:=hex"AD"; double_arrow_bot:=hex"AE";
+double_arrow_mod:=hex"AF";
+extensible double_arrow_top: double_arrow_top,0,0,double_arrow_mod;
+extensible double_arrow_bot: 0,0,double_arrow_bot,double_arrow_mod;
+extensible double_arrow_mod: double_arrow_top,0,double_arrow_bot,
+double_arrow_mod;
+
+input matharrw;
+
+% parameters for TFM files.
+
+font_slant=0;
+font_x_height=x_height#;
+%font_normal_stretch=3u#;
+%font_normal_shrink=2u#;
+font_quad=18u#+4letter_fit#;
+%font_extra_space=2u#;
+%font_normal_space=6u#+2letter_fit#;
+
+end.
+
+
+
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/maydigit.mf b/Master/texmf-dist/fonts/source/public/mathabx/maydigit.mf
new file mode 100644
index 00000000000..e39b0e44d6b
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/maydigit.mf
@@ -0,0 +1,107 @@
+% blackboard typefaces by Anthony Phan.
+% file: maydigit.mf (Maya digits)
+% last modification: May 16, 2005.
+
+numeric fig_width#;
+fig_width#=max(dtsz#,stem#*(1++slant));
+
+use_rule1;
+
+beginchar("0",20u#+2appr#,fig_height#,0);
+ "Maya numeral 0";
+% italcorr fig_height#*slant-0.5u#;
+ numeric a; a=vround 0.2(h+d);
+ pickup rule.nib; x2r=x4r=good.x 0.5w;
+ pickup fine.nib; y1r=y3r=good.y 0.5[-d,h];
+ top y2r=h+o; y2r-y1r=y1r-y4r; y1'=y2r; y3'=y4r;
+ lft x1r=appr; x3r-x2r=x2r-x1r;
+ x1'=1/3[x1r,x2r]; x3'=1/3[x3r,x4r];
+ pos2(rth,90); pos4(rth,-90);
+ penpos1(diag_width(rth-fine,z1'-z1r),180);
+ penpos3(diag_width(rth-fine,z3'-z3r),0);
+ path tmp_path[],tmp_path[]r,tmp_path[]l;
+ numeric t[],t[]r,t[]l;
+ forsuffixes $=,r,l:
+ z[5]$=z[1]$ shifted(0,a); z[7]$=z[4]$ shifted(0,a);
+ z[9]$=z[3]$ shifted(0,a);
+ tmp_path[1]$=z[1]${z1'-z1r}...z[2]${right}
+ ...z[3]${(z3'-z3r) xscaled -1};
+ tmp_path[2]$=z[9]${z3'-z3r}...z[7]${left}
+ ...z[5]${(z1r-z1') yscaled -1};
+ t[1]$=xpart(tmp_path[2]$
+ intersectiontimes subpath (1,2) of tmp_path[1]);
+ t[2]$=xpart(tmp_path[2]$
+ intersectiontimes subpath (0,1) of tmp_path[1]);
+ tmp_path[3]$=subpath (t[1]$,t[2]$) of tmp_path[2]$;
+ z[6]$=point t[1]$ of tmp_path[2]$;
+ z[8]$=point t[2]$ of tmp_path[2]$;
+ endfor
+ pickup rule.nib; x12=good.x 1/3[x2,x6];
+ x14=x2; x18-x16=x16-x14=x14-x12=x12-x10;
+ pickup fine.nib;
+ for i=10 step 2 until 18:
+ rt x[i]r-lft x[i]l=rth; 0.5[x[i]r,x[i]l]=x[i];
+ forsuffixes $=,r,l:
+ z[i]$=tmp_path[1] intersectionpoint ((x[i]$,y2r)..(x[i]$,y7r));
+ z[i+1]$=tmp_path[3] intersectionpoint ((x[i]$,y2r)..(x[i]$,y7r));
+ endfor
+ filldraw stroke z[i]e..z[i+1]e;
+ endfor
+ filldraw stroke tmp_path[1]e; filldraw stroke tmp_path[3]e;
+ filldraw stroke z3e{z3'-z3r}...z4e{left}...z1e{(z1r-z1') yscaled -1};
+ penlabels(range 1 thru 19); labels(1',3');
+endchar;
+
+beginchar("1",fig_width#+2appr#,fig_height#,0);
+ "Maya numeral 1 (hun)";
+% italcorr fig_height#*slant-0.5u#;
+ pickup fine.nib;
+ adjust_dot1((0.5w,0.5h),dtsz,false,false);
+ dot(1,1');
+endchar;
+
+beginchar("2",fig_width#+2appr#,fig_height#,0);
+ "Maya numeral 2 (ca)";
+% italcorr fig_height#*slant-0.5u#;
+ pickup fine.nib;
+ adjust_dot1((0.5w,0.25h),dtsz,false,false);
+ dot(1,1');
+ adjust_dot2((0.5w,0.75h),dtsz,false,false);
+ dot(2,2');
+endchar;
+
+beginchar("3",fig_width#+2appr#,fig_height#,0);
+ "Maya numeral 3 (ox)";
+% italcorr fig_height#*slant-0.5u#;
+ pickup fine.nib;
+ adjust_dot1((0.5w,h/6),dtsz,false,false);
+ dot(1,1');
+ adjust_dot2((0.5w,0.5h),dtsz,false,false);
+ dot(2,2');
+ x3=x1; x3'=x1'; y2-y1=y3-y2; y2'-y1'=y3'-y2'; dot(3,3');
+endchar;
+
+beginchar("4",fig_width#+2appr#,fig_height#,0);
+ "Maya numeral 4 (can)";
+% italcorr fig_height#*slant-0.5u#;
+ pickup fine.nib;
+ adjust_dot1((0.5w,0.5dtsz),dtsz,false,false);
+ dot(1,1');
+ adjust_dot2((0.5w,1/3(h-dtsz)+0.5dtsz),dtsz,false,false);
+ dot(2,2');
+ x3=x1; x3'=x1'; y2-y1=y3-y2; y2'-y1'=y3'-y2'; dot(3,3');
+ x4=x1; x4'=x1'; y2-y1=y4-y3; y2'-y1'=y4'-y3'; dot(4,4');
+endchar;
+
+beginchar("5",fig_width#+2appr#,fig_height#,0);
+ "Maya numeral 5 (ho)";
+% italcorr fig_height#*slant-0.5u#;
+ pickup fine.nib; top y1=h; bot y2=0;
+ lft x1l=lft x2l=hround(0.5w-0.5stem);
+ pos1(stem,0); pos2(stem,0); filldraw stroke z1e..z2e;
+ penlabels(1,2);
+endchar;
+
+% 6=uac, 7=uc, 8=vaxac, 9=bolon, 10=lahun
+% 11=hun lahun, 12=ca lahun, 13=ox lahun.
+
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/matha10.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/matha10.tfm
new file mode 100644
index 00000000000..76f94e650e3
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/matha10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/matha12.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/matha12.tfm
new file mode 100644
index 00000000000..84b0b87725d
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/matha12.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/matha5.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/matha5.tfm
new file mode 100644
index 00000000000..fb5c2df7823
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/matha5.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/matha6.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/matha6.tfm
new file mode 100644
index 00000000000..a1b0504219f
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/matha6.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/matha7.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/matha7.tfm
new file mode 100644
index 00000000000..3fec51af8a1
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/matha7.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/matha8.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/matha8.tfm
new file mode 100644
index 00000000000..e48960d3a2a
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/matha8.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/matha9.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/matha9.tfm
new file mode 100644
index 00000000000..a3397c12ad7
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/matha9.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathastrotest10.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathastrotest10.tfm
new file mode 100644
index 00000000000..84c03c86e95
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathastrotest10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathb10.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathb10.tfm
new file mode 100644
index 00000000000..30646b4bf03
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathb10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathb12.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathb12.tfm
new file mode 100644
index 00000000000..30646b4bf03
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathb12.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathb5.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathb5.tfm
new file mode 100644
index 00000000000..a1432cf39e9
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathb5.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathb6.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathb6.tfm
new file mode 100644
index 00000000000..f4b9e2b6138
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathb6.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathb7.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathb7.tfm
new file mode 100644
index 00000000000..7d3c99723f2
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathb7.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathb8.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathb8.tfm
new file mode 100644
index 00000000000..4693f6372c3
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathb8.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathb9.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathb9.tfm
new file mode 100644
index 00000000000..6ccd97f6000
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathb9.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathc10.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathc10.tfm
new file mode 100644
index 00000000000..7989dbd6e73
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathc10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathu10.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathu10.tfm
new file mode 100644
index 00000000000..17b9bb04b9f
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathu10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathux10.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathux10.tfm
new file mode 100644
index 00000000000..9a075793795
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathux10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathx10.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathx10.tfm
new file mode 100644
index 00000000000..d7cceafdb25
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathx10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathx12.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathx12.tfm
new file mode 100644
index 00000000000..65043b6b39c
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathx12.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathx5.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathx5.tfm
new file mode 100644
index 00000000000..a557e4f6b41
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathx5.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathx6.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathx6.tfm
new file mode 100644
index 00000000000..1a5fe975a15
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathx6.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathx7.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathx7.tfm
new file mode 100644
index 00000000000..901a05116af
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathx7.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathx8.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathx8.tfm
new file mode 100644
index 00000000000..ed2b773245e
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathx8.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/mathabx/mathx9.tfm b/Master/texmf-dist/fonts/tfm/public/mathabx/mathx9.tfm
new file mode 100644
index 00000000000..6e7f09bcb96
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/mathabx/mathx9.tfm
Binary files differ