summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts/source/public/kuvio
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-09 23:38:21 +0000
committerKarl Berry <karl@freefriends.org>2006-01-09 23:38:21 +0000
commit215012a8d684889983ec2c0629e1c704e6853d9c (patch)
treeebf1271bd71869069824935ae8a5678745bf8bce /Master/texmf-dist/fonts/source/public/kuvio
parent1af3d19d6dbcbf309667d9cb4aa3cdda914914a9 (diff)
trunk/Master/texmf-dist/fonts/source
git-svn-id: svn://tug.org/texlive/trunk@101 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/kuvio')
-rw-r--r--Master/texmf-dist/fonts/source/public/kuvio/arrsy.mf116
-rw-r--r--Master/texmf-dist/fonts/source/public/kuvio/arrsy10.mf45
-rw-r--r--Master/texmf-dist/fonts/source/public/kuvio/arrsym.mf477
3 files changed, 638 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/kuvio/arrsy.mf b/Master/texmf-dist/fonts/source/public/kuvio/arrsy.mf
new file mode 100644
index 00000000000..d48792b9f82
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/kuvio/arrsy.mf
@@ -0,0 +1,116 @@
+% arrsy.mf
+% Anders G S Svensson
+% $Date: 1993/08/29 06:19:19 $
+% $Revision: 1.1 $
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Computer Modern parameters from cmsy10.mf
+%%
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=250/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=232/36pt#; % height of numerals
+x_height#:=155/36pt#; % height of lowercase without ascenders
+math_axis#:=90/36pt#; % axis of symmetry for math symbols
+bar_height#:=87/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=70/36pt#; % depth of lowercase descenders
+
+crisp#:=8/36pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=9/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=29/36pt#; % lowercase curve breadth
+ess#:=27/36pt#; % breadth in middle of lowercase s
+flare#:=32/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=38/36pt#; % diameter of dots
+cap_hair#:=11/36pt#; % uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=35/36pt#; % uppercase curve breadth
+cap_ess#:=33/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=20/36pt#; % vertical distance from serif base to tangent
+jut#:=30/36pt#; % protrusion of lowercase serifs
+cap_jut#:=37/36pt#; % protrusion of uppercase serifs
+beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs
+beak#:=70/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=10pt#; % maximum breadth above or below notches
+bar#:=11/36pt#; % lowercase bar thickness
+slab#:=11/36pt#; % serif and arm thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+cap_band#:=11/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches
+serif_drop#:=4/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=8/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+% Font parameters are explained in {\sl The \TeX book}, Appendix G
+%
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will
+ % now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Modified from mathsy.mf
+%%
+font_coding_scheme:="TeX math symbols";
+mode_setup; font_setup;
+
+slant:=mono_charic#:=0; % Symbols shouldn't be slanted.
+
+font_slant slant;
+font_x_height x_height#;
+font_quad 18u#;
+
+currenttransform:=identity yscaled aspect_ratio scaled granularity;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/Master/texmf-dist/fonts/source/public/kuvio/arrsy10.mf b/Master/texmf-dist/fonts/source/public/kuvio/arrsy10.mf
new file mode 100644
index 00000000000..a73fa349a15
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/kuvio/arrsy10.mf
@@ -0,0 +1,45 @@
+% arrsy10.mf
+% Anders G S Svensson
+% $Date: 1995/03/31 21:55:19 $
+% $Revision: 1.10 $
+
+if unknown cmbase: input cmbase fi
+font_identifier:="ARRSY"; font_size 10pt#;
+
+input arrsy; % Computer modern parameters.
+input arrsym; % Macros for the symbols.
+
+% Encoding
+%
+rightallo(hex "00");
+leftallo(hex "01");
+upallo(hex "02");
+downallo(hex "03");
+rightpara(hex "04");
+leftpara(hex "05");
+uppara(hex "06");
+downpara(hex "07");
+righttriple(hex "08");
+lefttriple(hex "09");
+equiv(hex "0A");
+dashbar(hex "0B");
+rightarrow(hex "0C", 10);
+leftarrow(hex "0D", 10);
+rightmonotail(hex "0E");
+leftmonotail(hex "0F");
+squiggle(hex "10");
+rightarrow(hex "11", 18);
+leftarrow(hex "12", 18);
+leftrightarrow(hex "13");
+leftharpoonup(hex "14");
+leftharpoondown(hex "15");
+rightharpoonup(hex "16");
+rightharpoondown(hex "17");
+vector(hex "18");
+ofcirc(hex "19");
+dotp(hex "1A");
+cupp(hex "1B");
+capp(hex "1C");
+
+bye
+
diff --git a/Master/texmf-dist/fonts/source/public/kuvio/arrsym.mf b/Master/texmf-dist/fonts/source/public/kuvio/arrsym.mf
new file mode 100644
index 00000000000..81b113bc79c
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/kuvio/arrsym.mf
@@ -0,0 +1,477 @@
+% arrsym.mf
+% Anders G S Svensson
+
+% This file was tangled from arrsym.fw.
+% $Revision: 1.9 $
+% $Date: 1995/04/01 02:31:13 $
+
+compute_spread(.45x_height#,.55y_height#);
+numeric thin_spread#; thin_spread#:=4/5spread#;
+define_pixels(thin_spread);
+
+def rightallo(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x2=x1; x7=x8=w-x1;
+ y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib; rt x0=hround(w-u)+eps; y0=y2;
+ pos3(rule_thickness,0);
+ y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0-6u-eps;
+ pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z3-z9}z3--(w,y3)--z0&cycle;
+ filldraw z5l..{z3-z9}z3r---{z9-z3}z3l..z5r--cycle;
+ endchar;
+enddef;
+
+def rightpara(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x2=x1; x7=x8=w-x1;
+ y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib; rt x0=hround(w-u)+eps; y0=y1;
+ pos4(rule_thickness,0);
+ y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0-6u-eps;
+ pos5(rule_thickness,angle(z3-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z4-z9}z4--(w,y4)--z0&cycle;
+ filldraw z5r..{z4-z9}z4l---{z9-z4}z4r..z5l--cycle;
+ endchar;
+enddef;
+
+def leftpara(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x7=hround u - eps; x8=x7; x1=x2=w-x7;
+ y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib; lft x0=hround u - eps; y0=y2;
+ pos3(rule_thickness,0);
+ y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0+6u+eps;
+ pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z3-z9}z3--(0,y3)--z0&cycle;
+ filldraw z5r..{z3-z9}z3r---{z9-z3}z3l..z5l--cycle;
+ endchar;
+enddef;
+
+def leftallo(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x7=hround u - eps; x8=x7; x1=x2=w-x7;
+ y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib; lft x0=hround u - eps; y0=y1;
+ pos4(rule_thickness,0);
+ y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0+6u+eps;
+ pos5(rule_thickness,angle(z3-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z4-z9}z4--(0,y4)--z0&cycle;
+ filldraw z5l..{z4-z9}z4l---{z9-z4}z4r..z5r--cycle;
+ endchar;
+enddef;
+
+def downallo(expr code) =
+ beginchar(code, 11u#, asc_height#, asc_depth#);
+ pickup rule.nib;
+ top y1=top y2=h+eps; bot y7=-d; y8=y7;
+ x1=x7; x2=x8; x1-x2=spread; .5[x1,x2]=crisp.lft hround(crisp.rt .5w);
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib;
+ bot y0=-d-eps; x0=x2;
+ pos4(rule_thickness,90);
+ x2-x3=x4-x1=3u+eps; y3=y4=y0+.48asc_height-eps;
+ pos6(rule_thickness,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z4-z9}z4--(x4,-d-eps)--z0&cycle;
+ filldraw z6l..{z4-z9}z4l---{z9-z4}z4r..z6r--cycle;
+ endchar;
+enddef;
+
+def downpara(expr code) =
+ beginchar(code, 11u#, asc_height#, asc_depth#);
+ pickup rule.nib;
+ top y1=top y2=h+eps; bot y7=-d; y8=y7;
+ x1=x7; x2=x8; x1-x2=spread; .5[x1,x2]=crisp.lft hround(crisp.rt .5w);
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib;
+ bot y0=-d-eps; x0=x1;
+ pos3(rule_thickness,90);
+ x2-x3=x4-x1=3u+eps; y3=y4=y0+.48asc_height-eps;
+ pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z3-z9}z3--(x3,-d-eps)--z0&cycle;
+ filldraw z5r..{z3-z9}z3r---{z9-z3}z3l..z5l--cycle;
+ endchar;
+enddef;
+
+def uppara(expr code) =
+ beginchar(code, 11u#, asc_height#, asc_depth#);
+ pickup rule.nib;
+ bot y1=bot y2=-d-eps; top y7=h; y8=y7;
+ x1=x7; x2=x8; x1-x2=spread; .5[x1,x2]=crisp.lft hround(crisp.rt .5w);
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib;
+ top y0=h+eps; x0=x2;
+ pos4(rule_thickness,90);
+ x2-x3=x4-x1=3u+eps; y3=y4=y0-.48asc_height-eps;
+ pos6(rule_thickness,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z4-z9}z4--(x4,h+eps)--z0&cycle;
+ filldraw z6r..{z4-z9}z4l---{z9-z4}z4r..z6l--cycle;
+ endchar;
+enddef;
+
+def upallo(expr code) =
+ beginchar(code, 11u#, asc_height#, asc_depth#);
+ pickup rule.nib;
+ bot y1=bot y2=-d-eps; top y7=h; y8=y7;
+ x1=x7; x2=x8; x1-x2=spread; .5[x1,x2]=crisp.lft hround(crisp.rt .5w);
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib;
+ top y0=h+eps; x0=x1;
+ pos3(rule_thickness,90);
+ x2-x3=x4-x1=3u+eps; y3=y4=y0-.48asc_height-eps;
+ pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z3-z9}z3--(x3,h+eps)--z0&cycle;
+ filldraw z5l..{z3-z9}z3r---{z9-z3}z3l..z5r--cycle;
+ endchar;
+enddef;
+
+def righttriple(expr code) =
+ beginchar(code, 18u#, v_center(2spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x3=x5=x1; x2=x4=x6=w-x1;
+ y1=y2; y3=y4=math_axis; y5=y6; y1-y3=y3-y5=thin_spread;
+ draw z1--z2; draw z3--z4; draw z5--z6;
+ pickup crisp.nib; rt x0=hround(w-u)+eps; y0=y4;
+ pos7(rule_thickness,0); pos8(rule_thickness,0);
+ y7-y2=y6-y8=.24asc_height+eps; x7=x8=x0-6u-eps;
+ pos9(rule_thickness,angle(z8-z0)); z9l=z0;
+ pos10(rule_thickness,angle(z7-z0)); z10l=z0;
+ z11=.381966[.5[z7,z8],z0];
+ erase filldraw z0..{z7-z11}z7--(w,y7)--(w,y8)--
+ z8{z11-z8}..z0&cycle;
+ filldraw z9l..{z7-z11}z7r---z7l{z11-z7}..z9r--cycle;
+ filldraw z10r..{z8-z11}z8l---z8r{z11-z8}..z10l--cycle;
+ endchar;
+enddef;
+
+def lefttriple(expr code) =
+ beginchar(code, 18u#, v_center(2spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x3=x5=x1; x2=x4=x6=w-x1;
+ y1=y2; y3=y4=math_axis; y5=y6; y1-y3=y3-y5=thin_spread;
+ draw z1--z2; draw z3--z4; draw z5--z6;
+ pickup crisp.nib; lft x0=hround u-eps; y0=y4;
+ pos7(rule_thickness,0); pos8(rule_thickness,0);
+ y7-y2=y6-y8=.24asc_height+eps; x7=x8=x0+6u+eps;
+ pos9(rule_thickness,angle(z8-z0)); z9l=z0;
+ pos10(rule_thickness,angle(z7-z0)); z10l=z0;
+ z11=.381966[.5[z7,z8],z0];
+ erase filldraw z0..{z7-z11}z7--(0,y7)--(0,y8)--
+ z8{z11-z8}..z0&cycle;
+ filldraw z9r..{z7-z11}z7r---z7l{z11-z7}..z9l--cycle;
+ filldraw z10l..{z8-z11}z8l---z8r{z11-z8}..z10r--cycle;
+ endchar;
+enddef;
+
+def equiv(expr code) =
+ beginchar(code, 14u#, v_center(2spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x3=x5=x1; x2=x4=x6=w-x1;
+ y1=y2; y3=y4=math_axis; y5=y6; y1-y3=y3-y5=thin_spread;
+ draw z1--z2;
+ draw z3--z4;
+ draw z5--z6;
+ endchar;
+enddef;
+
+def dashbar(expr code) =
+ beginarithchar(code);
+ pickup rule.nib;
+ lft x1=hround u-eps;
+ x2=.3w; x3=.7w;
+ x4=w-x1;
+ y1=y2=y3=y4=math_axis;
+ draw z1--z2;
+ draw z3--z4;
+ endchar;
+enddef;
+
+def rightarrow(expr code, width) =
+ beginchar(code, width*u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u);
+ y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps;
+ pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4l{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
+ --z3r{z9-z3}..z0 & cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def leftarrow(expr code, width) =
+ beginchar(code, width*u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u;
+ y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps;
+ pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4r{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r)
+ --z3l{z9-z3}..z0 & cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def leftrightarrow(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis; lft x0=hround u;
+ x1=.5w;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0+3u+eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4r{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r)
+ --z3l{z9-z3}..z0 & cycle; % left arrowhead and stem
+ pos11(rule_thickness,90); pos12(rule_thickness,90);
+ pos13(bar,0); pos14(bar,0);
+ y10=y11=y12=math_axis;
+ rt x10=hround(w-u);
+ x11=.5w;
+ y13-y10=y10-y14=.24asc_height+eps;
+ x13=x14=x10-3u-eps;
+ pos15(bar,angle(z14-z10)); z15l=z10;
+ pos16(bar,angle(z13-z10)); z16l=z10;
+ z19=.381966[.5[z13,z14],z10];
+ numeric t; path p; p=z14l{z19-z14}..z16r;
+ t=xpart(p intersectiontimes((0,y12l)--(w,y12l)));
+ x12=xpart point t of p;
+ filldraw z10..{z14-z19}z14r--subpath (0,t) of\\(z14l{z19-z14}..z16r)
+ --z12l---z11l..z11r---z12r--subpath (t,0) of\\(z13l{z19-z13}..z15r)
+ --z13r{z19-z13}..z10 & cycle; % right arrowhead and stem
+ endchar;
+enddef;
+
+def rightmonotail(expr code) =
+ beginchar(code,10u#,v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ x3=x4=.5rule_thickness+hround u;
+ y0=y1=y2=math_axis;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x0=x3+3u+eps;
+ rt x1=hround(w-u);
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4l{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
+ --z2l---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
+ --z3r{z9-z3}..z0 & cycle;
+ filldraw z1l..z1r---z2r..z2l---z1l & cycle;
+ endchar;
+enddef;
+
+def leftmonotail(expr code) =
+ beginchar(code,10u#,v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ x3=x4=hround(w-u)-.5rule_thickness;
+ y0=y1=y2=math_axis;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x0=x3-3u-eps;
+ lft x1=hround u;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4r{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
+ --z2l---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r)
+ --z3l{z9-z3}..z0 & cycle; % arrowhead and stem
+ filldraw z1l..z1r---z2r..z2l---z1l & cycle;
+ endchar;
+enddef;
+
+def squiggle(expr code) =
+ beginarithchar(code);
+ pickup rule.nib;
+ x2=.12w; x3=.3w;
+ x4=.7w; x5=.88w;
+ y2=y5=math_axis;
+ y3-y2=y2-y4=.5spread;
+ draw z2{right}..z3{right}..z4{right}..z5{right};
+ endchar;
+enddef;
+
+def leftharpoonup(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis;
+ x1+.5rule_thickness=hround(w-u);
+ lft x0=hround u;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0+3u+eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ numeric t; path p; p=z4r..{2(x0-x4),y0-y4}z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0--(x0,y2l)---z1l..z1r---z2r
+ ..subpath (t,0) of\\(z3r..{2(x0-x3),y0-y3}z5r)
+ --z3l..{2(x0-x3),y0-y3}cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def leftharpoondown(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis;
+ x1+.5rule_thickness=hround(w-u);
+ lft x0=hround u;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0+3u+eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ numeric t; path p; p=z4r..{2(x0-x4),y0-y4}z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0{2(x4-x0),y4-y0}..z4l
+ --subpath (0,t) of\\(z4r..{2(x0-x4),y0-y4}z6r)
+ ..z2l---z1l..z1r---(x0,y2r)--cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def rightharpoonup(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis;
+ x1-.5rule_thickness=hround u;
+ rt x0=hround(w-u);
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0-3u-eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ numeric t; path p; p=z4l..{2(x0-x4),y0-y4}z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0--(x0,y2l)---z1l..z1r---z2r
+ ..subpath (t,0) of\\(z3l..{2(x0-x3),y0-y3}z5r)
+ --z3r..{2(x0-x3),y0-y3}cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def rightharpoondown(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis;
+ x1-.5rule_thickness=hround u;
+ rt x0=hround(w-u);
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0-3u-eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ numeric t; path p; p=z4l..{2(x0-x4),y0-y4}z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0{2(x4-x0),y4-y0}..z4r
+ --subpath (0,t) of\\(z4l..{2(x0-x4),y0-y4}z6r)
+ ..z2l---z1l..z1r---(x0,y2r)--cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def vector(expr code) =
+ beginchar(code, 9u#, asc_height#+.5rule_thickness#,0);
+ italcorr .7[x_height#,asc_height#]*slant;
+ adjust_fit(0,0); pickup rule.nib;
+ lft x1=hround .5u; x2=w-x1; y1=y2=good.x .7[x_height,asc_height];
+ draw z1--z2; % bar
+ rt x3=hround(x2-u);
+ y3=y2+.3(asc_height-x_height);
+ draw z3{x2-x3,2(y2-y3)}...{2(x2-x3),y2-y3}z2; % upper point
+ endchar;
+enddef;
+
+def ofcirc(expr code) =
+ beginchar(code, 7u#, v_center(7u#));
+ adjust_fit(0,0); pickup rule.nib; autorounded;
+ lft x6=hround u; x2=w-x6;
+ z0=.5[z2,z6];
+ y8-y0=x2-x0;
+ y2=math_axis;
+ circle_points; draw_circle; % circle
+ endchar;
+enddef;
+
+def dotp(expr code) =
+ beginchar(code, 5u#, v_center(7u#));
+ adjust_fit(0,0); pickup fine.nib;
+ numeric dot_diam#; dot_diam#=2dot_size#;
+ define_whole_blacker_pixels(dot_diam);
+ pos1(dot_diam,0); pos2(dot_diam,90);
+ lft x1l=hround(.5w-.5dot_diam);
+ y1+.5dot_diam=vround(math_axis+.5dot_diam);
+ z1=z2; dot(1,2); % dot
+ endchar;
+enddef;
+
+def cupp(expr code) =
+ beginchar(code, 10u#, v_center(7u#));
+ adjust_fit(0,0); pickup rule.nib; autorounded;
+ lft x1=hround u; y1=vround(math_axis+.15x_height);
+ x3=w-x1; y3=y1;
+ penpos2(rule_thickness,90); x2=.5w;
+ y2=good.y(math_axis-.15x_height);
+ numeric theta; theta=angle((z2-z1)yscaled 3);
+ penpos1(rule_thickness,90+theta);
+ penpos3(rule_thickness,90-theta);
+ draw z1{dir theta}...z2...{dir-theta}z3;
+ endchar;
+enddef;
+
+def capp(expr code) =
+ beginchar(code, 10u#, v_center(7u#));
+ adjust_fit(0,0); pickup rule.nib; autorounded;
+ lft x1=hround u; y1=vround(math_axis-.15x_height);
+ x3=w-x1; y3=y1;
+ penpos2(rule_thickness,90); x2=.5w;
+ y2=good.y(.15x_height+math_axis);
+ numeric theta; theta=angle((z2-z1)yscaled 3);
+ penpos1(rule_thickness,90+theta);
+ penpos3(rule_thickness,90-theta);
+ draw z1{dir theta}...z2...{dir-theta}z3;
+ endchar;
+enddef;
+