diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/bbold |
Initial commit
Diffstat (limited to 'fonts/bbold')
-rw-r--r-- | fonts/bbold/INSTALL | 40 | ||||
-rw-r--r-- | fonts/bbold/README | 12 | ||||
-rw-r--r-- | fonts/bbold/bbbase.mf | 374 | ||||
-rw-r--r-- | fonts/bbold/bbgreekl.mf | 684 | ||||
-rw-r--r-- | fonts/bbold/bbgreeku.mf | 315 | ||||
-rw-r--r-- | fonts/bbold/bbligs.mf | 91 | ||||
-rw-r--r-- | fonts/bbold/bblower.mf | 760 | ||||
-rw-r--r-- | fonts/bbold/bbnum.mf | 300 | ||||
-rw-r--r-- | fonts/bbold/bbold.dtx | 265 | ||||
-rw-r--r-- | fonts/bbold/bbold.mf | 9 | ||||
-rw-r--r-- | fonts/bbold/bbold.pdf | bin | 0 -> 159217 bytes | |||
-rw-r--r-- | fonts/bbold/bbold10.mf | 19 | ||||
-rw-r--r-- | fonts/bbold/bbold12.mf | 19 | ||||
-rw-r--r-- | fonts/bbold/bbold17.mf | 19 | ||||
-rw-r--r-- | fonts/bbold/bbold5.mf | 19 | ||||
-rw-r--r-- | fonts/bbold/bbold6.mf | 19 | ||||
-rw-r--r-- | fonts/bbold/bbold7.mf | 19 | ||||
-rw-r--r-- | fonts/bbold/bbold8.mf | 19 | ||||
-rw-r--r-- | fonts/bbold/bbold9.mf | 19 | ||||
-rw-r--r-- | fonts/bbold/bbparams.mf | 205 | ||||
-rw-r--r-- | fonts/bbold/bbpunc.mf | 691 | ||||
-rw-r--r-- | fonts/bbold/bbupper.mf | 698 |
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 Binary files differnew file mode 100644 index 0000000000..ca415309bc --- /dev/null +++ b/fonts/bbold/bbold.pdf 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; + +% ------------------------------------------------------------------- + |