home *** CD-ROM | disk | FTP | other *** search
- font_identifier:="LASY";
- font_coding_scheme:="LaTeX symbols";
-
- % Here we steal a bit from mathsy
-
- mode_setup; font_setup;
- autorounding:=0;
-
- font_slant slant; font_x_height x_height#;
- font_quad 18u# if not monospace:+4letter_fit# fi;
- slant:=mono_charic#:=0; % the remaining characters will not be slanted
- currenttransform:=identity yscaled aspect_ratio scaled granularity;
-
- cmchar "Leftward arrowhead";
- compute_spread(.45x_height#,.55x_height#);
- beginchar(oct"050",6u#,v_center(spread#+rule_thickness#));
- adjust_fit(0,0); pickup crisp.nib;
- pos3(bar,0); pos4(bar,0);
- y0=math_axis; lft x0=hround u;
- y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps;
- pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
- z9=.381966[.5[z3,z4],z0];
- numeric t[]; path p[];
- (t1,t2)=(z4r{z9-z4}..z6r) intersectiontimes (z3r{z9-z3}..z5r);
- z10=(z4r{z9-z4}..z6r) intersectionpoint (z3r{z9-z3}..z5r);
- filldraw z0..{z4-z9}z4l--subpath (0,t1) of (z4r{z9-z4}..z6r)
- --z10--subpath (t2,0) of (z3r{z9-z3}..z5r)--z3l{z9-z3}..z0 & cycle;
- % arrowhead
- penlabels(0,3,4,5,6,9,10); endchar;
-
- % This character is an alteration of the leftward arrow
- % The tip of the arrowhead rests one unit from left edge, same as left arrow
- % Changes:
- % 1) deletion of the stem ... points z1,z2 etc
- % The rest of the numbers stay the same, for any referencing
- % 2) new intersectinpoint z10 is introduced and path slightly altered
- % 3) name, code number and width changed, otherwise essentially the same
-
-
-
- cmchar "Rightward arrowhead";
- compute_spread(.45x_height#,.55x_height#);
- beginchar(oct"051",6u#,v_center(spread#+rule_thickness#));
- adjust_fit(0,0); pickup crisp.nib;
- pos3(bar,0); pos4(bar,0);
- y0=math_axis; rt x0=hround(w-u);
- y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps;
- pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
- z9=.381966[.5[z3,z4],z0];
- numeric t[]; path p[];
- (t1,t2)=(z4l{z9-z4}..z6r) intersectiontimes (z3l{z9-z3}..z5r);
- z10=(z4l{z9-z4}..z6r) intersectionpoint (z3l{z9-z3}..z5r);
- filldraw z0..{z4-z9}z4r--subpath (0,t1) of (z4l{z9-z4}..z6r)
- --z10--subpath (t2,0) of (z3l{z9-z3}..z5r)--z3r{z9-z3}..z0 & cycle;
- % arrowhead
- penlabels(0,3,4,5,6,9,10); endchar;
-
- % This character is an alteration of the rightward arrow
- % The tip of the arrowhead rests one unit from right edge, same as right arrow
- % Changes:
- % 1) deletion of the stem ... points z1,z2 etc
- % The rest of the numbers stay the same, for any referencing
- % 2) new intersectinpoint z10 is introduced and path slightly altered
- % 3) name, code number and width changed, otherwise essentially the same
-
-
-
- cmchar "Upward arrowhead";
- beginchar(oct"052",9u#,asc_height#,asc_depth#);
- italcorr .76asc_height#*slant+.5crisp#-u#;
- adjust_fit(0,0); pickup crisp.nib;
- pos3(bar,90); pos4(bar,90);
- top z0=(.5w,0); x0-x3=x4-x0=3u+eps;
- y3=y4=y0-.24asc_height-eps;
- pos5(bar,angle(z4-z0)); z5l=z0;
- pos6(bar,angle(z3-z0)); z6l=z0;
- z9=.381966[.5[z3,z4],z0];
- numeric t[]; path p[];
- (t1,t2)=(z4l{z9-z4}..z6r) intersectiontimes (z3l{z9-z3}..z5r);
- z10=(z4l{z9-z4}..z6r) intersectionpoint (z3l{z9-z3}..z5r);
- filldraw z0..{z4-z9}z4r--subpath (0,t1) of (z4l{z9-z4}..z6r)
- --z10--subpath (t2,0) of (z3l{z9-z3}..z5r)--z3r{z9-z3}..z0 & cycle;
- % arrowhead
- penlabels(0,3,4,5,6,9,10); endchar;
-
- % This character is an alteration of the upward arrow
- % The tip of the arrowhead rests on the baseline for reference
- % Changes:
- % 1) deletion of the stem ... points z1,z2 etc
- % The rest of the numbers stay the same, for any referencing
- % 2) point z0 is moved down from the ascender line; the tip touches
- % the baseline
- % 3) new intersectinpoint z10 is introduced and path slightly altered
- % 4) name and code number changed, otherwise essentially the same
-
-
-
- cmchar "Downward arrowhead";
- beginchar(oct"053",9u#,asc_height#,asc_depth#);
- adjust_fit(0,0); pickup crisp.nib;
- pos3(bar,90); pos4(bar,90);
- bot z0=(.5w,0); x0-x3=x4-x0=3u+eps;
- y3=y4=y0+.24asc_height+eps;
- pos5(bar,angle(z4-z0)); z5l=z0;
- pos6(bar,angle(z3-z0)); z6l=z0;
- z9=.381966[.5[z3,z4],z0]; % z9 iintroduces curve to arrowhead
- numeric t[]; path p[]; % rather direction{z9-z4} does this
- (t1,t2)=(z4r{z9-z4}..z6r) intersectiontimes (z3r{z9-z3}..z5r);
- z10=(z4r{z9-z4}..z6r) intersectionpoint (z3r{z9-z3}..z5r);
- filldraw z0..{z4-z9}z4l--subpath (0,t1) of (z4r{z9-z4}..z6r)
- --z10--subpath (t2,0) of (z3r{z9-z3}..z5r)--z3l{z9-z3}..z0 & cycle;
- % arrowhead
- penlabels(0,3,4,5,6,9,10); endchar;
-
- % This character is an alteration of the downward arrow
- % The tip of the arrowhead rests on the baseline for reference
- % Changes:
- % 1) deletion of the stem ... points z1,z2 etc
- % The rest of the numbers stay the same, for any referencing
- % 2) point z0 is moved up from the descender line to rest on the baseline
- % 3) new intersectinpoint z10 is introduced and path slightly altered
- % 4) name and code number changed, otherwise essentially the same
-
-
-
- cmchar "Square subset sign";
- compute_spread(5/4x_height#,3/2x_height#); % the spread of `$=$'
- beginchar(oct"074",14u#,v_center(spread#+rule_thickness#));
- adjust_fit(0,0); pickup rule.nib;
- lft x2=hround(1.5u+oo); x1=x4=hround(w-1.5u)+eps; x3=x2;
- y1-y4=spread; y2=y1; y3=y4; y1=math_axis+.5spread;
- draw z1--z2--z3--z4; % bars and stem
- labels(1,2,3,4); endchar;
-
- % This character is an alteration of the square subset or equal to sign
- % Changes:
- % 1) changed position of y1 to be .5 of the spread above the math_axis
- % 2) got rid of lower bar (points z8/z9,etc) and the extra spread#' amount
- % which was used in calculations for the lower bar
- % 3) name and code number and height changed, otherwise essentially the same
-
-
-
- cmchar "Square superset sign";
- compute_spread(5/4x_height#,3/2x_height#); % the spread of `$=$'
- beginchar(oct"075",14u#,v_center(spread#+rule_thickness#));
- adjust_fit(0,0); pickup rule.nib;
- x1=x4=hround 1.5u-eps; rt x2=hround(w-1.5u-oo); x3=x2;
- y1-y4=spread; y2=y1; y3=y4; y1=math_axis+.5spread;
- draw z1--z2--z3--z4; % bars and stem
- labels(1,2,3,4); endchar;
-
- % This character is an alteration of the square superset or equal to sign
- % Changes:
- % 1) changed position of y1 to be .5 of the spread above the math_axis
- % 2) got rid of lower bar (points z8/z9,etc) and the extra spread#' amount
- % which was used in calculations for the lower bar
- % 3) name and code number and height changed, otherwise essentially the same
-
-
-
- cmchar "Diamond";
- beginchar(oct"063",2(.85asc_height#-math_axis#)+2u#,v_center(7u#));
- italcorr math_axis#*slant;
- adjust_fit(0,0); pickup rule.nib;
- numeric a; a=.85asc_height-math_axis;
- x4=x8=good.x .5w; w:=r:=2x4; rt x2=w-lft x6=good.x(x4+a);
- y2=y6=.5[y4,y8]=.5cap_height; top y8=good.y(y2+a);
- draw z2--z4--z6--z8--cycle;
- labels(2,4,6,8); endchar;
-
- % This character is an alteration of the diamond operator
- % The four tips are equidistant from the center point (.5w,math_axis),
- % this distance being half of the cap height
- % and related to that in the square character
- % slightly less though, since it looks too big if the actually have same
- % length
- % Changes:
- % 1) To the amount a, which gives the distance of the tips from the center
- % 2) The width is related to the asc_height, so it changes with it
- % 3) name and code number and width changed, otherwise essentially the same
- % The numbers stay the same, for any referencing
-
-
-
- cmchar "Square";
- beginchar(oct"062",2.1math_axis#+4u#,v_center(7u#));
- italcorr math_axis#*slant;
- adjust_fit(0,0); pickup rule.nib;
- numeric a; a=round(2.1math_axis);
- x1=x4=good.x 2u; x2=x3=x1+a;
- y3=y4=.5(cap_height-a); y1=y2=y3+a;
- draw z1--z2--z3--z4--cycle;
- labels(1,2,3,4); endchar;
-
- % The size of this character is related to the diamond character, it's
- % sightly larger.
- % It is NOT the diamond character which has been rotated
- % Vertical alignment raised to .5 cap height from math-axis height
- % 2 units of sidebearing space on each side, since vertical lines usually
- % need a little more space, actually it's 2 units-.5rule.nib
-
-
-
- cmchar "Bowtie operator";
- beginchar(oct"061",13u#,v_center(7u#));
- italcorr math_axis#*slant;
- adjust_fit(0,0); pickup rule.nib;
- numeric a; a=round(1.1*math_axis);
- x1=x4=good.x 1.5u; x2=x3=w-x1;
- y1=y2=good.y(.5(cap_height-2a)); y3=y4=y1+2a;
- draw z1--z3--z2--z4--cycle;
- labels(1,2,3,4); endchar;
-
- % Arbitrary width given
- % Length of the bars at the edges are 2.2*math_axis length
- % and it's vertically aligned on the high, i.e., .5 cap height as opposed
- % to being aligned on the math axis
-
-
-
- cmchar "Upside-down Uppercase Greek Omega";
- beginchar(oct"060",13u#,cap_height#,0);
- italcorr cap_height#*slant-.35u#; %italcorr .75cap_height#*slant-.5u#;
- adjust_fit(0,0);
- pickup tiny.nib; pos1(vair,-90); pos2(cap_curve,0);
- pos3(vair,0); pos4(cap_curve,180); pos5(vair,180);
- x1=.5w; bot y1r=0-o; lft x4r=hround u; y2=y4=1/3h; x2=w-x4;
- rt x5l=hround(1/3(w+.5u)+.5hair); top y3=top y5=h; x3=w-x5;
- filldraw stroke z3e{down}...{down}z2e
- & pulled_super_arc.e(2,1)(.5superpull)
- & pulled_super_arc.e(1,4)(.5superpull)
- & z4e{up}...{up}z5e; % bowl
- numeric arm_thickness; path p; p=z3{down}...{down}z2;
- arm_thickness=Vround(if hefty:slab+2stem_corr else:.75[slab,cap_vstem] fi);
- pickup crisp.nib; pos6(arm_thickness,90); pos7(fudged.hair,0);
- top y6r=h; x6=x3; rt x7r=hround (w-.8u); y7=good.y(y6l-.5beak)+eps;
- (x,y)=p intersectionpoint((0,y6l)--(w+h,y6l)); x6l:=x;
- arm(6,7,a,.5beak_darkness,1.2beak_jut); % right arm and beak
- pos8(arm_thickness,90); pos9(fudged.hair,180);
- y8=y6; y9=y7; x8+x6=x9+x7=w; x8l:=w-x6l;
- arm(8,9,b,.5beak_darkness,-1.2beak_jut); % left arm and beak
- math_fit(0,.5ic#); penlabels(1,2,3,4,5,6,7,8,9); endchar;
-
- % This character is taken from the Upper Case Omega of cmr
- % Directions and reference points are reversed and flipped
- % pos angles are flipped by 180 degrees
- % vertical values are reversed, up/down directions in the
- % filldraw stroke are reversed
- % left strokes same, but changes reference points
- % italic correction based on furthest pont of character , so made it
- % full cap_height minus amount for the beak, taken from the cap XI
- % I suppose a transformation of paths would have worked also, but this
- % way, limits are maintained better, i think
- % w+h instead of just w in intersection to make sure paths do intersect
-
-
-
- cmchar "Leads to character extension";
- compute_spread(.45x_height#,.55x_height#);
- beginchar(oct"072",12u#,v_center(spread#+rule_thickness#));
- adjust_fit(0,0); pickup rule.nib;
- numeric a; a=round(.45math_axis);
- y11=y13=y15=math_axis; y12-a=y14+a=good.y math_axis;
- x11=0; x15=w; x13=.5[x11,x15]; x12=.5[x11,x13]; x14=.5[x13,x15];
- path p; p=z12{right}...z13...z14{right};
- draw z11{dir(-angle direction 1 of p)}...z12{right}...z13...
- z14{right}...z15{dir(-angle direction 1 of p)};
- penlabels(11,12,13,14,15); endchar;
-
- % This character is an extension to fit with the Leads to character with
- % arrowhead
- % This character goes from edge to edge and a series of these can be linked
- % as desired.
- % It has 2/3 the width of that character, and if this relation is kept, the
- % the curves should all match
-
-
-
- cmchar "Leads to character with arrowhead";
- compute_spread(.45x_height#,.55x_height#);
- beginchar(oct"073",18u#,v_center(spread#+rule_thickness#));
- adjust_fit(0,0); pickup crisp.nib;
- pos3(bar,0); pos4(bar,0);
- y0=math_axis; rt x0=hround(w-u);
- y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps;
- pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
- z9=.381966[.5[z3,z4],z0];
- numeric t[]; path p[];
- (t1,t2)=(z4l{z9-z4}..z6r) intersectiontimes (z3l{z9-z3}..z5r);
- z10=(z4l{z9-z4}..z6r) intersectionpoint (z3l{z9-z3}..z5r);
- filldraw z0..{z4-z9}z4r--subpath (0,t1) of (z4l{z9-z4}..z6r)
- --z10--subpath (t2,0) of (z3l{z9-z3}..z5r)--z3r{z9-z3}..z0 & cycle;
- % arrowhead
- pickup rule.nib;
- numeric a; a=round(.45math_axis);
- y11=y13=y15=y16=y0; y12-a=y14+a=good.y math_axis;
- x11=0; x15=2/3w; z17=lft z10;
- x13=.5[x11,x15]; x12=.5[x11,x13]; x14=.5[x13,x15]; x16=.3[x15,x0];
- path p; p=z12{right}...z13...z14{right};
- draw z11{dir(-angle direction 1 of p)}...
- z12{right}...z13...z14{right}...z16{right}...z17;
- penlabels(0,3,4,5,6,9,10,11,12,13,14,15,16); endchar;
-
- % This character uses the rightward arrow arrowhead
- % The width is the same as that of the regular arrow
- % An extension character can be added for longer squiggles
-
-
- cmchar "LASY \lhd triangle";
- compute_spread(5/4x_height#,3/2x_height#);
- beginchar(oct"001",14u#,v_center(spread#+rule_thickness#));
- italcorr h#*slant-u#;
- adjust_fit(0,0); pickup rule.nib;
- lft x2=hround 1.5u-eps; x1=x3=w-x2;
- y1-y3=spread; y2=.5[y1,y3]=math_axis;
- draw z1--z2--z3--cycle; % triangle
- labels(1,2,3); endchar;
-
- % taken directly from CMR "less than" character
- % the path was closed to make a triangle
-
-
-
- cmchar "LASY \unlhd triangle";
- compute_spread(.45x_height#,.55x_height#);
- spread#':=spread#; spread':=spread; % the spread of `$=$'
- compute_spread(5/4x_height#,3/2x_height#);
- beginchar(oct"002",14u#,v_center(spread#'+spread#+rule_thickness#));
- italcorr h#*slant-u#;
- adjust_fit(0,0); pickup rule.nib;
- lft x2=hround 1.5u-eps; x1=x3=w-x2;
- y1-y3=spread; y2=.5[y1,y3]; top y1=h;
- draw z1--z2--z3--cycle; % triangle
- x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % bar
- labels(1,2,3,8,9); endchar;
-
- % taken directly from CMR "less than or equal to sign"
- % the "less than" path was closed to make a triangle
-
-
-
- cmchar "LASY \rhd triangle";
- compute_spread(5/4x_height#,3/2x_height#);
- beginchar(oct"003",14u#,v_center(spread#+rule_thickness#));
- italcorr math_axis#*slant-u#;
- adjust_fit(0,0); pickup rule.nib;
- rt x2=hround(w-1.5u)+eps; x1=x3=w-x2;
- y1-y3=spread; y2=.5[y1,y3]=math_axis;
- draw z1--z2--z3--cycle; % triangle
- labels(1,2,3); endchar;
-
- % taken directly from CMR "greater than" character
- % the path was closed to make a triangle
-
-
-
- cmchar "LASY \unrhd triangle";
- compute_spread(.45x_height#,.55x_height#);
- spread#':=spread#; spread':=spread; % the spread of `$=$'
- compute_spread(5/4x_height#,3/2x_height#);
- beginchar(oct"004",14u#,v_center(spread#'+spread#+rule_thickness#));
- italcorr h#*slant-u#;
- adjust_fit(0,0); pickup rule.nib;
- lft x1=hround 1.5u-eps; x2=w-x1; x3=x1;
- y1-y3=spread; y2=.5[y1,y3]; top y1=h;
- draw z1--z2--z3--cycle; % triangle
- x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % bar
- labels(1,2,3,8,9); endchar;
-
- % taken directly from CMR "greater than or equal to sign"
- % the "greater than" path was closed to make a triangle
-
-
- bye.
-