summaryrefslogtreecommitdiff
path: root/fonts/bbold
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/bbold
Initial commit
Diffstat (limited to 'fonts/bbold')
-rw-r--r--fonts/bbold/INSTALL40
-rw-r--r--fonts/bbold/README12
-rw-r--r--fonts/bbold/bbbase.mf374
-rw-r--r--fonts/bbold/bbgreekl.mf684
-rw-r--r--fonts/bbold/bbgreeku.mf315
-rw-r--r--fonts/bbold/bbligs.mf91
-rw-r--r--fonts/bbold/bblower.mf760
-rw-r--r--fonts/bbold/bbnum.mf300
-rw-r--r--fonts/bbold/bbold.dtx265
-rw-r--r--fonts/bbold/bbold.mf9
-rw-r--r--fonts/bbold/bbold.pdfbin0 -> 159217 bytes
-rw-r--r--fonts/bbold/bbold10.mf19
-rw-r--r--fonts/bbold/bbold12.mf19
-rw-r--r--fonts/bbold/bbold17.mf19
-rw-r--r--fonts/bbold/bbold5.mf19
-rw-r--r--fonts/bbold/bbold6.mf19
-rw-r--r--fonts/bbold/bbold7.mf19
-rw-r--r--fonts/bbold/bbold8.mf19
-rw-r--r--fonts/bbold/bbold9.mf19
-rw-r--r--fonts/bbold/bbparams.mf205
-rw-r--r--fonts/bbold/bbpunc.mf691
-rw-r--r--fonts/bbold/bbupper.mf698
22 files changed, 4596 insertions, 0 deletions
diff --git a/fonts/bbold/INSTALL b/fonts/bbold/INSTALL
new file mode 100644
index 0000000000..7e2bf6bfc8
--- /dev/null
+++ b/fonts/bbold/INSTALL
@@ -0,0 +1,40 @@
+THE BBOLD SYMBOL FONT
+
+6 APRIL 1994
+
+This distribution contains the bbold symbol font:
+
+ INSTALL bbgreeku.mf bbold.dtx bbold17.mf bbold8.mf
+ README bbligs.mf bbold.mf bbold5.mf bbold9.mf
+ bbbase.mf bblower.mf bbold10.mf bbold6.mf bbparams.mf
+ bbgreekl.mf bbnum.mf bbold12.mf bbold7.mf bbpunc.mf
+ bbupper.mf
+
+To install the fonts, you should:
+
+ * run METAFONT on the fonts, for example under Unix you say:
+
+ mf "\mode=localfont; input bbold5;"
+ mf "\mode=localfont; input bbold6;"
+ mf "\mode=localfont; input bbold7;"
+ mf "\mode=localfont; input bbold8;"
+ mf "\mode=localfont; input bbold9;"
+ mf "\mode=localfont; input bbold12;"
+ mf "\mode=localfont; input bbold17;"
+
+ * move bbold*.tfm into a TeX font metrics directory
+
+ * move bbold*.*pk into a TeX bitmaps directory
+
+If you want to use the bbold font in LaTeX2e, you should:
+
+ * run LaTeX2e on bbold.dtx
+
+ * move bbold.sty and Ubbold.fd into a TeX inputs directory
+
+ * read the documentation in bbold.dvi
+
+This file should only be distributed as part of the bbold
+distribution.
+
+Copyright 1994 Alan Jeffrey
diff --git a/fonts/bbold/README b/fonts/bbold/README
new file mode 100644
index 0000000000..21f4da8d73
--- /dev/null
+++ b/fonts/bbold/README
@@ -0,0 +1,12 @@
+THE BBOLD SYMBOL FONT
+
+6 APRIL 1994
+
+This directory contains the bbold symbol font. This is a geometric
+sans serif blackboard bold font, for use in mathematics.
+
+Read the INSTALL file for details of how to install the bbold
+package.
+
+Alan Jeffrey (alanje@cogs.susx.ac.uk)
+
diff --git a/fonts/bbold/bbbase.mf b/fonts/bbold/bbbase.mf
new file mode 100644
index 0000000000..dd1f3c633b
--- /dev/null
+++ b/fonts/bbold/bbbase.mf
@@ -0,0 +1,374 @@
+% Blackboard bold base file, containing lots of horrible hacks.
+% Alan Jeffrey, 12--18 Dec 1989.
+
+% DIGITIZATION
+
+% I'm doing all my own digitization, so I don't need help from MF.
+autorounding := 0;
+
+% To get the unsharp version of x#, say unsharp x#.
+def unsharp = hppp * enddef;
+
+% The only pen I'm working with is of size pen_size. This makes life
+% rather easier. To find the x-coordinate whose left-hand edge is
+% at hround x, say leftround x, and similarly for rightround,
+% topround and bottomround.
+def leftround expr x = hround x + 1/2 pen_size enddef;
+def rightround expr x = hround x - 1/2 pen_size enddef;
+def topround expr y = vround y - 1/2 pen_size enddef;
+def bottomround expr y = vround y + 1/2 pen_size enddef;
+
+% Using this, I can give the equivalent of define_whole_pixels...
+def define_whole_top_pixels (text t) =
+ forsuffixes $ = t:
+ $ := topround unsharp $.#;
+ endfor
+enddef;
+
+def define_whole_bottom_pixels (text t) =
+ forsuffixes $ = t:
+ $ := bottomround unsharp $.#;
+ endfor
+enddef;
+
+% POINTS
+
+% The point y~x is short for (x,y). The reason for switching the
+% points around is that I find it easier to say Top~Left than
+% (Left, Top).
+primarydef x ~ y = (y,x) enddef;
+
+% To find the average of two points, say p -+- q.
+primarydef x ~ y = (y,x) enddef;
+tertiarydef x -+- y = .5[x,y] enddef;
+
+% To get the point 1/2fatness above p, say above p. This is useful
+% for drawing lines fatness in width. Similarly we have commands
+% below, leftof and rightof.
+def above secondary p =
+ p + 1/2fatness * up
+enddef;
+
+def below secondary p =
+ p + 1/2fatness * down
+enddef;
+
+def leftof secondary p =
+ p + 1/2fatness * left
+enddef;
+
+def rightof secondary p =
+ p + 1/2fatness * right
+enddef;
+
+% The command farleftof is equivalent to leftof leftof, and similarly
+% farrightof.
+def farleftof secondary p =
+ p + fatness * left
+enddef;
+
+def farrightof secondary p =
+ p + fatness * right
+enddef;
+
+% To get curves with o-correction, we need to be able to move
+% o pixels up or down.
+def oabove secondary p =
+ p + o * up
+enddef;
+
+def obelow secondary p =
+ p + o * down
+enddef;
+
+% DECLARATIONS
+
+% To declare a new variable foo of type T, say var (T) foo.
+def var (text type) text declarations =
+ save declarations;
+ type declarations
+enddef;
+
+% PATHS
+
+% Given a cyclic path p, outline p draws the path and fills the inside
+% with white. This is stolen from the MF book, exercise 13.11.
+def outline expr c =
+ begingroup
+ picture region;
+ region := nullpicture;
+ interim turningcheck := 0;
+ addto region contour c;
+ cull region dropping (0,0);
+ cullit;
+ addto currentpicture also -region;
+ cullit;
+ draw c
+ endgroup
+enddef;
+
+% Given a path p, leftside p is the path 1/2 fatness to its left,
+% and similarly rightside.
+def leftside primary apath =
+ apath shifted (1/2fatness * left)
+enddef;
+
+def rightside primary apath =
+ apath shifted (1/2fatness * right)
+enddef;
+
+% Given a path p, fatten p draws the leftside of p,
+% the rightside of p, and joins them up with straight lines.
+def fatten expr apath =
+ leftside apath
+ -- (reverse rightside apath)
+ -- cycle
+enddef;
+
+% Given a point p, splodge p draws an o-corrected circle of radius
+% fatness around p.
+def splodge expr apoint =
+ above apoint + o*up {right}
+ .. rightof apoint + o*right {down}
+ .. below apoint + o*down {left}
+ .. leftof apoint + o*left {up}
+ .. cycle
+enddef;
+
+% The command splodgel does the same, but doesn't close the cycle,
+% and leaves the current point at the left of the circle.
+def splodgel tertiary apoint =
+ leftof apoint + o*left {up}
+ .. above apoint + o*up {right}
+ .. rightof apoint + o*right {down}
+ .. below apoint + o*down {left}
+ .. leftof apoint + o*left {up}
+enddef;
+
+% Similarly, splodger leaves the current point at the right of the
+% circle.
+def splodger tertiary apoint =
+ rightof apoint + o*right {down}
+ .. below apoint + o*down {left}
+ .. leftof apoint + o*left {up}
+ .. above apoint + o*up {right}
+ .. rightof apoint + o*right {down}
+enddef;
+
+% CLIPPING
+
+% sometime (p, q) gives the time along p when it intersects q.
+def sometime (expr apath, bpath) =
+ xpart (apath intersectiontimes bpath)
+enddef;
+
+% othertime (p, q) gives another time at which p intersects q.
+def othertime (expr apath, bpath) =
+ length apath - sometime (reverse apath) (reverse bpath)
+enddef;
+
+% firsttime (p, q) gives the smallest of sometime (p,q) and othertime (p,q).
+def firsttime (expr apath, bpath) =
+ min (sometime (apath) (bpath), othertime (apath) (bpath))
+enddef;
+
+% lasttime (p, q) gives the largest of the two times.
+def lasttime (expr apath, bpath) =
+ max (sometime (apath) (bpath), othertime (apath) (bpath))
+enddef;
+
+% We can then clip p with q by finding the subpath of p from 0 to
+% the time p intersects q.
+def cliponce (expr apath, clippath) =
+ subpath (0, sometime (apath) (clippath)) of apath
+enddef;
+
+% Similarly, if p intersects q twice, we can find the path between
+% the two times it intersects with cliptwice.
+def cliptwice (expr apath, clippath) =
+ subpath
+ (firsttime (apath) (clippath), lasttime (apath) (clippath))
+ of apath
+enddef;
+
+% Given a path p and two paths q and r which intersect p,
+% we can find the path between when p crosses q and when p crosses r.
+% someclipbetween (p, q, r) will always start at q and finish at r.
+def someclipbetween (expr apath, firstclip, secondclip) =
+ subpath
+ (sometime (apath) (firstclip),
+ sometime (apath) (secondclip))
+ of
+ apath
+enddef;
+
+% firstclipbetween does the same, but if p intersects q and r more
+% than once, it gives the first clipping.
+def firstclipbetween (expr apath, firstclip, secondclip) =
+ subpath
+ (firsttime (apath) (firstclip),
+ firsttime (apath) (secondclip))
+ of
+ apath
+enddef;
+
+% lastclipbetween gives the last clipping.
+def lastclipbetween (expr apath, firstclip, secondclip) =
+ subpath
+ (lasttime (apath) (firstclip),
+ lasttime (apath) (secondclip))
+ of
+ apath
+enddef;
+
+% We can join these together and clip fat lines.
+def fatcliponce (expr apath, clippath) =
+ cliponce (leftside apath) (clippath)
+ -- someclipbetween (clippath) (leftside apath) (rightside apath)
+ -- reverse cliponce (rightside apath) (clippath)
+ -- cycle
+enddef;
+
+def fatcliptwice (expr apath, clippath) =
+ cliptwice (leftside apath) (clippath)
+ -- lastclipbetween (clippath) (leftside apath) (rightside apath)
+ -- cliptwice (rightside apath) (reverse clippath)
+ -- firstclipbetween (clippath) (rightside apath) (leftside apath)
+ -- cycle
+enddef;
+
+% BBCHAR.
+
+% bbchar (c) (l#, w#, r#) (t#, b#) begins a character at code c,
+% of width w# with l# gap at the left and r# gap at the right.
+% It's topmost point is at t# and its bottommost point at b#.
+% From these parameters we calculate Width (the width of the character
+% in whole pixels) and hardTop and hardBottom (the exact top and bottom
+% of the character). Top is then 1/2 pensize from the top of the character,
+% and Bottom is 1/2 pensize from the bottom. This means if we draw a line
+% through top, the top of it will exactly touch the top. We then calculate
+% Left, Middle, and Right in the same way, using calculateLeftetc.
+
+def bbchar
+ (expr code)
+ (expr sharphardLeft, sharpWidth, sharprightgap)
+ (expr sharphardTop, sharphardBottom) =
+
+ beginchar
+ (code)
+ (sharphardLeft + sharpWidth + sharprightgap)
+ (max (sharphardTop, 0pt#))
+ (max (-sharphardBottom, 0pt#));
+
+ save Top, Bottom, Horizon, hardTop, hardBottom,
+ Width, hardLeft, hardRight, Left, Right, Middle;
+
+ hardTop# = sharphardTop;
+ hardBottom# = sharphardBottom;
+ Width# = sharpWidth;
+ hardLeft# = sharphardLeft;
+ hardRight# = sharphardLeft + sharpWidth;
+
+ define_whole_pixels (Width);
+ define_whole_vertical_pixels (hardTop, hardBottom);
+ Top = topround hardTop;
+ Bottom = bottomround hardBottom;
+
+ Horizon = .5 [Top, Bottom];
+
+ calculateLeftetc;
+
+ pickup pencircle scaled pen_size;
+
+enddef;
+
+def calculateLeftetc =
+ hardLeft := floor (unsharp hardLeft#);
+ hardRight := hardLeft + Width;
+
+ Left := (hardLeft + 1/2pen_size);
+ Middle := (hardLeft + 1/2Width);
+ Right := (hardRight - 1/2pen_size);
+enddef;
+
+% bbcap is bbchar with the top at ATop# and the bottom at aBottom#.
+def bbcap (expr code, leftgap, width, rightgap) =
+ bbchar (code) (leftgap, width, rightgap) (ATop#, aBottom#);
+enddef;
+
+% bbnum is bbchar with the dimensions of a number hard-wired.
+def bbnum (expr code) =
+ bbchar (code) (medgap#, numeral#, medgap#) (oneTop#, aBottom#);
+enddef;
+
+% For characters such as < and > which appear a lot blacker than the
+% others, we can surround the character by beginblacker n ... endblacker,
+% which temporarily multiplies fatness by n.
+def beginblacker expr blackness =
+ begingroup
+ save oldfatness;
+ oldfatness# := fatness#;
+ save fatness;
+ fatness# := oldfatness# * blackness;
+ define_whole_pixels (fatness)
+enddef;
+
+let endblacker = endgroup;
+
+% SYMMETRY
+
+% To try to get characters symmetric, we need to round the width so there
+% are the same number of characters on the left of the central vertical
+% as there are on the right. So if we are symmetrical around a pen of
+% size 2n, we need to make the width even. If we are symmetrical around
+% a pen of size 2n+1 we need to make the width odd. This is done with
+% roundlike (x) y, which rounds y to be even iff x is even.
+
+def roundlike (expr x) expr y =
+ 2 * (round (x -+- y)) - x
+enddef;
+
+% To make the character symmetric, we round Width like pen_size.
+def symmetric =
+ Width := roundlike (pen_size) unsharp Width#;
+ calculateLeftetc
+enddef;
+
+% To make the character symmetric around a fat vertical, we round
+% Width like fatness + pen_size.
+def fatsymmetric =
+ Width := roundlike (fatness + pen_size) unsharp Width#;
+ calculateLeftetc
+enddef;
+
+% DRAWING THE CHARACTERS ON THE SCREEN
+
+% makebox and maketicks nicked from cmbase, adjusted for this job.
+
+def makebox(text rule) =
+ for y=0, hardBottom, hardTop:
+ rule((0,y)t_,(w,y)t_); endfor % horizontals
+ for x=0,hardLeft,hardRight,w:
+ rule((x,hardBottom)t_,(x,hardTop)t_); endfor % verticals
+enddef;
+
+def maketicks(text rule) =
+ for y=0, hardBottom, hardTop:
+ rule((-10,y)t_,(0,y)t_); % horizontals at left
+ rule((w,y)t_,(w+10,y)t_); % horizontals at right
+ endfor
+ for x=0,hardLeft,hardRight,w:
+ rule((x,hardBottom-10)t_,(x,hardBottom)t_); % verticals at bottom
+ rule((x,hardTop)t_,(x,hardTop+10)t_); % verticals at top
+ endfor % verticals at top
+enddef;
+
+% HACKS TO MAKE CMR WORK
+
+% Some parameters I never use, but are needed by the cmr parameter files.
+boolean
+ square_dots, hefty, serifs, monospace,
+ variant_g, low_asterisk, math_fitting;
+
+% And that's that.
+
diff --git a/fonts/bbold/bbgreekl.mf b/fonts/bbold/bbgreekl.mf
new file mode 100644
index 0000000000..a6b70be9e6
--- /dev/null
+++ b/fonts/bbold/bbgreekl.mf
@@ -0,0 +1,684 @@
+% Blackboard bold lower case Greek, Alan Jeffrey, 15--18 Dec 1989.
+%
+% These characters occupy spaces oct "013" to oct "040", and oct "177".
+% This is because ! occupies oct "041" and I have to stick omega
+% somewhere.
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "013")
+ (smallgap#, medlower#, smallgap# + jut#)
+ (aTop#, aBottom#);
+
+ "Lowercase Greek alpha";
+
+ % The curve.
+ var (path) alphapath;
+
+ alphapath
+ = Top~(Right + jut) {down}
+ .. obelow Bottom~Middle {left}
+ .. Horizon~Left {up}
+ .. oabove Top~Middle {right}
+ .. Bottom~(Right + jut){right};
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (rightof obelow Bottom~Left -- rightof oabove Top~Left)
+ (alphapath);
+
+ % The curve.
+ draw alphapath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "014")
+ (medgap#, smalllower# + fatness#, smallgap#)
+ (bTop#, gBottom#);
+
+ "Lowercase Greek beta";
+
+ % The top curve.
+ var (path) betapath;
+
+ betapath
+ = aBottom~Left
+ --- aTop~Left
+ .. oabove rightof Top~Middle {right}
+ .. (Top -+- aTop)~Right {down}
+ .. rightof aTop~Middle {left};
+
+ % The emphasis
+ draw
+ fatcliponce
+ (rightof Bottom~Left -- rightof oabove Top~Left)
+ (betapath);
+
+ % The top curve.
+ draw betapath;
+
+ % The bottom curve.
+ draw
+ rightof aTop~Middle {right}
+ .. aMiddle~Right {down}
+ .. obelow rightof aBottom~Middle {left}
+ .. farrightof (aBottom + cCurl)~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "015")
+ (smallgap#, medlower#, smallgap#)
+ (aTop#, gBottom#);
+
+ "Lowercase Greek gamma";
+
+ % The curve.
+ var (path) gammapath;
+
+ gammapath
+ = Top~Left {right}
+ .. aBottom~Right {down}
+ .. obelow Bottom~Middle {left}
+ .. aBottom~Left {up}
+ .. Top~Right {right};
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (obelow rightof Bottom~Left -- rightof Top~Left)
+ (subpath (1,infinity) of gammapath);
+
+ % The curve.
+ draw gammapath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "016")
+ (smallgap#, medlower#, smallgap#)
+ (bTop#, aBottom#);
+
+ "Lowercase Greek delta";
+
+ % The path.
+ var (path) deltapath;
+
+ deltapath
+ = aTop~Middle {left}
+ .. aMiddle~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. aMiddle~Right {up}
+ .. aTop~Middle
+ .. (aTop -+- Top)~Left {up}
+ .. oabove Top~Middle {right}
+ .. (Top - cCurl)~Right;
+
+ % The emphasis, clipped by the first bit of the curve (ie the bowl).
+ draw
+ fatcliptwice
+ (obelow rightof Bottom~Left -- rightof Top~Left)
+ (subpath (0,4) of deltapath);
+
+ % The curve.
+ draw deltapath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "017")
+ (smallgap#, medlower#, smallgap#)
+ (aTop#, aBottom#);
+
+ "Lowercase Greek epsilon";
+
+ % The curve.
+ var (path) epsilonpath;
+
+ epsilonpath
+ = (Top - cCurl)~Right
+ .. oabove Top~Middle {left}
+ .. aMiddle~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. (Bottom + cCurl)~Right;
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (obelow rightof Bottom~Left -- oabove rightof Top~Left)
+ (epsilonpath);
+
+ % The curve.
+ draw epsilonpath;
+
+ % The bar.
+ draw
+ farrightof eBar~Left
+ -- farrightof eBar~(Left + jut)
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "020")
+ (medgap#, smalllower#, smallgap#)
+ (bTop#, gBottom#);
+
+ "Lowercase Greek zeta";
+
+ % The curl.
+ var (path) zetapath;
+
+ zetapath
+ = Top~Right
+ .. aMiddle~Left {down}
+ .. aBottom~Middle
+ .. (aBottom -+- Bottom)~Right {down}
+ .. Bottom~(Right - jut) {left};
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (rightof Bottom~Left -- rightof Top~Left)
+ (zetapath);
+
+ % The curl.
+ draw zetapath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "021")
+ (medgap#, smalllower# + fatness#, medgap#)
+ (aTop#, gBottom#);
+
+ "Lowercase Greek eta";
+
+ % The emphasis.
+ draw
+ fatten
+ rightof aBottom~Left
+ -- rightof Top~Left;
+
+ % The curl.
+ draw
+ farrightof (Top - cCurl)~Left
+ .. oabove rightof Top~Middle {right}
+ .. (Top - hCurl)~Right
+ --- Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "022")
+ (smallgap#, medlower#, smallgap#)
+ (bTop#, aBottom#);
+
+ "Lowercase Greek theta";
+
+ % The curve.
+ var (path) thetapath;
+
+ thetapath
+ = Horizon~Right {up}
+ .. oabove Top~Middle {left}
+ .. Horizon~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. cycle;
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (rightof obelow Bottom~Left -- oabove rightof Top~Left)
+ (thetapath);
+
+ % The curve.
+ draw thetapath;
+
+ % The bar.
+ draw
+ farrightof Horizon~Left
+ -- Horizon~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "023")
+ (medgap#, tiny#, medgap#)
+ (aTop#, aBottom#);
+
+ "Lowercase Greek iota";
+
+ % The vertical, clipped by a curve.
+ draw
+ fatcliponce
+ (Top~Middle -- Bottom~Middle)
+ (leftof (Bottom + hCurl)~Middle {down}
+ .. rightof Bottom~Middle {right})
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "024")
+ (medgap#, smalllower# + fatness#, smallgap#)
+ (aTop#, aBottom#);
+
+ "Lowercase Greek kappa";
+
+ % The vertical.
+ draw
+ fatten
+ rightof Bottom~Left
+ -- rightof Top~Left;
+
+ % The top stroke.
+ draw
+ farrightof eBar~Left
+ -- Top~Right;
+
+ % The bottom stroke.
+ draw
+ farrightof eBar~Left {right}
+ .. Bottom~Right {right}
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "025")
+ (smallgap#, medlower#, smallgap#)
+ (bTop#, aBottom#);
+
+ "Lowercase Greek lambda";
+
+ % The SW diagonal.
+ draw
+ Horizon~Middle
+ -- Bottom~Left;
+
+ % The SE diagonal, fattened.
+ outline
+ fatten
+ rightof Top~Left
+ -- leftof Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "026")
+ (medgap#, smalllower# + fatness#, medgap#)
+ (aTop#, gBottom#);
+
+ "Lowercase Greek mu";
+
+ % The left vertical, fattened.
+ draw
+ fatten
+ rightof Bottom~Left
+ -- rightof Top~Left;
+
+ % The curl.
+ draw
+ farrightof (aBottom + cCurl)~Left
+ .. obelow rightof aBottom~Middle {right}
+ .. (aBottom + hCurl)~Right
+ --- Top~Right;
+
+ % The right vertical.
+ draw
+ Top~Right
+ -- aBottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "027")
+ (medgap#, medlower#, smallgap#)
+ (aTop#, aBottom#);
+
+ "Lowercase Greek nu";
+
+ % The left vertical, clipped by the stroke.
+ draw
+ fatcliponce
+ (rightof Top~Left -- rightof Bottom~Left)
+ (Bottom~Left .. Top~Right {up});
+
+ % The stroke.
+ draw
+ Bottom~Left
+ .. Top~Right {up}
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "030")
+ (medgap#, smalllower#, smallgap#)
+ (bTop#, gBottom#);
+
+ "Lowercase Greek xi";
+
+ % The curls.
+ var (path) xitop, xibottom;
+
+ xibottom
+ = farrightof aTop~(Left + jut) {left}
+ .. aMiddle~Left {down}
+ .. aBottom~Middle
+ .. (aBottom -+- Bottom)~Right {down}
+ .. Bottom~(Right - jut) {left};
+
+ xitop
+ = Top~Right {left}
+ .. (Top -+- aTop)~Left {down}
+ .. farrightof aTop~(Left + jut) {right};
+
+ % The top emphasis.
+ draw
+ fatcliptwice
+ (rightof Bottom~Left -- rightof Top~Left)
+ (xitop);
+
+ % The top curl.
+ draw xitop;
+
+ % The bottom emphasis.
+ draw
+ fatcliptwice
+ (rightof Bottom~Left -- rightof Top~Left)
+ (xibottom);
+
+ % The bottom curl.
+ draw xibottom
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "031")
+ (smallgap#, smalllower# + fatness#, smallgap#)
+ (aTop#, aBottom#);
+
+ "Lowercase Greek pi";
+
+ % The top bar.
+ draw
+ Top~Left
+ --- Top~Right;
+
+ % The left vertical, fattened.
+ draw
+ fatten
+ rightof Bottom~(Left + jut)
+ -- rightof Top~(Left + jut);
+
+ % The right vertical.
+ draw
+ Bottom~(Right - jut)
+ -- Top~(Right - jut)
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "032")
+ (medgap#, medlower#, smallgap#)
+ (aTop#, gBottom#);
+
+ "Lowercase Greek rho";
+
+ % The bowl.
+ var (path) rhopath;
+
+ rhopath
+ = aMiddle~Left {up}
+ .. oabove aTop~Middle {right}
+ .. aMiddle~Right {down}
+ .. obelow aBottom~Middle {left}
+ .. cycle;
+
+ % The bowl.
+ draw rhopath;
+
+ % The emphasis, clipped by the beginning of the curve.
+ outline
+ fatcliponce
+ (rightof Bottom~Left -- rightof bracketTop~Left)
+ (subpath (0,2) of rhopath);
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "033")
+ (smallgap#, medlower#, smallgap# + jut#)
+ (aTop#, aBottom#);
+
+ "Lowercase Greek sigma";
+
+ % The bowl.
+ var (path) sigmapath;
+
+ sigmapath
+ = Horizon~Right {up}
+ .. Top~Middle {left}
+ .. Horizon~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. cycle;
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (rightof obelow Bottom~Left -- rightof Top~Left)
+ (sigmapath);
+
+ % The bowl.
+ draw sigmapath;
+
+ % The bar, jutting out to the right.
+ draw
+ Top~Middle
+ -- Top~(Right + jut)
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "034")
+ (smallgap#, medlower#, smallgap#)
+ (aTop#, aBottom#);
+
+ fatsymmetric;
+
+ "Lowercase Greek tau";
+
+ % The top line.
+ draw
+ Top~Left
+ -- Top~Right;
+
+ % The vertical, clipped by a curve.
+ draw
+ fatcliponce
+ (Top~Middle -- Bottom~Middle)
+ (leftof (Bottom + hCurl)~Middle {down}
+ .. rightof Bottom~Middle {right})
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "035")
+ (medgap#, medlower#, medgap#)
+ (aTop#, aBottom#);
+
+ "Lowercase Greek upsilon";
+
+ % The curve.
+ var (path) upsilonpath;
+
+ upsilonpath
+ = Top~Left
+ --- (Bottom + hCurl)~Left
+ .. obelow Bottom~Middle {right}
+ .. (Bottom + hCurl)~Right
+ --- Top~Right;
+
+ % The emphasis.
+ draw
+ fatcliponce
+ (rightof Top~Left -- rightof obelow Bottom~Left)
+ (upsilonpath);
+
+ % The curve.
+ draw upsilonpath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "036")
+ (smallgap#, medlower#, smallgap#)
+ (bTop#, gBottom#);
+
+ fatsymmetric;
+
+ "Lowercase Greek phi";
+
+ % The bowl.
+ draw
+ Middle~Right {up}
+ .. aTop~Middle {left}
+ .. aMiddle~Left {down}
+ .. aBottom~Middle {right}
+ .. cycle;
+
+ % The vertical, fattened.
+ outline
+ fatten
+ Top~Middle
+ -- Bottom~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "037")
+ (smallgap#, medlower#, smallgap#)
+ (aTop#, gBottom#);
+
+ "Lowercase Greek chi";
+
+ % The SE diagonal.
+ draw
+ Top~Left
+ -- Bottom~Right;
+
+ % The SW diagonal, fattened.
+ outline
+ fatten
+ leftof Top~Right
+ -- rightof Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "040")
+ (medgap#, medlower#, medgap#)
+ (bTop#, gBottom#);
+
+ fatsymmetric;
+
+ "Lowercase Greek psi";
+
+ % The curve.
+ draw
+ aTop~Left
+ --- (aBottom + hCurl)~Left
+ .. aBottom~Middle {right}
+ .. (aBottom + hCurl)~Right
+ --- aTop~Right;
+
+ % The vertical, fattened.
+ outline
+ fatten
+ Top~Middle
+ -- Bottom~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "177")
+ (smallgap#, biglower#, smallgap#)
+ (aTop#, aBottom#);
+
+ symmetric;
+
+ "Lowercase Greek omega";
+
+ % The left curve.
+ var (path) omegapath;
+
+ omegapath
+ = farrightof Top~Left
+ .. Horizon~Left {down}
+ .. obelow Bottom~(Left -+- Middle) {right}
+ .. eBar~Middle {up};
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (rightof Top~Left -- obelow rightof Bottom~Left)
+ (omegapath);
+
+ % The left curve.
+ draw omegapath;
+
+ % The right curve.
+ draw
+ eBar~Middle {down}
+ .. obelow Bottom~(Right -+- Middle) {right}
+ .. Horizon~Right {up}
+ .. farleftof Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
diff --git a/fonts/bbold/bbgreeku.mf b/fonts/bbold/bbgreeku.mf
new file mode 100644
index 0000000000..802810a528
--- /dev/null
+++ b/fonts/bbold/bbgreeku.mf
@@ -0,0 +1,315 @@
+% Blackboard bold uppercase greek, Alan Jeffrey, 13--18 Dec 1989.
+%
+% These characters occupy the same space they do in cmr, ie oct "000"
+% to oct "012".
+
+% -------------------------------------------------------------------
+
+bbcap
+ (oct "000")
+ (biggap#, smallcap#, smallgap#);
+
+ "Uppercase Greek Gamma";
+
+ % The vertical, fattened.
+ draw
+ fatten
+ rightof Bottom~Left
+ -- rightof Top~Left;
+
+ % The horizontal.
+ draw
+ Top~Left
+ -- Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ (oct "001")
+ (smallgap#, medcap#, smallgap#);
+
+ symmetric;
+
+ "Uppercase Greek Delta";
+
+ % Left diagonal, clipped by the right diagonal.
+ draw
+ fatcliponce
+ (rightof Bottom~Left -- rightof Top~Middle)
+ (Top~Middle -- Bottom~Right);
+
+ % Right diagonal.
+ draw
+ Top~Middle
+ -- Bottom~Right;
+
+ % Base.
+ draw
+ Bottom~Left
+ -- Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ (oct "002")
+ (medgap#, medcap#, medgap#);
+
+ "Uppercase Greek Theta";
+
+ % The circle.
+ var (path) Thetapath;
+
+ Thetapath
+ = oabove Top~Middle {left}
+ .. Horizon~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. Horizon~Right {up}
+ .. cycle;
+
+ % The emphasis at the left.
+ draw
+ fatcliptwice
+ (rightof obelow Bottom~Left -- oabove rightof Top~Left)
+ (Thetapath);
+
+ % The circle.
+ draw Thetapath;
+
+ % The dash in the middle.
+ draw
+ farrightof Horizon~(Left + space)
+ -- Horizon~(Right - space)
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ (oct "003")
+ (smallgap#, medcap#, smallgap#);
+
+ symmetric;
+
+ "Uppercase Greek Lambda";
+
+ % Left diagonal, clipped by the right diagonal.
+ draw
+ fatcliponce
+ (rightof Bottom~Left -- rightof Top~Middle)
+ (Top~Middle -- Bottom~Right);
+
+ % Right diagonal.
+ draw
+ Top~Middle
+ -- Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ (oct "004")
+ (medgap#, medcap#, medgap#);
+
+ symmetric;
+
+ "Uppercase Greek Xi";
+
+ % Top line.
+ draw
+ Top~Left
+ -- Top~Right;
+
+ % Middle line.
+ draw
+ Horizon~(Left + bigspace)
+ -- Horizon~(Right - bigspace);
+
+ % Bottom line.
+ draw
+ Bottom~Left
+ -- Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ (oct "005")
+ (biggap#, smallcap#, biggap#);
+
+ "Uppercase Greek Pi";
+
+ % The right line.
+ draw
+ Top~Right
+ -- Bottom~Right;
+
+ % The bar.
+ draw
+ Top~Left
+ -- Top~Right;
+
+ % The left line, fattened.
+ draw
+ fatten
+ rightof Top~Left
+ -- rightof Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ (oct "006")
+ (medgap#, medcap#, medgap#);
+
+ "Uppercase Greek Sigma";
+
+ % The top line.
+ draw
+ Top~Left
+ -- Top~Right;
+
+ % The bottom line.
+ draw
+ Bottom~Left
+ -- Bottom~Right;
+
+ % The diagonals.
+ draw
+ fatten
+ rightof Bottom~Left
+ -- Horizon~Middle
+ -- rightof Top~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ (oct "007")
+ (smallgap#, medcap#, smallgap#);
+
+ fatsymmetric;
+
+ "Uppercase Greek Upsilon";
+
+ % The stem.
+ draw
+ fatten
+ Bottom~Middle
+ -- BBar~Middle;
+
+ % The left arc.
+ draw
+ leftof BBar~Middle
+ --- leftof (Top - CCurl)~Middle
+ .. oabove ((leftof Top~Left) -+- (Top~Middle)) {left}
+ .. (Top - CCurl)~Left {down};
+
+ % The right arc.
+ draw
+ rightof BBar~Middle {up}
+ --- rightof (Top - CCurl)~Middle
+ .. oabove ((rightof Top~Right) -+- (Top~Middle)) {right}
+ .. (Top - CCurl)~Right {down}
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ (oct "010")
+ (medgap#, medcap#, medgap#);
+
+ fatsymmetric;
+
+ "Uppercase Greek Phi";
+
+ % The circle.
+ draw
+ (Top - CCurl)~Middle {left}
+ .. Horizon~Left {down}
+ .. (Bottom + CCurl)~Middle {right}
+ .. Horizon~Right {up}
+ .. cycle;
+
+ % The vertical.
+ outline
+ fatten
+ Bottom~Middle
+ -- Top~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ (oct "011")
+ (smallgap#, medcap#, smallgap#);
+
+ fatsymmetric;
+
+ "Uppercase Greek Psi";
+
+ % The stroke.
+ draw
+ (Top - CCurl)~Left {right}
+ .. leftof Horizon~(Left -+- Middle) {down}
+ .. (Bottom + CCurl)~Middle {right}
+ .. rightof Horizon~(Right -+- Middle) {up}
+ .. (Top - CCurl)~Right {right};
+
+ % The vertical.
+ outline
+ fatten
+ Bottom~Middle
+ -- Top~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ (oct "012")
+ (medgap#, medcap#, medgap#);
+
+ "Uppercase Greek Omega";
+
+ % The curve.
+ var (path) Omegapath;
+
+ Omegapath
+ = farrightof Bottom~Left
+ .. Horizon~Left {up}
+ .. oabove Top~Middle {right}
+ .. Horizon~Right {down}
+ .. farleftof Bottom~Right ;
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (rightof Bottom~Left -- oabove rightof Top~Left)
+ (Omegapath);
+
+ % The curve.
+ draw Omegapath;
+
+ % The left foot.
+ draw
+ Bottom~Left
+ -- farrightof Bottom~Left;
+
+ % The right foot.
+ draw
+ Bottom~Right
+ -- farleftof Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
diff --git a/fonts/bbold/bbligs.mf b/fonts/bbold/bbligs.mf
new file mode 100644
index 0000000000..92a38e4775
--- /dev/null
+++ b/fonts/bbold/bbligs.mf
@@ -0,0 +1,91 @@
+% Blackboard bold ligatures, Alan Jeffrey, 13--18 Dec 1989.
+%
+% Provides --, ---, `` and ''.
+% These are put in positions
+%
+% -- oct "173"
+% --- oct "175"
+% `` oct "176"
+% '' oct "042"
+
+ligtable "-": "-" =: oct "173";
+ligtable oct "173": "-" =: oct "175";
+ligtable "`": "`" =: oct "176";
+ligtable "'": "'" =: oct "042";
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "173")
+ (smallgap#, 0.5bigcap#, smallgap#)
+ (aTop#, aBottom#);
+
+ "En dash `--'";
+
+ % The line.
+ draw
+ dashMiddle~Left
+ -- dashMiddle~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "175")
+ (smallgap#, bigcap#, smallgap#)
+ (aTop#, aBottom#);
+
+ "Em dash `---'";
+
+ % The line.
+ draw
+ dashMiddle~Left
+ -- dashMiddle~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "176")
+ (medgap#, 2tiny# + space#, medgap#)
+ (bTop#, bTop# - tiny# - comma_depth#);
+
+ "Opening quotes ```'";
+
+ % The left quote.
+ draw
+ splodgel above rightof Bottom~Left
+ .. farrightof Top~Left;
+
+ % The right quote.
+ draw
+ splodgel above leftof Bottom~Right
+ .. Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (oct "042")
+ (medgap#, 2tiny# + space#, medgap#)
+ (bTop#, bTop# - tiny# - comma_depth#);
+
+ "Closing quotes `'''";
+
+ % The left quote
+ draw
+ splodger below rightof Top~Left
+ .. Bottom~Left;
+
+ % The right quote
+ draw
+ splodger below leftof Top~Right
+ .. farleftof Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
diff --git a/fonts/bbold/bblower.mf b/fonts/bbold/bblower.mf
new file mode 100644
index 0000000000..9bbd5e7195
--- /dev/null
+++ b/fonts/bbold/bblower.mf
@@ -0,0 +1,760 @@
+% Blackboard bold lower case, Alan Jeffrey, 12--18 Dec 1989.
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("a")
+ (smallgap#, medlower#, medgap#)
+ (aTop#, aBottom#);
+
+ "The letter a";
+
+ % The curve.
+ var (path) apath;
+
+ apath
+ = (Top - cCurl)~Right
+ .. oabove Top~Middle {left}
+ .. Horizon~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. (Bottom + cCurl)~Right;
+
+ % The emphasis to the left, clipped by the curve.
+ draw
+ fatcliptwice
+ (oabove rightof Top~Left -- obelow rightof Bottom~Left)
+ (apath);
+
+ % The curve.
+ draw apath;
+
+ % The line at the right.
+ draw
+ Top~Right
+ -- Bottom~Right;
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("b")
+ (medgap#, medlower# + fatness#, smallgap#)
+ (bTop#, aBottom#);
+
+ "The letter b";
+
+ % The curve.
+ draw
+ farrightof (aTop - cCurl)~Left
+ .. oabove rightof aTop~Middle {right}
+ .. aMiddle~Right {down}
+ .. obelow rightof Bottom~Middle {left}
+ .. farrightof (Bottom + cCurl)~Left;
+
+ % The vertical, fattened.
+ draw
+ fatten
+ rightof Bottom~Left
+ -- rightof Top~Left;
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("c")
+ (smallgap#, medlower#, smallgap#)
+ (aTop#, aBottom#);
+
+ "The letter c";
+
+ % The curve.
+ var (path) cpath;
+
+ cpath
+ = (Top - cCurl)~Right
+ .. oabove Top~Middle {left}
+ .. Horizon~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. (Bottom + cCurl)~Right;
+
+ % The emphasis to the left, clipped by the curve.
+ draw
+ fatcliptwice
+ (oabove rightof Top~Left -- obelow rightof Bottom~Left)
+ (cpath);
+
+ % The curve.
+ draw cpath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("d")
+ (smallgap#, medlower#, medgap#)
+ (bTop#, aBottom#);
+
+ "The letter d";
+
+ % The curve.
+ var (path) dpath;
+
+ dpath
+ = (aTop - cCurl)~Right
+ .. oabove aTop~Middle {left}
+ .. aMiddle~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. (Bottom + cCurl)~Right;
+
+ % The emphasis to the left, clipped by the curve.
+ draw
+ fatcliptwice
+ (oabove rightof aTop~Left -- obelow rightof Bottom~Left)
+ (dpath);
+
+ % The curve.
+ draw dpath;
+
+ % The line at the right.
+ draw
+ Bottom~Right
+ -- Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("e")
+ (smallgap#, medlower#, smallgap#)
+ (aTop#, aBottom#);
+
+ "The letter e";
+
+ % The curve.
+ var (path) epath;
+
+ epath
+ = eBar~Right
+ .. oabove Top~Middle {left}
+ .. Horizon~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. (Bottom + cCurl)~Right;
+
+ % The bar.
+ draw
+ farrightof eBar~Left
+ -- eBar~Right;
+
+ % The emphasis to the left, clipped by the curve.
+ outline
+ fatcliptwice
+ (oabove rightof Top~Left -- obelow rightof Bottom~Left)
+ (epath);
+
+ % The curve.
+ draw epath;
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("f")
+ (medgap#, smalllower#, 0pt#)
+ (bTop#, aBottom#);
+
+ "The letter f";
+
+ % The curve.
+ var (path) fpath;
+
+ fpath
+ = (Top - hCurl)~Left {up}
+ .. oabove Top~Middle {right}
+ .. (Top - cCurl)~Right;
+
+ % The bar.
+ draw
+ aTop~Left
+ -- farrightof aTop~(Left + jut);
+
+ % The emphasis at the left of the curve.
+ outline
+ fatcliponce
+ (rightof Bottom~Left -- oabove rightof Top~Left)
+ (fpath);
+
+ % The curve.
+ draw fpath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("g")
+ (smallgap#, medlower#, medgap#)
+ (aTop#, gBottom#);
+
+ "The letter g";
+
+ % The bowl path.
+ var (path) gpath;
+
+ gpath
+ = (Top - cCurl)~Right
+ .. oabove Top~Middle {left}
+ .. aMiddle~Left {down}
+ .. obelow aBottom~Middle {right}
+ .. (aBottom + cCurl)~Right;
+
+ % Emphasis of the bowl.
+ draw
+ fatcliptwice
+ (obelow rightof aBottom~Left -- oabove rightof Top~Left)
+ (gpath);
+
+ % The bowl.
+ draw gpath;
+
+ % The tail.
+ draw
+ Top~Right
+ --- aBottom~Right
+ .. obelow Bottom~Middle {left}
+ .. (Bottom + gCurl)~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("h")
+ (medgap#, smalllower# + fatness#, medgap#)
+ (bTop#, aBottom#);
+
+ "The letter h";
+
+ % The curve.
+ draw
+ farrightof (aTop - cCurl)~Left
+ .. oabove rightof aTop~Middle {right}
+ .. (aTop - hCurl)~Right
+ --- Bottom~Right;
+
+ % The vertical, fattened.
+ draw
+ fatten
+ rightof Bottom~Left
+ -- rightof Top~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("i")
+ (medgap#, tiny#, medgap#)
+ (iTop#, aBottom#);
+
+ fatsymmetric;
+
+ "The letter i";
+
+ % The vertical, fattened.
+ draw
+ fatten
+ Bottom~Middle
+ -- aTop~Middle;
+
+ % The dot.
+ draw
+ splodge
+ below Top~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("j")
+ (0pt#, smalllower#, medgap#)
+ (iTop#, gBottom#);
+
+ "The letter j";
+
+ % The curve.
+ var (path) jpath;
+
+ jpath
+ = aTop~Right
+ --- aBottom~Right
+ .. obelow Bottom~Middle {left}
+ .. (Bottom + gCurl)~Left;
+
+ % The emphasis.
+ draw
+ fatcliponce
+ (leftof aTop~Right -- obelow leftof Bottom~Right)
+ (jpath);
+
+ % The curve.
+ draw jpath;
+
+ % The dot.
+ draw
+ splodge
+ below leftof Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("k")
+ (medgap#, smalllower# + fatness#, smallgap#)
+ (bTop#, aBottom#);
+
+ "The letter k";
+
+ % The point at which the top diagonal hits the left side of the character.
+ % It is somewhere along the line from aTop~Right to eBar~Middle.
+
+ z1 = whatever[aTop~Right, eBar~Middle];
+ x1 = Left;
+
+ % The top diagonal.
+ draw
+ z1 -- aTop~Right;
+
+ % The bottom diagonal.
+ draw
+ eBar~Middle
+ -- Bottom~Right;
+
+ % The left edge, fattened.
+ outline
+ fatten
+ rightof Top~Left
+ -- rightof Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("l")
+ (medgap#, tiny#, medgap#)
+ (bTop#, aBottom#);
+
+ "The letter l";
+
+ % The fattened vertical, clipped at the left by a curve.
+
+ draw
+ fatcliponce
+ (Top~Middle -- Bottom~Middle)
+ (leftof Horizon~Middle
+ --- leftof (Bottom + hCurl)~Middle
+ .. rightof Bottom~Middle {right})
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("m")
+ (medgap#, biglower#, medgap#)
+ (aTop#, aBottom#);
+
+ symmetric;
+
+ "The letter m";
+
+ % The vertical, fattened.
+ draw
+ fatten
+ rightof Bottom~Left
+ -- rightof Top~Left;
+
+ % The first bump.
+ draw
+ farrightof (Top - cCurl)~Left
+ .. oabove (farrightof Top~Left -+- rightof Top~Middle) {right}
+ .. rightof (Top - hCurl)~Middle
+ --- rightof Bottom~Middle;
+
+ % The second bump.
+ draw
+ rightof (Top - hCurl)~Middle {up}
+ .. oabove (rightof Top~Middle -+- Top~Right) {right}
+ .. (Top - hCurl)~Right
+ --- Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("n")
+ (medgap#, smalllower# + fatness#, medgap#)
+ (aTop#, aBottom#);
+
+ "The letter n";
+
+ % The vertical, fattened.
+ draw
+ fatten
+ rightof Bottom~Left
+ -- rightof Top~Left;
+
+ % The bump.
+ draw
+ farrightof (Top - cCurl)~Left
+ .. oabove rightof Top~Middle {right}
+ .. (Top - hCurl)~Right
+ --- Bottom~Right;
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("o")
+ (smallgap#, medlower#, smallgap#)
+ (aTop#, aBottom#);
+
+ "The letter o";
+
+ % The circle;
+ var (path) opath;
+
+ opath
+ = oabove Top~Middle {right}
+ .. Horizon~Right {down}
+ .. obelow Bottom~Middle {left}
+ .. Horizon~Left {up}
+ .. cycle;
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (obelow rightof Bottom~Left -- oabove rightof Top~Left)
+ (opath);
+
+ % The o.
+ draw opath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("p")
+ (medgap#, medlower# + fatness#, smallgap#)
+ (aTop#, gBottom#);
+
+ "The letter p";
+
+ % The curve.
+ draw
+ farrightof (Top - cCurl)~Left
+ .. oabove rightof Top~Middle {right}
+ .. aMiddle~Right {down}
+ .. obelow rightof aBottom~Middle {left}
+ .. farrightof (aBottom + cCurl)~Left;
+
+ % The vertical, fattened.
+ draw
+ fatten
+ rightof Bottom~Left
+ -- rightof Top~Left;
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("q")
+ (smallgap#, medlower#, medgap#)
+ (aTop#, gBottom#);
+
+ "The letter q";
+
+ % The curve.
+ var (path) qpath;
+
+ qpath
+ = (Top - cCurl)~Right
+ .. oabove Top~Middle {left}
+ .. aMiddle~Left {down}
+ .. obelow aBottom~Middle {right}
+ .. (aBottom + cCurl)~Right;
+
+ % The emphasis to the left, clipped by the curve.
+ draw
+ fatcliptwice
+ (oabove rightof Top~Left -- obelow rightof Bottom~Left)
+ (qpath);
+
+ % The curve.
+ draw qpath;
+
+ % The line at the right.
+ draw
+ Bottom~Right
+ -- Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("r")
+ (medgap#, smalllower# + fatness#, smallgap#)
+ (aTop#, aBottom#);
+
+ "The letter r";
+
+ % The vertical, fattened.
+ draw
+ fatten
+ rightof Bottom~Left
+ -- rightof Top~Left;
+
+ % The bump.
+ draw
+ farrightof (Top - cCurl)~Left
+ .. oabove rightof Top~Middle {right}
+ .. (Top - cCurl)~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("s")
+ (smallgap#, smalllower#, smallgap#)
+ (aTop#, aBottom#);
+
+ "The letter s";
+
+ % The path of the S.
+ var (path) spath;
+
+ spath
+ = (Top - cCurl)~Right
+ .. oabove Top~Middle {left}
+ .. (Top -+- eBar)~Left {down}
+ .. eBar~Middle {right}
+ .. (eBar -+- Bottom)~Right {down}
+ .. obelow Bottom~Middle {left}
+ .. (Bottom + cCurl)~Left;
+
+ % The emphasis at the top left of the S.
+ draw
+ fatcliptwice
+ (oabove rightof Top~Left -- obelow rightof Bottom~Left)
+ (subpath (0, 4) of spath);
+
+ % The path of the S.
+ draw spath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("t")
+ (medgap#, smalllower#, smallgap#)
+ (bTop#, aBottom#);
+
+ "The letter t";
+
+ % The curve.
+ var (path) tpath;
+
+ tpath
+ = (Bottom + hCurl)~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. (Bottom + cCurl)~Right;
+
+ % The bar.
+ draw
+ aTop~Left
+ -- aTop~Right;
+
+ % The emphasis.
+ outline
+ fatcliponce
+ (rightof Top~Left -- obelow rightof Bottom~Left)
+ (tpath);
+
+ % The curve.
+ draw tpath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("u")
+ (medgap#, medlower#, medgap#)
+ (aTop#, aBottom#);
+
+ "The letter u";
+
+ % The curve of the u.
+ var (path) upath;
+
+ upath
+ = Top~Left
+ --- Horizon~Left
+ .. obelow Bottom~Middle {right}
+ .. {up} Horizon~Right;
+
+ % The emphasis.
+ draw
+ fatcliponce
+ (rightof Top~Left -- obelow rightof Bottom~Left)
+ (upath);
+
+ % The curve.
+ draw upath;
+
+ % The right line.
+ draw
+ Bottom~Right
+ -- Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("v")
+ (smallgap#, medlower#, smallgap#)
+ (aTop#, aBottom#);
+
+ symmetric;
+
+ "The letter v";
+
+ % The left diagonal, clipped by the right.
+ draw
+ fatcliponce
+ (rightof Top~Left -- rightof Bottom~Middle)
+ (Bottom~Middle -- Top~Right);
+
+ % The right diagonal.
+ draw
+ Bottom~Middle
+ -- Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("w")
+ (smallgap#, biglower#, smallgap#)
+ (aTop#, aBottom#);
+
+ symmetric;
+
+ "The letter w";
+
+ % The left diagonal, clipped by the rest.
+ draw
+ fatcliponce
+ (rightof Top~Left -- rightof Bottom~(Left -+- Middle))
+ (Bottom~(Left -+- Middle) -- eBar~Middle);
+
+ % The rest of the letter.
+ draw
+ Bottom~(Left -+- Middle)
+ -- eBar~Middle
+ -- Bottom~(Middle -+- Right)
+ -- Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("x")
+ (smallgap#, medlower#, smallgap#)
+ (aTop#, aBottom#);
+
+ "The letter x";
+
+ % The SE diagonal.
+ draw
+ Top~Left
+ -- Bottom~Right;
+
+ % The SW diagonal, fattened.
+ outline
+ fatten
+ leftof Top~Right
+ -- rightof Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("y")
+ (smallgap#, medlower#, smallgap#)
+ (aTop#, gBottom#);
+
+ symmetric;
+
+ "The letter y";
+
+ % The left diagonal, fattened, and clipped by the right.
+ draw
+ fatcliponce
+ (rightof Top~Left -- rightof aBottom~Middle)
+ (Top~Right -- aBottom~Middle);
+
+ % The right diagonal and tail.
+ draw
+ Top~Right
+ --- aBottom~Middle
+ .. obelow Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("z")
+ (smallgap#, medlower#, smallgap#)
+ (aTop#, aBottom#);
+
+ "The letter z";
+
+ % The top line.
+ draw
+ Top~Left
+ -- Top~Right;
+
+ % The diagonal, fattened.
+ draw
+ fatten
+ leftof Top~Right
+ -- rightof Bottom~Left;
+
+ % The bottom line.
+ draw
+ Bottom~Left
+ -- Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
diff --git a/fonts/bbold/bbnum.mf b/fonts/bbold/bbnum.mf
new file mode 100644
index 0000000000..1be5023e1b
--- /dev/null
+++ b/fonts/bbold/bbnum.mf
@@ -0,0 +1,300 @@
+% Blackboard bold numerals, Alan Jeffrey, 12--18 Dec 1989.
+
+% -------------------------------------------------------------------
+
+bbnum ("0");
+ "The number 0";
+
+ % The curve.
+ var (path) zeropath;
+
+ zeropath
+ = oabove Top~Middle {left}
+ .. Horizon~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. Horizon~Right {up}
+ .. cycle;
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (obelow rightof Bottom~Left -- oabove rightof Top~Left)
+ (zeropath);
+
+ % The curve.
+ draw zeropath;
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbnum ("1");
+
+ fatsymmetric;
+
+ "The number 1";
+
+ % The top serif.
+ draw
+ rightof Top~Middle
+ -- (Top - CCurl)~Left;
+
+ % The vertical, clipped by the top serif.
+ draw
+ fatcliponce
+ (Bottom~Middle -- Top~Middle)
+ (rightof Top~Middle -- (Top - CCurl)~Left);
+
+ % The bottom serif.
+ draw
+ Bottom~Left
+ -- Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbnum ("2");
+ "The number 2";
+
+ % The outline.
+ var (path) twopath;
+
+ twopath
+ = (Top-CCurl)~Left
+ .. oabove Top~Middle {right}
+ .. (Top -+- threeBar)~Right {down}
+ .. Bottom~Left {down};
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (leftof Bottom~Right -- oabove leftof Top~Right)
+ (twopath);
+
+ % The curve.
+ draw twopath;
+
+ % The base line.
+ draw
+ Bottom~Left
+ -- Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbnum ("3");
+ "The number 3";
+
+ % The curve.
+ var (path) threepath;
+
+ threepath
+ = (Top - CCurl)~Left
+ .. oabove Top~Middle {right}
+ .. (Top -+- threeBar)~Right {down}
+ .. threeBar~Middle {left}
+ & threeBar~Middle {right}
+ .. (threeBar -+- Bottom)~Right {down}
+ .. obelow Bottom~Middle {left}
+ .. (Bottom + CCurl)~Left;
+
+ % The top emphasis.
+ draw
+ fatcliptwice
+ (leftof threeBar~Right -- oabove leftof Top~Right)
+ (threepath);
+
+ % The bottom emphasis.
+ draw
+ fatcliptwice
+ (obelow leftof Bottom~Right -- leftof threeBar~Right)
+ (threepath);
+
+ % The curve.
+ draw threepath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbnum ("4");
+ "The number 4";
+
+ % The right of the vertical is jut away from the right of the character.
+ var (numeric) verticalRight;
+
+ verticalRight + jut = Right;
+
+ % The bar.
+ draw
+ ABar~Left
+ -- ABar~Right;
+
+ % The vertical, fattened and clipped by the diagonal.
+ outline
+ fatcliponce
+ (leftof Bottom~verticalRight -- leftof Top~verticalRight)
+ (Top~verticalRight -- ABar~Left);
+
+ % The diagonal.
+ draw
+ Top~verticalRight
+ -- ABar~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbnum ("5");
+ "The number 5";
+
+ % The top horizontal.
+ draw
+ Top~Left
+ -- Top~Right;
+
+ % The vertical, fattened.
+ draw
+ fatten
+ rightof (Bottom + sixBowl)~Left
+ -- rightof Top~Left;
+
+ % The curve.
+ draw
+ (Bottom + sixBowl)~Left
+ --- (Bottom + sixBowl)~Middle
+ .. (Bottom + 1/2sixBowl)~Right {down}
+ .. obelow Bottom~Middle {left}
+ .. (Bottom + CCurl)~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbnum ("6");
+ "The number 6";
+
+ % The bowl.
+ var (path) sixpath;
+
+ sixpath
+ = (Bottom + 1/2sixBowl)~Right {up}
+ .. (Bottom + sixBowl)~Middle {left}
+ .. (Bottom + 1/2sixBowl)~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. cycle;
+
+ % The tail.
+ draw
+ (Bottom + 1/2sixBowl)~Left
+ --- (Bottom + sixBowl)~Left
+ .. oabove Top~Middle {right}
+ .. (Top - CCurl)~Right;
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (obelow rightof Bottom~Left -- rightof (Bottom + sixBowl)~Left)
+ (sixpath);
+
+ % The bowl.
+ draw sixpath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbnum ("7");
+ "The number 7";
+
+ % The vertical.
+ draw
+ Top~Left
+ -- Top~Right;
+
+ % The diagonal.
+ draw
+ fatten
+ rightof Bottom~Left
+ -- leftof Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbnum ("8");
+ "The number 8";
+
+ % The bowls.
+ var (path) eighttop, eightbottom;
+
+ eighttop
+ = oabove Top~Middle {left}
+ .. (Top -+- threeBar)~Left {down}
+ .. threeBar~Middle {right}
+ .. (threeBar -+- Top)~Right {up}
+ .. cycle;
+
+ eightbottom
+ = threeBar~Middle {left}
+ .. (threeBar -+- Bottom)~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. (Bottom -+- threeBar)~Right {up}
+ .. cycle;
+
+ % The top emphasis.
+ draw
+ fatcliptwice
+ (obelow rightof Bottom~Left -- oabove rightof Top~Left)
+ (eighttop);
+
+ % The bottom emphasis.
+ draw
+ fatcliptwice
+ (obelow rightof Bottom~Left -- oabove rightof Top~Left)
+ (eightbottom);
+
+ % The top bowl.
+ draw eighttop;
+
+ % The bottom bowl.
+ draw eightbottom
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbnum ("9");
+ "The number 9";
+
+ % The bowl.
+ var (path) ninepath;
+
+ ninepath
+ = (Top - sixBowl)~Middle {left}
+ .. (Top - 1/2sixBowl)~Left {up}
+ .. oabove Top~Middle {right}
+ .. (Top - 1/2sixBowl)~Right {down}
+ .. cycle;
+
+ % The tail.
+ draw
+ (Top - 1/2sixBowl)~Right
+ --- (Top - sixBowl)~Right
+ .. obelow Bottom~Middle {left}
+ .. (Bottom + CCurl)~Left;
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (oabove rightof Top~Left -- rightof (Top - sixBowl)~Left)
+ (ninepath);
+
+ % The bowl.
+ draw ninepath
+
+endchar;
+
+% -------------------------------------------------------------------
diff --git a/fonts/bbold/bbold.dtx b/fonts/bbold/bbold.dtx
new file mode 100644
index 0000000000..e8a44ae1f0
--- /dev/null
+++ b/fonts/bbold/bbold.dtx
@@ -0,0 +1,265 @@
+%\iffalse
+% ====================================================================
+% @LaTeX-documentation-file{
+% author = "Alan Jeffrey",
+% version = "1.01",
+% date = "08 April 2002",
+% filename = "bbold.dtx",
+% address = "CTI, DePaul University,
+% 243 S. Wabash Ave., Chicago IL 60604, USA",
+% email = "ajeffrey@cs.depaul.edu",
+% codetable = "ISO/ASCII",
+% keywords = "LaTeX math fonts",
+% supported = "yes",
+% abstract = "This is the documentation and
+% self-extracting archive for the bbold
+% package. If you run latex2e on it, it will
+% produce the documentation, as well as
+% the bbold package and font definition
+% file.",
+% package = "stands alone",
+% dependencies = "none",
+% }
+% ====================================================================
+%\fi
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \def\dst{\expandafter{\normalfont\scshape docstrip}}
+%
+% \changes{1.00}{1991/05/23}{File created}
+% \changes{1.01}{2002/04/08}{Moved to Modified Free BSD license}
+%
+% \title{The \textbb{bbold} symbol font}
+% \author{Alan Jeffrey}
+% \date{April 2002}
+%
+% \maketitle
+%
+% \section*{Introduction}
+%
+% This document describes the \textbb{bbold} math alphabet. This
+% is an open (or `blackboard bold') geometric sans serif, intended
+% mainly for use in mathematics, but which may prove useful for
+% decorative work.
+%
+% To use the fonts in \LaTeXe, you select the |bbold| package,
+% and then use the |\mathbb| command to get blackboard bold
+% mathematics, |\textbb| for text, or |\bbfamily| for longer text.
+% The full font is:
+% \begin{center}
+% \bbfamily
+% \fonttable
+% The bbold font family.
+% \end{center}
+% This was the first full font I implemented, and has a number of
+% dubious design features. It is very geometric, and the stress
+% does not conform to that of most Latin fonts---this was an attempt to
+% imitate real blackboard handwriting. The difference in widths
+% between `\textbb{a}' and `\textbb{b}' is very noticable. The lip of
+% the `\textbb{r}' is horrible. However, the uppercase latin letters
+% look passable, and they're almost the only ones anyone ever uses.
+%
+% \section*{Legal rubbish}
+%
+% This package is copyright \copyright~1989--2002 Alan Jeffrey.
+% All rights are reserved.
+% The moral right of the author has been asserted.
+%
+%
+% Redistribution and use in source and binary forms, with or without
+% modification, are permitted provided that the following conditions
+% are met:
+%
+% \begin{enumerate}
+%
+% \item Redistributions of source code must retain the above copyright
+% notice, this list of conditions and the following disclaimer.
+%
+% \item Redistributions in binary form must reproduce the above copyright
+% notice, this list of conditions and the following disclaimer in the
+% documentation and/or other materials provided with the distribution.
+%
+% \item The name of the author may not be used to endorse or promote products
+% derived from this software without specific prior written permission.
+%
+% \end{enumerate}
+%
+% THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+% IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+% OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+% IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+% INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+% NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+% DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+% THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+% (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+% THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+%
+% \StopEventually{}
+%
+% \section{Installation}
+%
+% To begin with, the |bbold| package is
+% installed by running \LaTeXe{} on this document, so we begin with
+% the installation procedure. This needs to use \LaTeXe:
+% \begin{macrocode}
+%<*install>
+\NeedsTeXFormat{LaTeX2e}
+% \end{macrocode}
+% First of all, we write out a little |.ins| file which creates the
+% |bbold| package:
+% \begin{macrocode}
+\begin{filecontents}{bbold.ins}
+ \generateFile{bbold.sty}{f}{
+ \from{bbold.dtx}{package}}
+ \generateFile{fonttabl.sty}{f}{
+ \from{bbold.dtx}{fonttabl}}
+ \generateFile{Ubbold.fd}{f}{
+ \from{bbold.dtx}{fontdef}}
+\end{filecontents}
+% \end{macrocode}
+% Then we do some horrible low-level hacks to run docstrip on
+% |bbold.ins|:
+% \begin{macrocode}
+\bgroup
+ \makeatletter
+ \let\@@end=\relax
+ \def\batchfile{bbold.ins}
+ \input{docstrip}
+\egroup
+% \end{macrocode}
+% That's it for the installation:
+% \begin{macrocode}
+%</install>
+% \end{macrocode}
+%
+% \section{Documentation}
+%
+% We now provide the documentation driver for this document:
+% \begin{macrocode}
+%<*driver>
+\documentclass{ltxdoc}
+\DisableCrossrefs
+\OnlyDescription
+\usepackage{bbold,fonttabl}
+% \end{macrocode}
+% Then we produce the documentation:
+% \begin{macrocode}
+\begin{document}
+ \DocInput{bbold.dtx}
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \section{The package}
+%
+% We can now implement the |bbold| package.
+% \begin{macrocode}
+%<*package>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bbold}[1994/04/06 Bbold symbol package]
+% \end{macrocode}
+% \begin{macro}{\mathbb}
+% \begin{macro}{\textbb}
+% \begin{macro}{\bbfamily}
+% These are the three user commands. They are just simple calls to
+% \LaTeXe{} font selection.
+% \begin{macrocode}
+\newcommand{\bbfamily}{\fontencoding{U}\fontfamily{bbold}\selectfont}
+\newcommand{\textbb}[1]{{\bbfamily#1}}
+\DeclareMathAlphabet{\mathbb}{U}{bbold}{m}{n}
+%</package>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{The font definitions}
+%
+% The font definitions for the \textbb{bbold} fonts are:
+% \begin{macrocode}
+%<*fontdef>
+\DeclareFontFamily{U}{bbold}{}
+\DeclareFontShape{U}{bbold}{m}{n}
+ { <5> <6> <7> <8> <9> gen * bbold
+ <10> <10.95> bbold10
+ <12> <14.4> bbold12
+ <17.28> <20.74> <24.88> bbold17
+ }{}
+%</fontdef>
+% \end{macrocode}
+%
+% \section{A font table package}
+%
+% The following macros are stolen from |testfont.tex| and can be used
+% to print font samples.
+% \begin{macrocode}
+%<*fonttabl>
+\newcount\m \newcount\n \newcount\p \newdimen\dim
+\chardef\other=12
+\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant
+\def\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant
+\def\setdigs#1"#2{\gdef\h{#2}% \h=hex prefix; \0\1=corresponding octal
+ \m=\n \divide\m by 64 \xdef\0{\the\m}%
+ \multiply\m by-64 \advance\m by\n \divide\m by 8 \xdef\1{\the\m}}
+\def\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}%
+ \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F%
+ \global\p=\lastpenalty}} % \p=1 if none of the characters exist
+\def\oddline{\cr
+ \noalign{\nointerlineskip}
+ \multispan{19}\hrulefill&
+ \setbox0=\hbox{\lower 2.3pt\hbox{\hex{\h x}}}\smash{\box0}\cr
+ \noalign{\nointerlineskip}}
+\newif\ifskipping
+\def\evenline{\loop\skippingfalse
+ \ifnum\n<256 \m=\n \divide\m 16 \chardef\next=\m
+ \expandafter\setdigs\meaning\next \testrow
+ \ifnum\p=1 \skippingtrue \fi\fi
+ \ifskipping \global\advance\n 16 \repeat
+ \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi
+ \next}
+\def\morechart{\cr\noalign{\hrule\penalty5000}
+ \chartline \oddline \m=\1 \advance\m 1 \xdef\1{\the\m}
+ \chartline \evenline}
+\def\chartline{&\oct{\0\1x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&}
+\def\chartstrut{\lower4.5pt\vbox to14pt{}}
+\def\fonttable{$$
+ \@namedef{T@OT1}{}% Switch off loading of ot1.def
+ \@namedef{T@T1}{}% and t1.def in the table axes
+ \global\n=0
+ \halign to\hsize\bgroup
+ \chartstrut##\tabskip0pt plus10pt&
+ &\hfil##\hfil&\vrule##\cr
+ \lower6.5pt\null
+ &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline}
+\def\endchart{\cr\noalign{\hrule}
+ \raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B&
+ &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$\par}
+\def\:{\setbox0=\hbox{\char\n}%
+ \ifdim\ht0>7.5pt\reposition
+ \else\ifdim\dp0>2.5pt\reposition\fi\fi
+ \box0\global\advance\n 1 }
+\def\reposition{\setbox0=\vbox{\kern2pt\box0}\dim=\dp0
+ \advance\dim 2pt \dp0=\dim}
+\def\centerlargechars{
+ \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}}
+%</fonttabl>
+% \end{macrocode}
+%
+% \Finale
+\endinput
diff --git a/fonts/bbold/bbold.mf b/fonts/bbold/bbold.mf
new file mode 100644
index 0000000000..bf0f53e34c
--- /dev/null
+++ b/fonts/bbold/bbold.mf
@@ -0,0 +1,9 @@
+input bbparams;
+input bbgreeku;
+input bbgreekl;
+input bbnum;
+input bbupper;
+input bblower;
+input bbpunc;
+input bbligs;
+
diff --git a/fonts/bbold/bbold.pdf b/fonts/bbold/bbold.pdf
new file mode 100644
index 0000000000..ca415309bc
--- /dev/null
+++ b/fonts/bbold/bbold.pdf
Binary files differ
diff --git a/fonts/bbold/bbold10.mf b/fonts/bbold/bbold10.mf
new file mode 100644
index 0000000000..f0a077a94c
--- /dev/null
+++ b/fonts/bbold/bbold10.mf
@@ -0,0 +1,19 @@
+% Blackboard bold 10pt. Alan Jeffrey, 18 Dec 1989.
+
+mode_setup;
+
+input bbbase;
+
+% Hacks to make sure cmr doesn't generate the font, and doesn't load cmbase.
+cmbase := 1;
+def generate suffix t = enddef;
+
+% Input the cmr parameters.
+input cmr10;
+
+font_identifier := "BBOLD";
+font_coding_scheme := "Blackboard bold";
+
+% Then generate blackboard bold.
+input bbold;
+bye;
diff --git a/fonts/bbold/bbold12.mf b/fonts/bbold/bbold12.mf
new file mode 100644
index 0000000000..ecf0987589
--- /dev/null
+++ b/fonts/bbold/bbold12.mf
@@ -0,0 +1,19 @@
+% Blackboard bold 12pt. Alan Jeffrey, 18 Dec 1989.
+
+mode_setup;
+
+input bbbase;
+
+% Hacks to make sure cmr doesn't generate the font, and doesn't load cmbase.
+cmbase := 1;
+def generate suffix t = enddef;
+
+% Input the cmr parameters.
+input cmr12;
+
+font_identifier := "BBOLD";
+font_coding_scheme := "Blackboard bold";
+
+% Then generate blackboard bold.
+input bbold;
+bye;
diff --git a/fonts/bbold/bbold17.mf b/fonts/bbold/bbold17.mf
new file mode 100644
index 0000000000..69b43b6980
--- /dev/null
+++ b/fonts/bbold/bbold17.mf
@@ -0,0 +1,19 @@
+% Blackboard bold 17pt. Alan Jeffrey, 18 Dec 1989.
+
+mode_setup;
+
+input bbbase;
+
+% Hacks to make sure cmr doesn't generate the font, and doesn't load cmbase.
+cmbase := 1;
+def generate suffix t = enddef;
+
+% Input the cmr parameters.
+input cmr17;
+
+font_identifier := "BBOLD";
+font_coding_scheme := "Blackboard bold";
+
+% Then generate blackboard bold.
+input bbold;
+bye;
diff --git a/fonts/bbold/bbold5.mf b/fonts/bbold/bbold5.mf
new file mode 100644
index 0000000000..fa3bbbfbd7
--- /dev/null
+++ b/fonts/bbold/bbold5.mf
@@ -0,0 +1,19 @@
+% Blackboard bold 5pt. Alan Jeffrey, 18 Dec 1989.
+
+mode_setup;
+
+input bbbase;
+
+% Hacks to make sure cmr doesn't generate the font, and doesn't load cmbase.
+cmbase := 1;
+def generate suffix t = enddef;
+
+% Input the cmr parameters.
+input cmr5;
+
+font_identifier := "BBOLD";
+font_coding_scheme := "Blackboard bold";
+
+% Then generate blackboard bold.
+input bbold;
+bye;
diff --git a/fonts/bbold/bbold6.mf b/fonts/bbold/bbold6.mf
new file mode 100644
index 0000000000..8a65b013a8
--- /dev/null
+++ b/fonts/bbold/bbold6.mf
@@ -0,0 +1,19 @@
+% Blackboard bold 6pt. Alan Jeffrey, 18 Dec 1989.
+
+mode_setup;
+
+input bbbase;
+
+% Hacks to make sure cmr doesn't generate the font, and doesn't load cmbase.
+cmbase := 1;
+def generate suffix t = enddef;
+
+% Input the cmr parameters.
+input cmr6;
+
+font_identifier := "BBOLD";
+font_coding_scheme := "Blackboard bold";
+
+% Then generate blackboard bold.
+input bbold;
+bye;
diff --git a/fonts/bbold/bbold7.mf b/fonts/bbold/bbold7.mf
new file mode 100644
index 0000000000..b4493e51f5
--- /dev/null
+++ b/fonts/bbold/bbold7.mf
@@ -0,0 +1,19 @@
+% Blackboard bold 7pt. Alan Jeffrey, 18 Dec 1989.
+
+mode_setup;
+
+input bbbase;
+
+% Hacks to make sure cmr doesn't generate the font, and doesn't load cmbase.
+cmbase := 1;
+def generate suffix t = enddef;
+
+% Input the cmr parameters.
+input cmr7;
+
+font_identifier := "BBOLD";
+font_coding_scheme := "Blackboard bold";
+
+% Then generate blackboard bold.
+input bbold;
+bye;
diff --git a/fonts/bbold/bbold8.mf b/fonts/bbold/bbold8.mf
new file mode 100644
index 0000000000..8fa4db1636
--- /dev/null
+++ b/fonts/bbold/bbold8.mf
@@ -0,0 +1,19 @@
+% Blackboard bold 8pt. Alan Jeffrey, 18 Dec 1989.
+
+mode_setup;
+
+input bbbase;
+
+% Hacks to make sure cmr doesn't generate the font, and doesn't load cmbase.
+cmbase := 1;
+def generate suffix t = enddef;
+
+% Input the cmr parameters.
+input cmr8;
+
+font_identifier := "BBOLD";
+font_coding_scheme := "Blackboard bold";
+
+% Then generate blackboard bold.
+input bbold;
+bye;
diff --git a/fonts/bbold/bbold9.mf b/fonts/bbold/bbold9.mf
new file mode 100644
index 0000000000..7e0cafe281
--- /dev/null
+++ b/fonts/bbold/bbold9.mf
@@ -0,0 +1,19 @@
+% Blackboard bold 9pt. Alan Jeffrey, 18 Dec 1989.
+
+mode_setup;
+
+input bbbase;
+
+% Hacks to make sure cmr doesn't generate the font, and doesn't load cmbase.
+cmbase := 1;
+def generate suffix t = enddef;
+
+% Input the cmr parameters.
+input cmr9;
+
+font_identifier := "BBOLD";
+font_coding_scheme := "Blackboard bold";
+
+% Then generate blackboard bold.
+input bbold;
+bye;
diff --git a/fonts/bbold/bbparams.mf b/fonts/bbold/bbparams.mf
new file mode 100644
index 0000000000..b344ccb158
--- /dev/null
+++ b/fonts/bbold/bbparams.mf
@@ -0,0 +1,205 @@
+% Blackboard bold parameters, Alan Jeffrey 14--18 Dec 1989.
+%
+% These parameters are deduced from those set in bboldNN.mf.
+%
+% The only horizontal parameter we take in is the unit u#,
+% from which we calculate all the horizontal distances.
+%
+% The distance between the two strokes in a fat line is fatness.
+
+fatness# := 2.3u#;
+
+% The size of a pen is rule_thickness.
+
+pen_size# := rule_thickness#;
+
+% Characters with space inside them (for example the
+% gap between the bar and the dot in a ! have either smallspace,
+% space# or bigspace# worth of space.
+
+smallspace# := u#;
+space# := 2u#;
+bigspace# := 3u#;
+
+% Characters with bits jutting out of them (for example the feet in
+% ] or the bar in f) have jut# worth of stick-outiness.
+
+jut# := 1.5u#;
+bigjut# := 2.5u#;
+
+% Some characters are exactly fatness# + pen_size# wide, as they are
+% drawn with just one vertical line.
+%
+% tiny --- I, i, l, |, ,, :, ;, ., `, ', !.
+%
+% Others have a small amount jutting out from the side, like the
+% top and bottom of a ].
+%
+% tiny+jut --- [, ], (, ).
+
+tiny# := fatness# + pen_size#;
+
+% Upper case characters come in three sizes:
+%
+% small --- B, E, F, J, K, L, P, R, S, Gamma, Pi, ?, $, /, \,
+%
+% medium --- A, C, D, G, H, M, N, O, Q, T, U, V, X, Y, Z,
+% Delta, Theta, Lamba, Xi, Sigma, Upsilon, Phi, Psi, Omega,
+%
+% big --- W.
+
+smallcap# := 9u#;
+medcap# := 10u#;
+bigcap# := 14u#;
+
+% Lower case characters come in three sizes:
+%
+% small --- f, j, s, t,
+%
+% small + fatness --- h, k, n, r,
+%
+% medium --- a, c, d, e, g, o, q, u, v, x, y, z,
+%
+% medium + fatness --- b, p,
+%
+% big --- m, w.
+%
+% The letters with verticals at the left have fatness added on
+% so that the curves are the same size as the other letters.
+
+smalllower# := 6u#;
+medlower# := 7.5u#;
+biglower# := 11u#;
+
+% Numerals are all the same size.
+
+numeral# := 8u#;
+
+% Arithmetic operators (in this case just +) are all the same size.
+
+arithmetic# := 12u#;
+
+% Characters have three kinds of space at the side:
+%
+% small --- for example around a T,
+%
+% medium --- for example around an O,
+%
+% large --- for example around an I.
+
+smallgap# := 1/2u#;
+medgap# := 1u#;
+biggap# := 1.5u#;
+
+% Whereas we've only got one horizontal measurement stolen from cmr,
+% there are lots of vertical ones. We can use these to work out
+% our measurements.
+%
+% Characters can have various top positions:
+%
+% ATop --- the top of all capitals, Greek, and some punctuation,
+%
+% aTop --- the top of lower case without ascenders,
+%
+% bTop --- the top of lower case with ascenders,
+%
+% iTop --- the top of i and j,
+%
+% oneTop --- the top of numerals,
+%
+% bracketTop --- the top of a bracket (also the top of the body size).
+
+ATop# := cap_height#;
+aTop# := x_height#;
+bTop# := asc_height#;
+oneTop# := fig_height#;
+bracketTop# := body_height#;
+iTop# := min(x_height# + space# + fatness#, asc_height#);
+
+% The bottoms of characters can be:
+%
+% aBottom --- the base line,
+%
+% gBottom --- the bottom of a descender,
+%
+% bracketBottom --- the bottom of a bracket (also the bottom of the body).
+
+aBottom# := 0pt#;
+gBottom# := -desc_depth#;
+.5 [bracketBottom#, bracketTop#] = math_axis#; % Brackets are centered.
+
+% Various characters such as A, B, G, e, and 3 have bars in them.
+
+ABar# := .25 [aBottom#, ATop#];
+BBar# := .52 [aBottom#, ATop#]; % number nicked from cmr.
+GBar# := .50 [aBottom#, ATop#];
+eBar# := bar_height#;
+threeBar# := .54[aBottom#, oneTop#]; % number nicked from cmr.
+
+% The top of a Q's tail is at QTailTop, and the bottom is at QTailBottom.
+
+QTailTop# := .28 [aBottom#, ATop#]; % number nicked from cmr.
+QTailBottom# := aBottom# - comma_depth#; % number nicked from cmr.
+
+% Various sorts of letters have various amounts of curl in them.
+%
+% CCurl --- the amount the end of a C curls,
+% cCurl --- the amount the end of a c curls,
+% gCurl --- the amount the tail of a g curls,
+% hCurl --- the distance from the bottom of an h to the point where
+% the right of the curve becomes vertical.
+
+CCurl# := .2 (ATop# - aBottom#);
+cCurl# := .2 (aTop# - aBottom#);
+gCurl# := .2 (aBottom# - gBottom#);
+hCurl# := .4 (aTop# - aBottom#);
+
+% The numbers five, six and eight have bowls, which are sixBowl# tall.
+
+sixBowl# := aTop# - aBottom#; % These bowls are as tall as an a.
+
+% A less than (and a greater than) is lessthan# tall.
+
+lessthan# := math_spread [5/4x_height#, 3/2x_height#]; % Numbers from cmr.
+
+% Right, I'll now turn these nice sharp measurements into grotty
+% approximate pixelly ones.
+
+define_corrected_pixels (o);
+
+define_whole_blacker_pixels
+ (pen_size);
+
+define_whole_pixels
+ (fatness, jut, bigjut, smallspace, space, bigspace);
+
+define_whole_vertical_pixels
+ (CCurl, cCurl, gCurl, hCurl, sixBowl);
+
+define_whole_top_pixels
+ (ATop, aTop, bTop, oneTop, bracketTop, QTailTop);
+
+define_whole_bottom_pixels
+ (QTailBottom, aBottom, gBottom, bracketBottom);
+
+pickup pencircle scaled pen_size;
+define_good_y_pixels
+ (ABar, BBar, GBar, eBar, threeBar);
+
+% And now some handy numbers, which I don't need sharp versions of.
+
+aMiddle := .5[aBottom, aTop];
+dashMiddle := .61803 [aBottom, aTop]; % Number stolen from cmr.
+
+% I can now set the font parameters for the TFM files, stolen from cmr.
+
+font_normal_space := 6u#;
+font_normal_stretch := 3u#;
+font_normal_shrink := 2u#;
+font_quad := 18u#;
+font_extra_space := 2u#;
+font_x_height := x_height#;
+
+% And that's that.
+
+
diff --git a/fonts/bbold/bbpunc.mf b/fonts/bbold/bbpunc.mf
new file mode 100644
index 0000000000..a539fe2f82
--- /dev/null
+++ b/fonts/bbold/bbpunc.mf
@@ -0,0 +1,691 @@
+% Blackboard bold punctuation, Alan Jeffrey, 13--18 Dec 1989.
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("!")
+ (biggap#, tiny#, biggap#);
+
+ fatsymmetric;
+
+ "Exclamation mark `!'";
+
+ % The vertical.
+ draw
+ fatten
+ Top~Middle
+ -- (Bottom + space + fatness)~Middle;
+
+ % The dot.
+ draw
+ splodge
+ above Bottom~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("#")
+ (medgap#, arithmetic#, medgap#)
+ (ATop#, gBottom#);
+
+ "The hash sign `#'";
+
+ % The top line.
+ draw
+ (Horizon + space)~Left
+ -- (Horizon + space)~Right;
+
+ % The bottom line.
+ draw
+ (Horizon - space)~Left
+ -- (Horizon - space)~Right;
+
+ % The right vertical.
+ draw
+ rightof Top~(Middle + space)
+ -- rightof Bottom~(Middle + space);
+
+ % The left vertical.
+ outline
+ fatten
+ rightof Top~(Middle - space)
+ -- rightof Bottom~(Middle - space)
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("$")
+ (medgap#, smallcap#, medgap#)
+ (ATop# + jut#, aBottom# - jut#);
+
+ fatsymmetric;
+
+ "Dollar sign `$'";
+
+ % The path of the S.
+ draw
+ (Top - CCurl)~Right
+ .. ATop~Middle {left}
+ .. (ATop -+- BBar)~Left {down}
+ .. BBar~Middle {right}
+ .. (BBar -+- aBottom)~Right {down}
+ .. aBottom~Middle {left}
+ .. (Bottom + CCurl)~Left;
+
+ % The vertical.
+ outline
+ fatten
+ Bottom~Middle
+ -- Top~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("%")
+ (medgap#, smallcap#, medgap#)
+ (bracketTop#, aBottom# + aTop# - bracketTop#);
+
+ fatsymmetric;
+
+ "Per cent sign `%'";
+
+ % The dot at top left.
+ draw
+ splodge
+ below rightof Top~Left;
+
+ % The dot at bottom right.
+ draw
+ splodge
+ above leftof Bottom~Right;
+
+ % The diagonal.
+ draw
+ fatten
+ rightof Bottom~Left
+ -- leftof Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("&")
+ (medgap#, arithmetic#, medgap#)
+ (ATop#, aBottom#);
+
+ "Ampersand `&'";
+
+ % z1 is the top point at which the curls cross. It is somewhere
+ % between the top point and the bottom point, and is at aTop.
+
+ z1 = whatever[leftof Top~Middle, Bottom~(Left -+- Middle)];
+ y1 = aTop;
+
+ % The curve.
+ var (path) ampersandpath;
+
+ ampersandpath
+ = (Bottom + cCurl)~Right
+ .. obelow Bottom~(Right - jut) {left}
+ ... z1
+ .. oabove leftof Top~Middle {right}
+ .. z1
+ .. aMiddle~Left {down}
+ .. obelow Bottom~(Left -+- Middle) {right}
+ .. aMiddle~(Right - space);
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (obelow rightof Bottom~Left -- rightof Top~Left)
+ (ampersandpath);
+
+ % The curve.
+ draw ampersandpath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("'")
+ (medgap#, tiny#, medgap#)
+ (bTop#, bTop# - tiny# - comma_depth#);
+
+ fatsymmetric;
+
+ "Apostrophe `''";
+
+ % The dot and tail.
+ draw
+ splodger below Top~Middle
+ .. Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("(")
+ (biggap#, tiny# + jut#, smallgap#)
+ (bracketTop#, bracketBottom#);
+
+ "Left bracket `('";
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (rightof Bottom~Left -- rightof Top~Left)
+ (Bottom~Right {left} .. Horizon~Left .. Top~Right {right});
+
+ % The curve.
+ draw
+ Bottom~Right {left}
+ .. Horizon~Left
+ .. Top~Right {right}
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (")")
+ (smallgap#, tiny# + jut#, biggap#)
+ (bracketTop#, bracketBottom#);
+
+ "Right bracket `)'";
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (leftof Bottom~Right -- leftof Top~Right)
+ (Bottom~Left {right} .. Horizon~Right .. Top~Left {left});
+
+ % The curve.
+ draw
+ Bottom~Left {right}
+ .. Horizon~Right
+ .. Top~Left {left}
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("*")
+ (medgap#, (sqrt3)/2 * arithmetic#, medgap#)
+ (math_axis# + 1/2arithmetic#, math_axis# - 1/2arithmetic#)
+
+ fatsymmetric;
+
+ "Star `*'";
+
+ % The distance from the top of the character to the top of the diagonals.
+ var (numeric) adistance;
+ adistance = round ((Top - Horizon) / 2);
+
+ % The NW diagonal.
+ draw
+ (Bottom + adistance)~Right
+ -- (Top - adistance)~Left;
+
+ % The NE diagonal.
+ draw
+ (Bottom + adistance)~Left
+ -- (Top -adistance)~Right;
+
+ % The vertical, fattened.
+ outline
+ fatten
+ Bottom~Middle
+ -- Top~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("+")
+ (medgap#, arithmetic#, medgap#)
+ (math_axis# + 1/2arithmetic#, math_axis# - 1/2arithmetic#)
+
+ "Plus sign `+'";
+
+ % The horizontal line.
+ draw
+ Horizon~Left
+ -- Horizon~Right;
+
+ % The vertical, fattened.
+ outline
+ fatten
+ Bottom~Middle
+ -- Top~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (",")
+ (medgap#, tiny#, medgap#)
+ (aBottom# + tiny#, aBottom# - comma_depth#);
+
+ fatsymmetric;
+
+ "Comma `,'";
+
+ % The dot and tail.
+ draw
+ splodger above aBottom~Middle
+ .. Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("-")
+ (smallgap#, smalllower#, medgap#)
+ (aTop#, aBottom#);
+
+ "Hyphen `-'";
+
+ % The line.
+ draw
+ Horizon~Left
+ -- Horizon~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (".")
+ (medgap#, tiny#, medgap#)
+ (aBottom# + tiny#, aBottom#);
+
+ fatsymmetric;
+
+ "Full stop `.'";
+
+ % The dot.
+ draw
+ splodge
+ above Bottom~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("/")
+ (smallgap#, smallcap#, smallgap#)
+ (bracketTop#, bracketBottom#);
+
+ "Virgule (slash) `/'";
+
+ % The line.
+ draw
+ fatten
+ rightof Bottom~Left
+ -- leftof Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (":")
+ (medgap#, tiny#, medgap#)
+ (aTop#, aBottom#);
+
+ fatsymmetric;
+
+ "Colon `:'";
+
+ % The top dot.
+ draw
+ splodge
+ below Top~Middle;
+
+ % The bottom dot.
+ draw
+ splodge
+ above Bottom~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ (";")
+ (medgap#, tiny#, medgap#)
+ (aTop#, aBottom# - comma_depth#);
+
+ fatsymmetric;
+
+ "Semicolon `;'";
+
+ % The upper dot.
+ draw
+ splodge
+ below Top~Middle;
+
+ % The lower dot and tail.
+ draw
+ splodger above aBottom~Middle
+ .. Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+beginblacker 1.5;
+bbchar
+ ("<")
+ (biggap#, arithmetic#, biggap#)
+ (math_axis# + 1/2lessthan#, math_axis# - 1/2lessthan#);
+
+ "Less than sign `<'";
+
+ % The top diagonal.
+ draw
+ Top~Right
+ --- Horizon~Left;
+
+ % The bottom diagonal, fattened, and clipped by the top.
+ % We need to carry on the diagonal past where it started,
+ % so we extend it up to the top of the character.
+ draw
+ fatcliponce
+ (leftof Bottom~Right
+ --- rightof Horizon~Left
+ .. farrightof Top~(2Left - Right))
+ (Top~Right -- Horizon~Left)
+
+endchar;
+endblacker;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("=")
+ (medgap#, tiny#, medgap#)
+ (math_axis# + 1/2tiny#, math_axis# - 1/2tiny#);
+
+ fatsymmetric;
+
+ "Centred dot";
+
+ % The dot.
+ draw
+ splodge
+ above Bottom~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+beginblacker 1.5;
+
+bbchar
+ (">")
+ (biggap#, arithmetic#, biggap#)
+ (math_axis# + 1/2lessthan#, math_axis# - 1/2lessthan#);
+
+ "Greater than sign `>'";
+
+ % The top diagonal.
+ draw
+ Top~Left
+ --- Horizon~Right;
+
+ % The bottom diagonal, fattened, and clipped by the top.
+ % We need to carry on the diagonal past where it started,
+ % so we extend it up to the top of the character.
+ draw
+ fatcliponce
+ (rightof Bottom~Left
+ --- leftof Horizon~Right
+ .. farleftof Top~(2Right - Left))
+ (Top~Left -- Horizon~Right)
+
+endchar;
+endblacker;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("?")
+ (medgap#, smallcap#, medgap#);
+
+ fatsymmetric;
+
+ "Question mark `?'";
+
+ % The height of the bottom of the curl.
+ var (numeric) curlBottom;
+
+ curlBottom = Bottom + fatness + space;
+
+ % The curl.
+ var (path) questionpath;
+
+ questionpath
+ = (Top - CCurl)~Left
+ .. oabove Top~Middle {right}
+ .. (1/3[Top, curlBottom])~Right {down}
+ .. rightof (2/3[Top, curlBottom])~Middle {left}
+ .. leftof curlBottom~Middle {down};
+
+ draw questionpath;
+
+ % The emphasis, clipped with the bottom bit of the question path.
+ draw
+ fatcliponce
+ (curlBottom~Middle -- oabove Top~Middle)
+ (subpath (2, infinity) of questionpath);
+
+ % The dot.
+ draw
+ splodge
+ above Bottom~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("@")
+ (medgap#, tiny# + 2fatness#, medgap#)
+ (ATop#, aBottom#);
+
+ "At sign `@'";
+
+ % The curl.
+ var (path) atpath;
+
+ atpath
+ = (Bottom + CCurl)~Right
+ .. obelow Bottom~Middle {left}
+ .. Horizon~Left {up}
+ .. oabove Top~Middle {right}
+ .. splodger leftof Horizon~Right;
+
+ % The emphasis.
+ draw
+ fatcliptwice
+ (obelow rightof Bottom~Left -- oabove rightof Top~Left)
+ (atpath);
+
+ % The curl.
+ draw atpath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("[")
+ (biggap#, tiny# + jut#, smallgap#)
+ (bracketTop#, bracketBottom#);
+
+ "Left square bracket `['";
+
+ % The vertical.
+ draw
+ fatten
+ rightof Bottom~Left
+ -- rightof Top~Left;
+
+ % The top line.
+ draw
+ Top~Left
+ -- Top~Right;
+
+ % The bottom line.
+ draw
+ Bottom~Left
+ -- Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("\")
+ (smallgap#, smallcap#, smallgap#)
+ (bracketTop#, bracketBottom#);
+
+ "Reverse slash `\'";
+
+ % The line.
+ draw
+ fatten
+ leftof Bottom~Right
+ -- rightof Top~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("]")
+ (smallgap#, tiny# + jut#, biggap#)
+ (bracketTop#, bracketBottom#);
+
+ "Right square bracket `]'";
+
+ % The vertical.
+ draw
+ fatten
+ leftof Bottom~Right
+ -- leftof Top~Right;
+
+ % The top line.
+ draw
+ Top~Left
+ -- Top~Right;
+
+ % The bottom line.
+ draw
+ Bottom~Left
+ -- Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+beginblacker 1.25;
+bbchar
+ ("^")
+ (biggap#, tiny# + jut#, smallgap#)
+ (bracketTop#, bracketBottom#);
+
+ "Left angle bracket";
+
+ % The emphasis, clipped by the bracket.
+ draw
+ fatcliptwice
+ (rightof Bottom~Left -- rightof Top~Left)
+ (Bottom~Right -- Horizon~Left -- Top~Right);
+
+ % The bracket.
+ draw
+ Bottom~Right
+ -- Horizon~Left
+ -- Top~Right
+
+endchar;
+endblacker;
+
+% -------------------------------------------------------------------
+
+beginblacker 1.25;
+bbchar
+ ("_")
+ (smallgap#, tiny# + jut#, biggap#)
+ (bracketTop#, bracketBottom#);
+
+ "Right angle bracket";
+
+ % The emphasis, clipped by the bracket.
+ draw
+ fatcliptwice
+ (leftof Bottom~Right -- leftof Top~Right)
+ (Bottom~Left -- Horizon~Right -- Top~Left);
+
+ % The bracket.
+ draw
+ Bottom~Left
+ -- Horizon~Right
+ -- Top~Left
+
+endchar;
+endblacker;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("`")
+ (medgap#, tiny#, medgap#)
+ (bTop#, bTop# - tiny# - comma_depth#);
+
+ fatsymmetric;
+
+ "Reverse apostrophe ``'";
+
+ % The dot and tail.
+ draw
+ splodgel above Bottom~Middle
+ .. Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("|")
+ (biggap#, tiny#, biggap#)
+ (bracketTop#, bracketBottom#);
+
+ "Vertical bar `|'";
+
+ % The line.
+ draw
+ fatten
+ Bottom~Middle
+ -- Top~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
diff --git a/fonts/bbold/bbupper.mf b/fonts/bbold/bbupper.mf
new file mode 100644
index 0000000000..c839abf2ed
--- /dev/null
+++ b/fonts/bbold/bbupper.mf
@@ -0,0 +1,698 @@
+% Blackboard bold capitals, Alan Jeffrey, 11--14 Dec 1989.
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("A")
+ (smallgap#, medcap#, smallgap#);
+
+ "The letter A";
+
+ % The bar, clipped by the wedge.
+ draw
+ cliptwice
+ (ABar~Left -- ABar~Right)
+ (Bottom~Left -- Top~Middle -- Bottom~Right);
+
+ % The left line, fattened, and clipped by the right line.
+ outline
+ fatcliponce
+ (rightof Bottom~Left -- rightof Top~Middle)
+ (Top~Middle -- Bottom~Right);
+
+ % The right line.
+ draw
+ Top~Middle
+ -- Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("B")
+ (biggap#, smallcap#, medgap#);
+
+ "The letter B";
+
+ % The top arc.
+ draw
+ Top~Left
+ -- Top~Middle {right}
+ .. (Top -+- BBar)~Right
+ .. {left} BBar~Middle
+ -- BBar~Left;
+
+ % The bottom arc.
+ draw
+ BBar~Left
+ -- BBar~Middle {right}
+ .. (BBar -+- Bottom)~Right
+ .. {left} Bottom~Middle
+ -- Bottom~Left;
+
+ % The left line, fattened.
+ outline
+ fatten
+ rightof Top~Left
+ -- rightof Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("C")
+ (medgap#, medcap#, medgap#);
+
+ "The letter C";
+
+ % The curve of the C.
+ var (path) Cpath;
+
+ Cpath
+ = (Top - CCurl)~Right
+ .. oabove Top~Middle {left}
+ .. Horizon~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. (Bottom + CCurl)~Right;
+
+ % The fat line emphasising the left side, clipped by the curve.
+ draw
+ fatcliptwice
+ (obelow rightof Bottom~Left -- oabove rightof Top~Left)
+ (Cpath);
+
+ % The curve.
+ draw Cpath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("D")
+ (biggap#, medcap#, medgap#);
+
+ "The letter D";
+
+ % The curve of the D.
+ draw
+ Top~Left
+ -- Top~Middle {right}
+ .. Horizon~Right {down}
+ .. {left} Bottom~Middle
+ -- Bottom~Left;
+
+ % The left line, fattened.
+ draw
+ fatten
+ rightof Top~Left
+ --- rightof Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("E")
+ (biggap#, smallcap#, smallgap#);
+
+ "The letter E";
+
+ % The top line.
+ draw
+ Top~Left
+ -- Top~Right;
+
+ % The bar.
+ draw
+ BBar~Left
+ -- farrightof BBar~(Left + bigjut);
+
+ % The bottom line.
+ draw
+ Bottom~Left
+ -- Bottom~Right;
+
+ % The left line, fattened.
+ outline
+ fatten
+ rightof Top~Left
+ -- rightof Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("F")
+ (biggap#, smallcap#, smallgap#);
+
+ "The letter F";
+
+ % The top line.
+ draw
+ Top~Left
+ -- Top~Right;
+
+ % The bar.
+ draw
+ BBar~Left
+ -- farrightof BBar~(Left + bigjut);
+
+ % The left line, fattened.
+ outline
+ fatten
+ rightof Top~Left
+ -- rightof Bottom~Left
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("G")
+ (medgap#, medcap#, medgap#);
+
+ "The letter G";
+
+ % The curve of the G (which is the same as of a C).
+ var (path) Gpath;
+
+ Gpath
+ = (Top - CCurl)~Right
+ .. oabove Top~Middle {left}
+ .. Horizon~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. (Bottom + CCurl)~Right;
+
+ % The emphasis for the left of the curve.
+ draw
+ fatcliptwice
+ (rightof obelow Bottom~Left -- oabove rightof Top~Left)
+ (Gpath);
+
+ % The curve.
+ draw Gpath;
+
+ % The bar.
+ draw
+ (Bottom + CCurl)~Right
+ -- GBar~Right
+ -- GBar~(Right - bigjut)
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("H")
+ (biggap#, medcap#, biggap#);
+
+ "The letter H";
+
+ % The right line.
+ draw
+ Top~Right
+ -- Bottom~Right;
+
+ % The bar.
+ draw
+ BBar~Left
+ -- BBar~Right;
+
+ % The left line, fattened.
+ outline
+ fatten
+ rightof Top~Left
+ -- rightof Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("I")
+ (biggap#, tiny#, biggap#);
+
+ "The letter I";
+
+ % The vertical, fattened.
+ draw
+ fatten
+ Top~Middle
+ -- Bottom~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("J")
+ (medgap#, smallcap#, biggap#);
+
+ "The letter J";
+
+ % The curve.
+ var (path) Jpath;
+
+ Jpath
+ = Top~Right
+ -- (Bottom -+- Top)~Right {down}
+ .. obelow Bottom~Middle {left}
+ .. (Bottom + CCurl)~Left;
+
+ % The emphasis on the J, clipped by the curve.
+ draw
+ fatcliponce
+ (leftof Top~Right -- obelow leftof Bottom~Right)
+ (Jpath);
+
+ % The curve.
+ draw Jpath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("K")
+ (biggap#, smallcap#, medgap#);
+
+ "The letter K";
+
+ % The point at which the top diagonal hits the left side of the character.
+ % It is somewhere along the line from the top right to BBar~Middle.
+
+ z1 = whatever[Top~Right, BBar~Middle];
+ x1 = Left;
+
+ % The top diagonal.
+ draw
+ z1 -- Top~Right;
+
+ % The bottom diagonal.
+ draw
+ BBar~Middle
+ -- Bottom~Right;
+
+ % The left edge, fattened.
+ outline
+ fatten
+ rightof Top~Left
+ -- rightof Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("L")
+ (biggap#, smallcap#, smallgap#);
+
+ "The letter L";
+
+ % The bottom line.
+ draw
+ Bottom~Left
+ -- Bottom~Right;
+
+ % The left line, fattened.
+ draw
+ fatten
+ rightof Top~Left
+ -- rightof Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("M")
+ (biggap#, medcap#, biggap#);
+
+ symmetric;
+
+ "The letter M";
+
+ % The left line, fattened and clipped by the left diagonal.
+
+ draw
+ fatcliponce
+ (rightof Bottom~Left -- rightof Top~Left)
+ (Top~Left -- BBar~Middle);
+
+ % The rest of the letter.
+ draw
+ Top~Left
+ -- BBar~Middle
+ -- Top~Right
+ -- Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("N")
+ (biggap#, medcap#, biggap#);
+
+ "The letter N";
+
+ % The left line, fattened and clipped by the diagonal.
+
+ draw
+ fatcliponce
+ (rightof Bottom~Left -- rightof Top~Left)
+ (Top~Left -- Bottom~Right);
+
+ % The rest of the letter.
+ draw
+ Top~Left
+ -- Bottom~Right
+ -- Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("O")
+ (medgap#, medcap#, medgap#);
+
+ "The letter O";
+
+ % The path of the O.
+ var (path) Opath;
+
+ Opath
+ = oabove Top~Middle
+ .. Horizon~Left
+ .. obelow Bottom~Middle
+ .. Horizon~Right
+ .. cycle;
+
+ % The emphasis at the left of the O, clipped by the O curve.
+ draw
+ fatcliptwice
+ (obelow rightof Bottom~Left -- oabove rightof Top~Left)
+ (Opath);
+
+ % The curve.
+ draw Opath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("P")
+ (biggap#, smallcap#, medgap#);
+
+ "The letter P";
+
+ % The arc.
+ draw
+ Top~Left
+ -- Top~Middle {right}
+ .. (Top -+- BBar)~Right
+ .. {left} BBar~Middle
+ -- BBar~Left;
+
+ % The left line, fattened.
+ outline
+ fatten
+ rightof Top~Left
+ -- rightof Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbchar
+ ("Q")
+ (medgap#, medcap#, medgap#)
+ (ATop#, QTailBottom#);
+
+ "The letter Q";
+
+ % The path of the Q.
+ var (path) Qpath;
+
+ Qpath
+ = oabove Top~Middle
+ .. (Top -+- aBottom)~Left
+ .. obelow aBottom~Middle
+ .. (Top -+- aBottom)~Right
+ .. cycle;
+
+ % The emphasis at the left of the Q, clipped by the Q curve.
+ draw
+ fatcliptwice
+ (obelow rightof Bottom~Left -- oabove rightof Top~Left)
+ (Qpath);
+
+ % The curve.
+ draw Qpath;
+
+ % The tail.
+ draw
+ QTailTop~Middle
+ -- QTailBottom~Right
+
+endchar;
+
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("R")
+ (biggap#, smallcap#, medgap#);
+
+ "The letter R";
+
+ % The arc.
+ draw
+ Top~Left
+ -- Top~Middle {right}
+ .. (Top -+- BBar)~Right
+ .. {left} BBar~Middle
+ -- BBar~Left;
+
+ % The left line, fattened.
+ outline
+ fatten
+ rightof Top~Left
+ -- rightof Bottom~Left;
+
+ % The diagonal.
+ draw
+ BBar~Middle
+ -- Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("S")
+ (medgap#, smallcap#, medgap#);
+
+ "The letter S";
+
+ % The path of the S.
+ var (path) Spath;
+
+ Spath
+ = (Top - CCurl)~Right
+ .. oabove Top~Middle {left}
+ .. (Top -+- BBar)~Left {down}
+ .. BBar~Middle {right}
+ .. (BBar -+- Bottom)~Right {down}
+ .. obelow Bottom~Middle {left}
+ .. (Bottom + CCurl)~Left;
+
+ % The emphasis at the top left of the S.
+ draw
+ fatcliptwice
+ (oabove rightof Top~Left -- rightof BBar~Left)
+ (subpath (0, 4) of Spath);
+
+ % The path of the S.
+ draw Spath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("T")
+ (smallgap#, medcap#, smallgap#);
+
+ fatsymmetric;
+
+ "The letter T";
+
+ % The top line.
+ draw
+ Top~Left
+ -- Top~Right;
+
+ % The vertical, fattened.
+ draw
+ fatten
+ Top~Middle
+ -- Bottom~Middle
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("U")
+ (biggap#, medcap#, biggap#);
+
+ "The letter U";
+
+ % The path of the U.
+ var (path) Upath;
+
+ Upath
+ = Top~Left
+ -- Horizon~Left {down}
+ .. obelow Bottom~Middle {right}
+ .. {up} Horizon~Right
+ -- Top~Right;
+
+ % The emphasis of the U.
+ draw
+ fatcliponce
+ (rightof Top~Left -- obelow rightof Bottom~Left)
+ (Upath);
+
+ % The path of the U.
+ draw Upath
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("V")
+ (smallgap#, medcap#, smallgap#);
+
+ symmetric;
+
+ "The letter V";
+
+ % The left diagonal, clipped by the right.
+ draw
+ fatcliponce
+ (rightof Top~Left -- rightof Bottom~Middle)
+ (Bottom~Middle -- Top~Right);
+
+ % The right diagonal.
+ draw
+ Bottom~Middle
+ -- Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("W")
+ (smallgap#, bigcap#, smallgap#);
+
+ symmetric;
+
+ "The letter W";
+
+ % The left diagonal, clipped by the rest.
+ draw
+ fatcliponce
+ (rightof Top~Left -- rightof Bottom~(Left -+- Middle))
+ (Bottom~(Left -+- Middle) -- BBar~Middle);
+
+ % The rest of the letter.
+ draw
+ Bottom~(Left -+- Middle)
+ -- BBar~Middle
+ -- Bottom~(Middle -+- Right)
+ -- Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("X")
+ (medgap#, medcap#, medgap#);
+
+ "The letter X";
+
+ % The SE diagonal.
+ draw
+ Top~Left
+ -- Bottom~Right;
+
+ % The SW diagonal, fattened.
+ outline
+ fatten
+ leftof Top~Right
+ -- rightof Bottom~Left
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("Y")
+ (smallgap#, medcap#, smallgap#);
+
+ fatsymmetric;
+
+ "The letter Y";
+
+ % The fat stroke running top left to bottom.
+ draw
+ fatten
+ rightof Top~Left
+ -- BBar~Middle
+ -- Bottom~Middle;
+
+ % The right diagonal.
+ draw
+ rightof BBar~Middle
+ -- Top~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+
+bbcap
+ ("Z")
+ (medgap#, medcap#, medgap#);
+
+ "The letter Z";
+
+ % The top line.
+ draw
+ Top~Left
+ -- Top~Right;
+
+ % The diagonal, fattened.
+ draw
+ fatten
+ leftof Top~Right
+ -- rightof Bottom~Left;
+
+ % The bottom line.
+ draw
+ Bottom~Left
+ -- Bottom~Right
+
+endchar;
+
+% -------------------------------------------------------------------
+