2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% ====================================================================
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% @METAFONT-file{
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% author-1 = "Jeremy Gibbons",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% author-2 = "Alan Jeffrey",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% version = "1.1",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% date = "02 June 1992",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% time = "15:06:36 BST",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% filename = "stmaryba.mf",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% address-1 = "Department of Computer Science
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% University of Aukland
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% Private Bag
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% Aukland
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% New Zealand",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% address-2 = "School of Cognitive and Computing Sciences
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% University of Sussex
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% Brighton BN1 9QH
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% UK",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% telephone-1 = "+64 9 373 7599 x 5120",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% telephone-2 = "+44 273 606755 x 3238",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% FAX-1 = "+64 9 373 7453",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% FAX-2 = "+44 273 678188",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% checksum = "49457 121 567 4939",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% email-1 = "jeremy@cs.aukuni.ac.nz",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% email-2 = "alanje@cogs.sussex.ac.uk",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% codetable = "ISO/ASCII",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% keywords = "metafont symbols math fonts",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% supported = "yes",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% abstract = "This is part of the metafont program for
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% the St Mary's Road symbol font.",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% docstring = "This is part of the metafont program for
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% the St Mary's Road symbol font. The font
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% contains a number of mathematical
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% characters which are not present in the
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% standard TeX and AMS symbol fonts.
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%%
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% It is described in stmaryrd.tex.
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%%
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% Copyright 1992 Jeremy Gibbons and Alan Jeffrey.
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%%
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% The checksum field above contains a CRC-16
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% checksum as the first value, followed by the
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% equivalent of the standard UNIX wc (word
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% count) utility output of lines, words, and
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% characters. This is produced by Robert
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% Solovay's checksum utility.",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% package = "St Mary's Road",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% dependencies = "none",
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% }
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% ====================================================================
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%%
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% 20 May 1991, v1.0: Created the font out of alans.mf and galileo.mf.
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%%
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% 2 Jun 1992, v1.1: added the headers.
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann% This is the base file for the St Mary's Road symbol font, stmaryrd.mf.
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann% The following stolen from the AMS bsymbols.mf file:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndef char_negate(suffix c,t,b) = %c is center point; t is top point; b is bottom
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannw-x.t=x.b; y.t-y.c=y.c-y.b; draw z.t--z.b;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(t,c,b); enddef;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndef char_center(suffix c) = % find center of type character
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx.c=w/2; y.c=.5[-d,h]; enddef;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann% The command to draw semantic brackets:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndef left_semantic_bracket(expr breadth,do_top,do_bot) =
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pickup crisp.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann numeric thickness; thickness=hround breadth;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pos1(thickness,0); pos2(thickness,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann top y1=h; bot y2=1-d; lft x1l=lft x2l=hround(2.5u-.5thickness);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann filldraw stroke z1e--z2e; % stem1
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pos3(thickness,90); pos4(thickness,90);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pos5(thickness,90); pos6(thickness,90);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann x3=x5=x1l; rt x4=rt x6=hround(w-.75u+.5thickness);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann y3r=y4r=y1; y5l=y6l=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann if do_top: filldraw stroke z3e--z4e; fi % upper bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann if do_bot: filldraw stroke z5e--z6e; fi % lower bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pos7(thickness,0); pos8(thickness,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann y7=y1; y8=y2; x7=x8=x1+hround(0.5(w - 3.25u));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann filldraw stroke z7e--z8e; % stem2
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann penlabels(1,2,3,4,5,6,7,8); enddef;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndef right_semantic_bracket(expr breadth,do_top,do_bot) =
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pickup crisp.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann numeric thickness; thickness=hround breadth;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pos1(thickness,0); pos2(thickness,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann top y1=h; bot y2=1-d; rt x1r=rt x2r=hround(w-2.5u+.5thickness);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann filldraw stroke z1e--z2e; % stem1
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pos3(thickness,90); pos4(thickness,90);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pos5(thickness,90); pos6(thickness,90);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann x3=x5=x1r; lft x4=lft x6=hround(.75u-.5thickness);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann y3r=y4r=y1; y5l=y6l=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann if do_top: filldraw stroke z3e--z4e; fi % upper bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann if do_bot: filldraw stroke z5e--z6e; fi % lower bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pos7(thickness,0); pos8(thickness,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann y7=y1; y8=y2; x7=x8=x1-hround(0.5(w - 3.25u));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann filldraw stroke z7e--z8e; % stem2
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann penlabels(1,2,3,4,5,6,7,8); enddef;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann% The command to draw a circle (with free symmetry hacks):
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndef begincircle (expr n) =
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann beginarithchar(n);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann if .5w <> good.x .5w: change_width; fi
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann lft x6=hround u-eps; x2=w-x6; y2=math_axis; y8-y2 = .5(x2-x6);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann circle_points; draw_circle % circle
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannenddef;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann% And to draw a box (with free symmetry hacks):
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndef beginbox (expr n) =
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann beginarithchar(n);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann if .5w <> good.x .5w: change_width; fi
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann lft x1=hround 1.5u-eps; x2=w-x1; x3=x2; x4=x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann y1-y4 = x2-x1; .5[y1,y4]=math_axis; y1=y2; y3=y4;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann draw z1--z2--z3--z4--cycle; % box
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannenddef