Category : EmTeX is a TeX/LaTeX document editor
Archive   : MF2.ZIP
Filename : LASY.MF

 
Output of file : LASY.MF contained in archive : MF2.ZIP
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.


  3 Responses to “Category : EmTeX is a TeX/LaTeX document editor
Archive   : MF2.ZIP
Filename : LASY.MF

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/