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 = "stmaryaj.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 = "16420 1066 3686 40419",
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%%% 24 May 1991, v1.01: Finished the first version.
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%%
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% 25 Jun 1991, v1.02: Corrected bugs with arrow_not and Arrow_not.
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%%
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann%%% 2 Jun 1992, v1.1: added the headers.
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known left_right_arrow_eq:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Left and right arrow equality";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(left_right_arrow_eq,14u#,v_center(spread#+.96asc_height#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,90);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos2(rule_thickness,90); pos3(bar,0); pos4(bar,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny0=y1=y2=math_axis; x1=.5w; rt
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx0=hround(w-.75u); y3-y0=y0-y4=.24asc_height+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx3=x4=x0-3u-eps; pos5(bar,angle(z4-z0)); z5l=z0;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos6(bar,angle(z3-z0)); z6l=z0; z9=.381966[.5[z3,z4],z0];
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannnumeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannintersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpath p; p=z0..{z4-z9}z4r--subpath (0,t)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannof\\(z4l{z9-z4}..z6r)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --z3r{z9-z3}..z0 & cycle; % arrowhead and stem
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannp:=p shifted (0,.5spread); filldraw p; % top
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannaddto currentpicture also currentpicture xscaled -1 shifted (w,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x10=hround u; x11=w-x10; y10=y11=math_axis-.5spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z10--z11; % bottom
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(0,1,2,3,4,5,6,9,10,11); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known curly_vee_down_arrow:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Upside-down upwards accumulate symbol";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(curly_vee_down_arrow,12u#,asc_height#,asc_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx2=good.x .5w; w:=r:=2x2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=0; x3=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbot y1=-d; top y2=h+o; y3=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x2; y4=h-(x_height+d);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpickup crisp.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos11(rule_thickness,0); pos12(rule_thickness,0); % arrow head nicked from
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos13(bar,90); pos14(bar,90); % up_arrow
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x11l=hround(.5w-.5rule_thickness); y11-.5rule_thickness=-d;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx10=x11=x12; top y10=top y2; x10-x13=x14-x10=3u+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny13=y14=y10-.24asc_height-eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos15(bar,angle(z14-z10)); z15l=z10;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos16(bar,angle(z13-z10)); z16l=z10;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz19=.381966[.5[z13,z14],z10];
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannnumeric t; path p; p=z14l{z19-z14}..z16r;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannt=xpart(p intersectiontimes((x12r,-d)--(x12r,h))); y12=ypart point t of p;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw z10..{z14-z19}z14r--subpath (0,t) of\\(z14l{z19-z14}..z16r)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --z12r
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann -- % ---z11r..z11l---
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann z12l--subpath (t,0) of\\(z13l{z19-z13}..z15r)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --z13r{z19-z13}..z10 & cycle; % arrowhead
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannnumeric t; path p; p=z1{z4-z1}..{up}z2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannt=xpart(p intersectiontimes((0,y12)--(w,y12)));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw subpath (0,t) of\\(z1{z4-z1}..{up}z2); % left arm
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw subpath (0,t) of\\(z3{z4-z3}..{up}z2); % right arm
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncurrentpicture:= currentpicture yscaled -1 shifted (0,h-d);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannendchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known curly_vee_up_arrow:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Upside-down downwards accumulate symbol";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(curly_vee_up_arrow,12u#,asc_height#,asc_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx2=good.x .5w; w:=r:=2x2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=0; x3=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbot y1=-d; top y2=h+o; y3=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x2; y4=h-(x_height+d);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpickup crisp.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannnumeric theta,delta; theta=angle(z4-z1); delta=3u++.24asc_height;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos11(rule_thickness,-90+theta); pos12(rule_thickness,-90+theta);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos13(bar,-180+theta); pos14(bar,-180+theta);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x10=0; bot y10=-d;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx11=w; z11=z10+whatever*(dir theta); % where the arrow stem would go
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny13a=y10; x14a=x10; x13a-x10=y14a-y10=delta+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz13=z13a rotatedaround(z10,theta-45);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz14=z14a rotatedaround(z10,theta-45);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos15(bar,theta+45); z15l=z10; pos16(bar,theta-45); z16l=z10;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz19=.381966[.5[z13,z14],z10];
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannnumeric t; path p; p=z14l{z19-z14}..z16r;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannt=xpart(p intersectiontimes (z11l--(z11l+2(z10-z11)))); z12l=point t of p;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw z10..{z14-z19}z14r
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --subpath (0,t) of\\(z14l{z19-z14}..z16r)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --z12l
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann -- % ---z11l..z11r---
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann z12r
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --subpath (t,0) of\\(z13l{z19-z13}..z15r)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --z13r{z19-z13}..z10 & cycle; % left arrowhead
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannnumeric theta,delta; theta=angle(z3-z4); delta=3u++.24asc_height;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos21(rule_thickness,90+theta); pos22(rule_thickness,90+theta);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos23(bar,theta); pos24(bar,theta);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannrt x20=w; bot y20=-d;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx21=0; z21=z20+whatever*-(dir theta); % where the arrow stem would go
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx23a=x20; y24a=y20; y23a-y20=x20-x24a=delta+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz23=z23a rotatedaround(z20,theta+45);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz24=z24a rotatedaround(z20,theta+45);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos25(bar,theta+225); z25l=z20; pos26(bar,theta+135); z26l=z20;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz29=.381966[.5[z23,z24],z20];
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannnumeric t; path p; p=z24l{z29-z24}..z26r;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannt=xpart(p intersectiontimes (z21l--(z21l+2(z20-z21)))); z22l=point t of p;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw z20..{z24-z29}z24r
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --subpath (0,t) of\\(z24l{z29-z24}..z26r)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --z22l
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann -- % ---z21l..z21r---
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann z22r
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --subpath (t,0) of\\(z23l{z29-z23}..z25r)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --z23r{z29-z23}..z20 & cycle; % right arrowhead
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannnumeric t; path p; p=z2{down}..{z1-z4}z1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannt=xpart(p intersectiontimes(z12l--z12r));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw subpath (0,t) of\\(z2{down}..{z1-z4}z1); % left arm
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw subpath (0,t) of\\(z2{down}..{z3-z4}z3); % right arm
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncurrentpicture:= currentpicture yscaled -1 shifted (0,h-d);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannendchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known nnw_arrow: cmchar "Northnorthwest arrow";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(nnw_arrow,11u#,asc_height#,asc_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup crisp.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx1+.5rule_thickness=hround(w-u); lft x0=hround 3u; % This 3u used to be a u in
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1+.5rule_thickness=h; bot y0=-d; % the program for swarrow.
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann % 3u (with width 11u) gives
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann % arrow parallel to langle.
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannnumeric theta,delta; theta=angle(z1-z0); delta=3u++.24asc_height;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannif abs(theta-45)<2.5: theta:=45; y1:=y0+x1-x0; fi % near-45$^\circ$ angle
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos1(rule_thickness,-90+theta); pos2(rule_thickness,-90+theta);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos3(bar,-180+theta); pos4(bar,-180+theta);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann %y3=y0; x4=x0; x3-x0=y4-y0=delta+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny10=y0; x11=x0; x10-x0=y11-y0=delta+eps; % Can now do arrows of any angle
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz3=z10 rotatedaround(z0,theta-45);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz4=z11 rotatedaround(z0,theta-45);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos5(bar,theta+45); z5l=z0; pos6(bar,theta-45); z6l=z0;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz9=.381966[.5[z3,z4],z0];
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannnumeric t; path p; p=z4l{z9-z4}..z6r;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannt=xpart(p intersectiontimes (z1l--(z1l+2(z0-z1)))); z2l=point t of p;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw z0..{z4-z9}z4r
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --subpath (0,t) of\\(z4l{z9-z4}..z6r)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --z2l---z1l..z1r---z2r
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --subpath (t,0) of\\(z3l{z9-z3}..z5r)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --z3r{z9-z3}..z0 & cycle; % arrowhead and stem
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncurrentpicture:= currentpicture yscaled -1 shifted (0,h-d);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannendchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known nne_arrow: cmchar "Northnortheast arrow";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(nne_arrow,11u#,asc_height#,asc_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup crisp.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx1-.5rule_thickness=hround u; rt x0=hround(w-3u);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1+.5rule_thickness=h; bot y0=-d;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannnumeric theta,delta; theta=angle(z0-z1); delta=3u++.24asc_height;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannif abs(theta+45)<2.5: theta:=-45; y1:=y0+x0-x1; fi % near-45$^\circ$ angle
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos1(rule_thickness,90+theta); pos2(rule_thickness,90+theta);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos3(bar,theta); pos4(bar,theta);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann %x3=x0; y4=y0; y3-y0=x0-x4=delta+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx10=x0; y11=y0; y10-y0=x0-x11=delta+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz3=z10 rotatedaround(z0,theta+45);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz4=z11 rotatedaround(z0,theta+45);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos5(bar,theta+225); z5l=z0; pos6(bar,theta+135); z6l=z0;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz9=.381966[.5[z3,z4],z0];
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannnumeric t; path p; p=z4l{z9-z4}..z6r;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannt=xpart(p intersectiontimes (z1l--(z1l+2(z0-z1)))); z2l=point t of p;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw z0..{z4-z9}z4r
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --subpath (0,t) of\\(z4l{z9-z4}..z6r)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --z2l---z1l..z1r---z2r
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --subpath (t,0) of\\(z3l{z9-z3}..z5r)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann --z3r{z9-z3}..z0 & cycle; % arrowhead and stem
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncurrentpicture:= currentpicture yscaled -1 shifted (0,h-d);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannendchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known left_slice: cmchar "Left slice";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginarithchar(left_slice); pickup rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x6=hround u; x2=w-x6; y2=math_axis; y8-y2 = .5(x2-x6);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncircle_points; % circle
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z6--z3; % lessthan
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1..z2..z3; % arc
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known right_slice: cmchar "Right slice";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginarithchar(right_slice); pickup rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x6=hround u; x2=w-x6; y2=math_axis; y8-y2 = .5(x2-x6);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncircle_points; % circle
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z5--z2--z7; % greaterthan
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z5..z6..z7; % arc
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known var_o_less_than: cmchar "Circular circle-lessthan operator";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbegincircle(var_o_less_than);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z6--z3; % lessthan
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known var_o_greater_than: cmchar "Circular circle-greaterthan operator";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbegincircle(var_o_greater_than);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z5--z2--z7; % greaterthan
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known var_o_vee: cmchar "Circular circle-vee operator";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbegincircle(var_o_vee);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z4--z7; % vee
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known var_o_wedge: cmchar "Circular circle-wedge operator";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbegincircle(var_o_wedge);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z3--z8--z5; % wedge
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known tall_oblong: cmchar "Tall oblong (Dijkstra choice symbol)";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(tall_oblong,9u#,body_height#,paren_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx1=x2; top y1=h; .5[y1,y2]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx3=x4=w-x1; y3=y1; y4=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#); x3-x1=spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z2--z4--z3--cycle; % stems
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known interleave:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Triple vertical line (interleaving)";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(interleave,12.5u#,body_height#,paren_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx1=x2; top y1=h; .5[y1,y2]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x3; x5=x6=w-x1; y5=y3=y1; y6=y4=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx3-x1=x5-x3=hround spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z2; draw z3--z4; draw z5--z6; % stems
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known o_bar: cmchar "Circle-bar operator";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginarithchar(o_bar); pickup light_rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncircle_points; draw_circle; % circle
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z4--z8; % bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known o_bslash: cmchar "Circle-backslash operator";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginarithchar(o_bslash); pickup light_rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncircle_points; draw_circle; % circle
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z3--z7; % diagonal
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known o_less_than: cmchar "Circle-lessthan operator";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginarithchar(o_less_than); pickup light_rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncircle_points; draw_circle; % circle
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z6--z3; % lessthan
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known o_greater_than: cmchar "Circle-greaterthan operator";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginarithchar(o_greater_than); pickup light_rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncircle_points; draw_circle; % circle
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z5--z2--z7; % greaterthan
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known o_vee: cmchar "Circle-vee operator";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginarithchar(o_vee); pickup light_rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncircle_points; draw_circle; % circle
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z4--z7; % vee
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known o_wedge: cmchar "Circle-wedge operator";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginarithchar(o_wedge); pickup light_rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncircle_points; draw_circle; % circle
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z3--z8--z5; % wedge
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known oblong:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Oblong (Hoare choice)";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(oblong,12u#,.8asc_height#,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround 1.1u; x2=x1; x4=x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1=good.y h+o; bot y2=0; y4=y2; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z2---z4---z5--cycle; % stems and bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,4,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known in_plus: cmchar "Bag element sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(5/4x_height#,3/2x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(in_plus,12u#,v_center(spread#+rule_thickness#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannitalcorr h#*slant-u#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x2=hround 1.5u-eps; x1=x3=x6=w-x2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1-y3=spread; y2=y6=.5[y1,y3]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x5=.5w+u; y4=y1; y5=y3;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z4...z2{down}...z5---z3; % arc and bars
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z2--z6; % middle bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx12=x13=.47[x1,x2]; y12=y1-3rule_thickness+eps; y13=y3+3rule_thickness+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z12--z13; % vertical bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,12,13); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known ni_plus: cmchar "Reversed bag element sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(5/4x_height#,3/2x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(ni_plus,12u#,v_center(spread#+rule_thickness#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannitalcorr h#*slant-u#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround 1.5u-eps; x1=x3=x6=w-x2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1-y3=spread; y2=y6=.5[y1,y3]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x5=.5w-u; y4=y1; y5=y3;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z4...z2{down}...z5---z3; % arc and bars
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z2--z6; % middle bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx12=x13=.47[x1,x2]; y12=y1-3rule_thickness+eps; y13=y3+3rule_thickness+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z12--z13; % vertical bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,12,13); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known n_plus: cmchar "Bag intersection";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(n_plus,12u#,.8asc_height#,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannitalcorr .8asc_height#*slant-.5u#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u; x2=x1; x3=w-x3; x4=x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny3=good.y h+o; bot y1=-o; y2=y4=2/3[y1,y3]; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z2...z3...z4---z5; % stems and cap
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny8=y9=.47[y1,y3]; x8=w-x9=x1+2rule_thickness+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx6=x7=x3; .5[y6,y7]=y8; y7-y6=x9-x8;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z6--z7; draw z8--z9; % enclosed plus sign
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8,9); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known sub_set_plus: cmchar "Proper subbag sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(5/4x_height#,3/2x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(sub_set_plus,14u#,v_center(spread#+rule_thickness#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannitalcorr h#*slant-u#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x2=hround 1.5u-eps; x1=x3=w-x2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1-y3=spread; y2=.5[y1,y3]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x5=.5w; y4=y1; y5=y3;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z4...z2{down}...z5---z3; % arc and bars
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx12=x13=.40[x1,x2]; y12=y1-3rule_thickness+eps; y13=y3+3rule_thickness+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny10=y11=y2; .5[x10,x11]=x12; x11-x10=y12-y13;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z12--z13; draw z10--z11; % enclosed plus sign
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,10,11,12,13); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known sup_set_plus: cmchar "Proper superbag sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(5/4x_height#,3/2x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(sup_set_plus,14u#,v_center(spread#+rule_thickness#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannitalcorr h#*slant-u#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround 1.5u-eps; x2=w-x1; x3=x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1-y3=spread; y2=.5[y1,y3]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x5=.5w; y4=y1; y5=y3;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z4...z2{down}...z5---z3; % arc and bars
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx12=x13=.40[x1,x2]; y12=y1-3rule_thickness+eps; y13=y3+3rule_thickness+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny10=y11=y2; .5[x10,x11]=x12; x11-x10=y12-y13;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z12--z13; draw z10--z11; % enclosed plus sign
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,10,11,12,13); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known sub_set_plus_eq: cmchar "Subbag or equal to sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannspread#':=spread#; spread':=spread; % the spread of `$=$'
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(5/4x_height#,3/2x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(sub_set_plus_eq,14u#,v_center(spread#'+spread#+rule_thickness#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x2=hround 1.5u-eps; x1=x3=w-x2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1-y3=spread; y2=.5[y1,y3]; top y1=h;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x5=.5w; y4=y1; y5=y3;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z4...z2{down}...z5---z3; % arc and bars
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx8=x1; lft x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % lower bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx12=x13=.40[x1,x2]; y12=y1-3rule_thickness+eps; y13=y3+3rule_thickness+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny10=y11=y2; .5[x10,x11]=x12; x11-x10=y12-y13;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z12--z13; draw z10--z11; % enclosed plus sign
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,7,8,10,11,12,13); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known sup_set_plus_eq: cmchar "Superbag or equal to sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannspread#':=spread#; spread':=spread; % the spread of `$=$'
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(5/4x_height#,3/2x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(sup_set_plus_eq,14u#,v_center(spread#'+spread#+rule_thickness#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround 1.5u-eps; x2=w-x1; x3=x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1-y3=spread; y2=.5[y1,y3]; top y1=h;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x5=.5w; y4=y1; y5=y3;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z4...z2{down}...z5---z3; % arc and bars
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx8=x1; rt x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % lower bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx12=x13=.40[x1,x2]; y12=y1-3rule_thickness+eps; y13=y3+3rule_thickness+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny10=y11=y2; .5[x10,x11]=x12; x11-x10=y12-y13;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z12--z13; draw z10--z11; % enclosed plus sign
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,7,8,10,11,12,13); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known L_bag: cmchar "Left bag bracket";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(L_bag,8u#,body_height#,paren_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann % ht and dp from "left parenthesis" symbol
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup fine.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos0(hair,180); pos1(vair,90); pos2(hair,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos3(cap_stem,0); pos4(vair,90); pos5(flare,180);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x0r=lft x3l=lft x5r=hround u; y0=h-2u;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx1=1/2[x0,x2]; top y1r=h;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx2=2/3[x0,x4]; y2=y0;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny3=0;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=w-x0r; bot y4l=-d;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z1e{right}..z2e{down}..z3e{down}..{right}z4e; % arc
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbulb(1,0,5);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(0,1,2,3,4,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known R_bag: cmchar "Right bag bracket";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(R_bag,8u#,body_height#,paren_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann % ht and dp from "left parenthesis" symbol
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup fine.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos0(hair,180); pos1(vair,90); pos2(hair,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos3(cap_stem,0); pos4(vair,90); pos5(flare,180);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x0r=lft x3l=lft x5r=hround u; y0=h-2u;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx1=1/2[x0,x2]; top y1r=h;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx2=2/3[x0,x4]; y2=y0;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny3=0;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=w-x0r; bot y4l=-d;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z1e{right}..z2e{down}..z3e{down}..{right}z4e; % arc
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbulb(1,0,5);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncurrentpicture:= currentpicture xscaled -1 shifted (w,0); % OK, so sue me!
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannendchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known ll_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Left semantic bracket [[";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(ll_bracket,7.25u#,body_height#,paren_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=h; bot y2=-d; lft x1l=lft x2l=hround(2.5u-.5rule_thickness)-1-eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z1e--z2e; % left stem
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos7(rule_thickness,0); pos8(rule_thickness,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y7=h; bot y8=-d; lft x7l=lft x8l=hround(4.75u-.5rule_thickness)-1-eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z7e--z8e; % right stem
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos3(rule_thickness,90); pos4(rule_thickness,90);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos5(rule_thickness,90); pos6(rule_thickness,90);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx3=x5=x1l; rt x4=rt x6=ceiling(w-.4u)+eps; y3r=y4r=y1; y5l=y6l=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z3e--z4e; % upper bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z5e--z6e; % lower bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(1,2,3,4,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known rr_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Right semantic bracket ]]";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(rr_bracket,7.25u#,body_height#,paren_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=h; bot y2=-d; rt x1r=rt x2r=hround(w-2.5u+.5rule_thickness)+1+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z1e--z2e; % left stem
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos7(rule_thickness,0); pos8(rule_thickness,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y7=h; bot y8=-d; rt x7r=rt x8r=hround(w-4.75u+.5rule_thickness)+1+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z7e--z8e; % right stem
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos3(rule_thickness,90); pos4(rule_thickness,90);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos5(rule_thickness,90); pos6(rule_thickness,90);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx3=x5=x1l; lft x4=lft x6=ceiling(.4u)-eps; y3r=y4r=y1; y5l=y6l=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z3e--z4e; % upper bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z5e--z6e; % lower bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(1,2,3,4,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known ll_parenthesis:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Left relational image (|";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(ll_parenthesis,7u#,body_height#,paren_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannitalcorr body_height#*slant-.5u#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup fine.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos1(vair,0); pos2(.75[hair,stem],0); pos3(vair,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannrt x1r=rt x3r=hround(w-u); lft x2l=hround(x1-4u);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=h; y2=.5[y1,y3]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z1e{3(x2e-x1e),y2-y1}...z2e
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann ...{3(x3e-x2e),y3-y2}z3e; % arc
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos4(whatever,45); pos5(whatever,-45);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannrt x4r-lft x4l=rt x5r-lft x5l=rule_thickness;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz4r=z1r; z5r=z3r;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z4e--z5e;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(1,2,3,4,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known rr_parenthesis:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Right relational image |)";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(rr_parenthesis,7u#,body_height#,paren_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannitalcorr math_axis#*slant-.5u#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup fine.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos1(vair,0); pos2(.75[hair,stem],0); pos3(vair,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1l=lft x3l=hround u; rt x2r=hround(x1+4u);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=h; y2=.5[y1,y3]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z1e{3(x2e-x1e),y2-y1}...z2e
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann ...{3(x3e-x2e),y3-y2}z3e; % arc
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos4(whatever,-45); pos5(whatever,45);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannrt x4r-lft x4l=rt x5r-lft x5l=rule_thickness;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz4l=z1l; z5l=z3l;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z4e--z5e;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(1,2,3,4,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known bin_ampersand:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Binary operator ampersand (for linear logic)";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginarithchar(bin_ampersand); pickup rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannrt x1=hround(w-u)+eps; y1=.5[y2,y5]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx2=.25[x3,x1]; y5-y2=x1-x3;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x3=hround u-eps; y3=.45[y2,y1];
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx5=.5[x3,x1]; x6=x1; y6=y2+o;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz4=whatever[z2,z5]; z4=z6+whatever*dir 140;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1..z2{left}..z3{up}..z4..tension .85..z5{left}..tension .75..z4---z6;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannendchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known bin_dnasrepma:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Binary operator dnasrepma (for linear logic)";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginarithchar(bin_dnasrepma); pickup rule.nib; autorounded;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannrt x1=hround(w-u)+eps; y1=.5[y2,y5]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx2=.25[x3,x1]; y5-y2=x1-x3;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x3=hround u-eps; y3=.45[y2,y1];
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx5=.5[x3,x1]; x6=x1; y6=y2+o;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz4=whatever[z2,z5]; z4=z6+whatever*dir 140;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1..z2{left}..z3{up}..z4..tension .85..z5{left}..tension .75..z4---z6;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncurrentpicture:= currentpicture scaled -1 shifted (w,h-d);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannendchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known triangle_left_eq_slant:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Triangular less than or (slanted) equal sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannspread#':=spread#; spread':=spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(5/4x_height#,3/2x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(triangle_left_eq_slant,14u#,
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann v_center(spread#'+spread#+rule_thickness#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannitalcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x2=hround 1.5u-eps; x1=x3=w-x2; y1-y3=spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny2=.5[y1,y3]; y3-y8=y2-y9=spread'; top y1=h;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx2=x9; x1=x8;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z2--z3--cycle; % diagonals
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z8--z9; % equal sign
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(1,2,3,8,9); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known triangle_right_eq_slant:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Triangular greater than or (slanted) equal sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannspread#':=spread#; spread':=spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(5/4x_height#,3/2x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(triangle_right_eq_slant,14u#,
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann v_center(spread#'+spread#+rule_thickness#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannitalcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannrt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx2=x9; x1=x8;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny2=.5[y1,y3]; y3-y8=y2-y9=spread'; top y1=h;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z2--z3--cycle; % diagonals
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z8--z9;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(1,2,3,8,9); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known n_triangle_left_eq_slant:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Not triangular less than or (slanted) equal sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannspread#':=spread#; spread':=spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(5/4x_height#,3/2x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(n_triangle_left_eq_slant,14u#,
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann v_center(spread#'+spread#+rule_thickness#+6u#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannitalcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x2=hround 1.5u-eps; x1=x3=w-x2; y1-y3=spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny2=.5[y1,y3]; y3-y8=y2-y9=spread'; top y1=h-3u;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx2=x9; x1=x8;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z2--z3--cycle; % diagonals
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z8--z9; % equal sign
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannchar_center(c); x.t=w-3u; y.t=y1+3u;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannchar_negate(c,t,b);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(1,2,3,8,9); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known n_triangle_right_eq_slant:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Not triangular greater than or (slanted) equal sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannspread#':=spread#; spread':=spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(5/4x_height#,3/2x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(n_triangle_right_eq_slant,14u#,
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann v_center(spread#'+spread#+rule_thickness#+6u#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannitalcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannrt x2=hround(w-1.5u)+eps; x1=x3=w-x2; y1-y3=spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx2=x9; x1=x8;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny2=.5[y1,y3]; y3-y8=y2-y9=spread'; top y1=h-3u;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z2--z3--cycle; % diagonals
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z8--z9;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannchar_center(c); x.t=w-3u; y.t=y1+3u;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannchar_negate(c,t,b);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(1,2,3,8,9); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known ll_floor:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Left merge or left double-floor";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(ll_floor,10u#,body_height#,paren_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx1=x2; top y1=h; .5[y1,y2]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x3; rt x5=rt x6=w; y5=y3=y1; y6=y4=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx3-x1=x5-x3=hround spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z2; draw z3--z4; % stems
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z2--z6; % horizontal
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known rr_floor:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Right merge or right double-floor";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(rr_floor,10u#,body_height#,paren_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx5=x6; top y1=h; .5[y1,y2]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x3; lft x1=lft x2=0; y5=y3=y1; y6=y4=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx3-x1=x5-x3=hround spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z3--z4; draw z5--z6; % stems
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z2--z6; % horizontal
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known ll_ceil:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Left double-ceiling";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(ll_ceil,10u#,body_height#,paren_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx1=x2; bot y1=-d; .5[y1,y2]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x3; rt x5=rt x6=w; y5=y3=y1; y6=y4=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx3-x1=x5-x3=hround spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z2; draw z3--z4; % stems
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z2--z6; % horizontal
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known rr_ceil:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Right double-ceiling";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(rr_ceil,10u#,body_height#,paren_depth#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx5=x6; bot y1=-d; .5[y1,y2]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x3; lft x1=lft x2=0; y5=y3=y1; y6=y4=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx3-x1=x5-x3=hround spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z3--z4; draw z5--z6; % stems
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z2--z6; % horizontal
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known arrow_not:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Negated nonexistant arrow";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(arrow_not,18u#,v_center(spread#+rule_thickness#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup crisp.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny3=.24asc_height+eps+math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannchar_center(100); top y101=top y3; x101=x100+2u;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannchar_negate(100,101,102);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannzero_width; endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known Arrow_not:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Negated nonexistant double arrow";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(Arrow_not,18u#,v_center(spread#+rule_thickness#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1-y2=spread; .5[y1,y2]=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny3=.24asc_height+eps+y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannchar_center(100); top y101=top y3; x101=x100+1.5u; char_negate(100,101,102);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannzero_width; endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known Maps_to_char:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Maps-To relation";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(Maps_to_char,14u#,v_center(spread#+rule_thickness#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann% this character should be followed immediately by equals or Rightarrow
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u; x6=x2=x1+.5u; x3=x4=x5=x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann.5[y1,y5]=.5[y2,y6]=math_axis; y5-y3=y4-y1=.24asc_height+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1-y5=y2-y6=spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z3--z4; % stem
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z2; % top bar stub
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z5--z6; % bottom bar stub
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6); zero_width; endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known maps_from_char:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Maps-from relation";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(maps_from_char,14u#,v_center(spread#+rule_thickness#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann% this character should be preceded immediately by minus or leftarrow
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u; x2=x1+.5u; x3=x4=x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1=y2=math_axis; y1-y3=y4-y1=.24asc_height+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z3--z4; % stem
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z2; % bar stub
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannzero_width;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncurrentpicture:= currentpicture xscaled -1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannendchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known Maps_from_char:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Maps-From relation";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncompute_spread(.45x_height#,.55x_height#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(Maps_from_char,14u#,v_center(spread#+rule_thickness#));
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann% this character should be preceded immediately by equals or Rightarrow
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u; x6=x2=x1+.5u; x3=x4=x5=x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann.5[y1,y5]=.5[y2,y6]=math_axis; y5-y3=y4-y1=.24asc_height+eps;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1-y5=y2-y6=spread;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z3--z4; % stem
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z2; % top bar stub
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z5--z6; % bottom bar stub
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannzero_width;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncurrentpicture:= currentpicture xscaled -1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannendchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known left_right_arrow_triangle:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Left-right arrow with triangular heads";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(left_right_arrow_triangle,18u#,4u#+math_axis#,4u#-math_axis#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz1=z2 + whatever*(dir -150); y4=y1=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u-eps; x4=x3=x2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y2=h-u; bot y3=-d+u;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz5=z6 + whatever*(dir 150); y8=y5=math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannrt x5=hround(w-u)+eps; x8=x7=x6;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y6=h-u; bot y7=-d+u;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z2--z3--cycle; % left head
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z5--z6--z7--cycle; % right head
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z4--z8; % stem
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known left_arrow_triangle:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Left arrow with triangular head";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(left_arrow_triangle,18u#,4u#+math_axis#,4u#-math_axis#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannrt x1=w-u; y1 = math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz2=z3 + whatever*(dir -150); y5=y2=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x2=u; x5=x4=x3;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y3=h-u; bot y4=-d+u;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z5; draw z2--z3--z4--cycle;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known right_arrow_triangle:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Right arrow with triangular head";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(right_arrow_triangle,18u#,4u#+math_axis#,4u#-math_axis#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup rule.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=u; y1 = math_axis;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannz2=z3 + whatever*(dir 150); y5=y2=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannrt x2=w-u; x5=x4=x3;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y3=h-u; bot y4=-d+u;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z5; draw z2--z3--z4--cycle;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_triangle_down:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\textstyle triangular join";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_triangle_down,15u#,0,10/6dh#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled stem;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u-eps; x3=w-x3; x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=eps; bot y3=-d; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z3--z5--cycle; % diagonals
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,3,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_triangle_up:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\textstyle triangular meet";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_triangle_up,15u#,0,10/6dh#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled stem;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u-eps; x3=w-x3; x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y3=0; bot y1=-d-eps; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z3--z5--cycle; % diagonals
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,3,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_curly_vee:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\textstyle big curly vee";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_curly_vee,15u#,0,10/6dh#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled stem;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u-eps; x3=w-x3; x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=eps; bot y3=-d; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1{dir -30}..{down}z3{up}..{dir 30}z5; % diagonals
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,3,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_curly_wedge:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\textstyle big curly wedge";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_curly_wedge,15u#,0,10/6dh#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled stem;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u-eps; x3=w-x3; x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y3=0; bot y1=-d-eps; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1{dir 30}..{up}z3{down}..{dir -30}z5; % diagonals
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,3,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_sq_cap:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\textstyle square set intersection sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_sq_cap,15u#,0,10/6dh#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled stem;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u; x2=x1; x4=x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=eps; bot y2=-d; y4=y2; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z2---z1---z5---z4; % stems and bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,4,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_box:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\textstyle box sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_box,15u#,0,10/6dh#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled stem;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u; x2=x1; x4=x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=eps; bot y2=-d; y4=y2; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z2---z4---z5---cycle; % stems and bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,4,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_parallel:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\textstyle big parallelism sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_parallel,8u#,0,10/6dh#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled stem;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u; x2=x1; x4=x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=eps; bot y2=-d; y4=y2; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z2; % left line
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z4---z5; % right line
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,4,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_interleave:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\textstyle big interleaving sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_interleave,9u#,0,10/6dh#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(u#,u#); pickup pencircle scaled stem;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround 0; x2=x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=eps; bot y2=-d;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x5=x1+2hround(.5w);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny4=y1;y5=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx6=x7=x1+hround(.5w);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny6=y1;y7=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z2; % left line
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z4---z5; % right line
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z6---z7; % middle line
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,4,5,6,7); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_triangle_down:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\displaystyle triangular join";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_triangle_down+8,20u#,0,14/6dh#); padded 1/6dh#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled curve;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u-eps; x3=w-x3; x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=eps; bot y3=-d; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z3--z5--cycle; % diagonals
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,3,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_triangle_up:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\displaystyle triangular meet";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_triangle_up+8,20u#,0,14/6dh#); padded 1/6dh#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled curve;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u-eps; x3=w-x3; x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y3=0; bot y1=-d-eps; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1--z3--z5--cycle; % diagonals
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,3,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_curly_vee:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\displaystyle big curly vee";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_curly_vee+8,20u#,0,14/6dh#); padded 1/6dh#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled curve;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u-eps; x3=w-x3; x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=eps; bot y3=-d; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1{dir -30}..{down}z3{up}..{dir 30}z5; % diagonals
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,3,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_curly_wedge:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\displaystyle big curly wedge";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_curly_wedge+8,20u#,0,14/6dh#); padded 1/6dh#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled curve;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u-eps; x3=w-x3; x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y3=0; bot y1=-d-eps; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1{dir 30}..{up}z3{down}..{dir -30}z5; % diagonals
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,3,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_sq_cap:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\displaystyle square set union sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_sq_cap+8,20u#,0,14/6dh#); padded 1/6dh#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled curve;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u; x2=x1; x4=x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=eps; bot y2=-d; y4=y2; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z2---z1---z5---z4; % stems and bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,4,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_box:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\displaystyle box sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_box+8,20u#,0,14/6dh#); padded 1/6dh#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled curve;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u; x2=x1; x4=x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=eps; bot y2=-d; y4=y2; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z2---z4---z5---cycle; % stems and bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,4,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_parallel:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\displaystyle big parallelism sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_parallel+8,10u#,0,14/6dh#); padded 1/6dh#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled curve;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u; x2=x1; x4=x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=eps; bot y2=-d; y4=y2; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z2; % left line
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z4---z5; % right line
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,4,5); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_interleave:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\displaystyle big interleaving sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_interleave+8,13u#,0,14/6dh#); padded 1/6dh#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(u#,u#); pickup pencircle scaled curve;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround 0; x2=x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=eps; bot y2=-d;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx4=x5=x1+2hround(.5w);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny4=y1;y5=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx6=x7=x1+hround(.5w);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny6=y1;y7=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z2; % left line
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z4---z5; % right line
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z6---z7; % middle line
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,4,5,6,7); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_n_plus:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\textstyle multiset intersection sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_n_plus,15u#,0,10/6dh#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled stem;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u; x2=x1; x3=w-x3; x4=x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y3=0; bot y1=-d-eps; y2=y4=2/3[y1,y3]; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z2...z3...z4---z5; % stems and cap
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny8=y9=.47[y1,y3]; x8=w-x9=x1+2stem+eps; x6=x7=x3;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann.5[y6,y7]=y8; y7-y6=x9-x8; draw z8--z9; draw z6--z7; % enclosed `$+$'
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8,9); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_ll_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\big left semantic bracket";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_ll_bracket,8u#,rule_thickness#,2dh#-rule_thickness#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(1.5u#,0); left_semantic_bracket(rule_thickness,true,true); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_ll_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\Big left semantic bracket";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_ll_bracket+1,8.5u#,rule_thickness#,3dh#-rule_thickness#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(2u#,0); left_semantic_bracket(.25[rule_thickness,stem],true,true); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_ll_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\bigg left semantic bracket";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_ll_bracket+2,9u#,rule_thickness#,4dh#-rule_thickness#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(2.5u#,0); left_semantic_bracket(.5[rule_thickness,stem],true,true); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_ll_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\Bigg left semantic bracket";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_ll_bracket+3,9.5u#,rule_thickness#,5dh#-rule_thickness#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(3u#,0); left_semantic_bracket(.75[rule_thickness,stem],true,true); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_ll_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Extensible left semantic bracket---top";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_ll_bracket+4,10u#,rule_thickness#,3dh#-rule_thickness#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(4u#,0); pickup crisp.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos1(stem,0); pos2(stem,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=h-1; y2=-d-eps; lft x1l=lft x2l=hround(2.5u-.5stem);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z1e--z2e; % stem1
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos3(stem,90); pos4(stem,90);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx3=x1l; rt x4=hround(w-.75u+.5stem); y3r=y4r=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z3e--z4e; % upper bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos7(stem,0); pos8(stem,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny7=y1; y8=y2; x7=x8=0.5(x1+x4);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z7e--z8e; % stem2
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(1,2,3,4,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_ll_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Extensible left semantic bracket---bottom";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_ll_bracket+5,10u#,rule_thickness#,3dh#-rule_thickness#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(4u#,0); pickup crisp.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos1(stem,0); pos2(stem,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1=h+eps; bot y2=1-d; lft x1l=lft x2l=hround(2.5u-.5stem);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z1e--z2e; % stem1
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos5(stem,90); pos6(stem,90);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx5=x1l; rt x6=hround(w-.75u+.5stem); y5l=y6l=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z5e--z6e; % lower bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos7(stem,0); pos8(stem,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny7=y1; y8=y2; x7=x8=0.5(x1+x6);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z7e--z8e; % stem2
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(1,2,5,6); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_ll_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Extensible left semantic bracket---extension module";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_ll_bracket+6,10u#,0,dh#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(4u#,0); pickup crisp.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos1(stem,0); pos2(stem,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1=h+1+eps; bot y2=-d-1-eps; lft x1l=lft x2l=hround(2.5u-.5stem);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z1e--z2e; % stem1
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannrt x6=hround(w-.75u+.5stem);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos7(stem,0); pos8(stem,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny7=y1; y8=y2; x7=x8=0.5(x1+x6);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z7e--z8e; % stem2
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(1,2,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_n_plus:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\displaystyle multiset intersection sign";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_n_plus+8,20u#,0,14/6dh#); padded 1/6dh#;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,0); pickup pencircle scaled curve;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x1=hround u; x2=x1; x3=w-x3; x4=x5=w-x1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y3=0; bot y1=-d-eps; y2=y4=2/3[y1,y3]; y5=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndraw z1---z2...z3...z4---z5; % stems and cap
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny8=y9=.47[y1,y3]; x8=w-x9=x1+2curve+eps; x6=x7=x3;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann.5[y6,y7]=y8; y7-y6=x9-x8; draw z8--z9; draw z6--z7; % enclosed `$+$'
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlabels(1,2,3,4,5,6,7,8,9); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_rr_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\big right semantic bracket";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_rr_bracket,8u#,rule_thickness#,2dh#-rule_thickness#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,1.5u#); right_semantic_bracket(rule_thickness,true,true); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_rr_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\Big right semantic bracket";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_rr_bracket+1,8.5u#,rule_thickness#,3dh#-rule_thickness#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,2u#); right_semantic_bracket(.25[rule_thickness,stem],true,true); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_rr_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\bigg right semantic bracket";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_rr_bracket+2,9u#,rule_thickness#,4dh#-rule_thickness#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,2.5u#); right_semantic_bracket(.5[rule_thickness,stem],true,true); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_rr_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "\Bigg right semantic bracket";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_rr_bracket+3,9.5u#,rule_thickness#,5dh#-rule_thickness#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,3u#); right_semantic_bracket(.75[rule_thickness,stem],true,true); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_rr_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Extensible right semantic bracket---top";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_rr_bracket+4,10u#,rule_thickness#,3dh#-rule_thickness#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,4u#); pickup crisp.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos1(stem,0); pos2(stem,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanntop y1=h-1; y2=-d-eps; rt x1r=rt x2r=hround(w-2.5u+.5stem);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z1e--z2e; % stem1
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos3(stem,90); pos4(stem,90);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx3=x1r; lft x4=hround(.75u-.5stem); y3r=y4r=y1;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z3e--z4e; % upper bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos7(stem,0); pos8(stem,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny7=y1; y8=y2; x7=x8=0.5(x1+x4);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z7e--z8e; % stem2
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(1,2,3,4,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_rr_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Extensible right semantic bracket---bottom";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_rr_bracket+5,10u#,rule_thickness#,3dh#-rule_thickness#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,4u#); pickup crisp.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos1(stem,0); pos2(stem,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1=h+eps; bot y2=1-d; rt x1r=rt x2r=hround(w-2.5u+.5stem);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z1e--z2e; % stem1
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos5(stem,90); pos6(stem,90);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannx5=x1r; lft x6=hround(.75u-.5stem); y5l=y6l=y2;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z5e--z6e; % lower bar
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos7(stem,0); pos8(stem,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny7=y1; y8=y2; x7=x8=0.5(x1+x6);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z7e--z8e; % stem2
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(1,2,5,6,7,8); endchar;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanniff known big_rr_bracket:
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanncmchar "Extensible right semantic bracket---extension module";
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannbeginchar(big_rr_bracket+6,10u#,0,dh#);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannadjust_fit(0,4u#); pickup crisp.nib;
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos1(stem,0); pos2(stem,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny1=h+1+eps; bot y2=-d-1-eps; rt x1r=rt x2r=hround(w-2.5u+.5stem);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z1e--z2e; % stem1
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannlft x6=hround(.75u-.5stem);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpos7(stem,0); pos8(stem,0);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanny7=y1; y8=y2; x7=x8=0.5(x1+x6);
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannfilldraw stroke z7e--z8e; % stem2
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannpenlabels(1,2,7,8); endchar;