summaryrefslogtreecommitdiff
path: root/fonts/cmll/mf/llcommon.mf
diff options
context:
space:
mode:
Diffstat (limited to 'fonts/cmll/mf/llcommon.mf')
-rw-r--r--fonts/cmll/mf/llcommon.mf227
1 files changed, 227 insertions, 0 deletions
diff --git a/fonts/cmll/mf/llcommon.mf b/fonts/cmll/mf/llcommon.mf
new file mode 100644
index 0000000000..2272e2f05f
--- /dev/null
+++ b/fonts/cmll/mf/llcommon.mf
@@ -0,0 +1,227 @@
+% Common symbols for CMLL and EULL.
+
+% The code for arrows is the one from the downward and upward arrows
+% (characters '041 and '042 in cmsy, defined in sym.mf)
+% with some coordinates moved.
+
+cmchar "Short downward arrow (positive shift)";
+beginchar(1,9u#,body_height#,0);
+adjust_fit(0,0); pickup crisp.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1l=hround(.5w-.5rule_thickness); y1+.5rule_thickness=h;
+x0=x1=x2; bot y0=-d-o; x0-x3=x4-x0=if monospace:3u else:4u fi+eps;
+y3=y4=y0+if monospace:.24 else:.36 fi asc_height+eps;
+pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+pos6(rule_thickness,angle(z3-z0)); z6l=z0;
+z9=.2[.5[z3,z4],z0];
+numeric t; path p; p=z4r{z9-z4}..z6r;
+t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p;
+filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
+ ---z1r..z1l---subpath (t,0) of\\(z3r{z9-z3}..z5r)
+ --z3l{z9-z3}..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,5,6,9); endchar;
+
+cmchar "Short upward arrow (negative shift)";
+beginchar(2,9u#,body_height#,0);
+italcorr .76asc_height#*slant+.5crisp#-u#;
+adjust_fit(0,0); pickup crisp.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1l=hround(.5w-.5rule_thickness); y1-.5rule_thickness=-d;
+x0=x1=x2; top y0=h+o; x0-x3=x4-x0=if monospace:3u else:4u fi+eps;
+y3=y4=y0-if monospace:.24 else:.36 fi asc_height-eps;
+pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+pos6(rule_thickness,angle(z3-z0)); z6l=z0;
+z9=.2[.5[z3,z4],z0];
+numeric t; path p; p=z4l{z9-z4}..z6r;
+t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p;
+filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
+ ---z1r..z1l---subpath (t,0) of\\(z3l{z9-z3}..z5r)
+ --z3r{z9-z3}..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,5,6,9); endchar;
+
+cmchar "Short up-and-down arrow";
+beginchar(3,9u#,body_height#,0);
+adjust_fit(0,0); pickup crisp.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1l=hround(.5w-.5rule_thickness); y1=.5[-d,h];
+x0=x1=x2; bot y0=-d-o; x0-x3=x4-x0=4u+eps;
+y3=y4=y0+.36asc_height+eps;
+pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+pos6(rule_thickness,angle(z3-z0)); z6l=z0;
+z9=.2[.5[z3,z4],z0];
+numeric t; path p; p=z4r{z9-z4}..z6r;
+t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p;
+filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
+ ---z1r..z1l---subpath (t,0) of\\(z3r{z9-z3}..z5r)
+ --z3l{z9-z3}..z0 & cycle; % lower arrowhead and stem
+pos11(rule_thickness,0); pos12(rule_thickness,0); z11=z1;
+pos13(rule_thickness,90); pos14(rule_thickness,90);
+x10=x11=x12; top y10=h+o; x10-x13=x14-x10=4u+eps;
+y13=y14=y10-.36asc_height-eps;
+pos15(rule_thickness,angle(z14-z10)); z15l=z10;
+pos16(rule_thickness,angle(z13-z10)); z16l=z10;
+z19=.2[.5[z13,z14],z10];
+numeric t; path p; p=z14l{z19-z14}..z16r;
+t=xpart(p intersectiontimes((x12r,-d)--(x12r,h))); y12=ypart point t of p;
+filldraw z10..{z14-z19}z14r--subpath (0,t) of\\(z14l{z19-z14}..z16r)
+ ---z11r..z11l---subpath (t,0) of\\(z13l{z19-z13}..z15r)
+ --z13r{z19-z13}..z10 & cycle; % upper arrowhead and stem
+penlabels(0,1,2,3,4,5,6,9,10,11,12,13,14,15,16,19); endchar;
+
+
+% The code for coherence relations is based on the \asymp symbol (named
+% "Hardy's asymptotic equivalence sign" number '020 in symbols.mf).
+
+cmchar "Coherence sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(4,14u#,v_center(2spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib; autorounded;
+lft x1=hround u-eps; x3=x1; x2=x4=w-x1; x5=x6=.5w;
+y1=y2; y5=good.y h; y3=y4; .5[y1,y3]=.5[y5,y6]=math_axis;
+y1=good.y .3[y5,y6];
+draw z1{x5-x1,2(y5-y1)}...z5{right}...z2{x2-x5,2(y2-y5)}; % upper bar
+draw z3{x6-x3,2(y6-y3)}...z6{right}...z4{x4-x6,2(y4-y6)}; % lower bar
+labels(1,2,3,4,5,6); endchar;
+
+cmchar "Strict coherence";
+beginchar(5,14u#,asc_height#,desc_depth#);
+adjust_fit(0,0); pickup rule.nib;
+lft x1=hround u; y1=vround(math_axis-.25x_height);
+x3=w-x1; y3=y1;
+penpos2(rule_thickness,90); x2=.5w; y2=good.y(.25x_height+math_axis);
+numeric theta; theta=angle((z2-z1)yscaled 3);
+penpos1(rule_thickness,90+theta);
+penpos3(rule_thickness,90-theta);
+draw z1{dir theta}...z2...{dir-theta}z3; penlabels(1,2,3);
+endchar;
+
+cmchar "Incoherence sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(6,14u#,v_center(2spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib; autorounded;
+lft x1=hround u-eps; x3=x1; x2=x4=w-x1; x5=x6=.5w;
+y1=y2=good.y h; y3=y4; .5[y1,y3]=.5[y5,y6]=math_axis;
+y5=good.y .3[y1,y3];
+draw z1{x5-x1,2(y5-y1)}...z5{right}...z2{x2-x5,2(y2-y5)}; % upper bar
+draw z3{x6-x3,2(y6-y3)}...z6{right}...z4{x4-x6,2(y4-y6)}; % lower bar
+labels(1,2,3,4,5,6); endchar;
+
+cmchar "Strict incoherence";
+beginchar(7,14u#,asc_height#,desc_depth#);
+adjust_fit(0,0); pickup rule.nib;
+lft x1=hround u; y1=vround(math_axis+.25x_height);
+x3=w-x1; y3=y1; penpos2(rule_thickness,90); x2=.5w;
+y2l=good.y -(.25x_height-math_axis);
+numeric theta; theta=angle((z2-z1)yscaled 3);
+penpos1(rule_thickness,90+theta);
+penpos3(rule_thickness,90-theta);
+draw z1{dir theta}...z2...{dir-theta}z3;
+penlabels(1,2,3); endchar;
+
+cmchar "Linear equivalence symbol";
+beginchar(12,22u#,.8asc_height#,0#);
+adjust_fit(0,0); pickup rule.nib; autorounded;
+numeric circ_diam; circ_diam=5u;
+y2=math_axis; y8=y2+.5circ_diam; rt x2=w-u;
+x6=x2-circ_diam;
+circle_points; draw_circle;
+x11=u+.5rule_thickness; y11=y2;
+draw_circle shifted (z11-z6);
+x9=x11+circ_diam+.5rule_thickness; y9=y10=y2; x10=x6-.5rule_thickness;
+draw z9---z10;
+penlabels(1,2,3,4,5,6,7,8,9,10); endchar;
+
+cmchar "Double-struck perpendicular sign";
+beginchar(13,17u#,asc_height#,0);
+adjust_fit(0,0); pickup rule.nib;
+compute_spread(.45x_height#,.55x_height#); x3-x1=x4-x2=good.x spread;
+x1=x2=good.x (.5w - spread/2);
+center_on(.5[x1,x3]); lft x5=hround u; x6=w-x5; y3=y1;
+bot y1=0; y2-y1=x6-x5-3u;
+if top y2>h: y2:=bot h; fi
+y5=y6=y1; y4=y2;
+draw z1--z2; % left stem
+draw z3--z4; % right stem
+draw z5--z6; % bar
+labels(1,2,3,4,5,6); endchar;
+
+cmchar "Oscillating perpendicular sign";
+compute_spread(.45x_height#,.55x_height#);
+spread#':=spread#; spread':=spread; % the spread of `$=$'
+compute_spread(.54x_height#,.66x_height#);
+beginchar(14,14u#,asc_height#,0);
+adjust_fit(0,0);
+pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness;
+if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
+lft x3=hround u; x4=4u; x5=w-x4; x6=w-x3;
+y3=y5; y4=y6; bot y3=0; top y4-bot y3=spread';
+draw z3{up}...z4{right}..{right}z5...{up}z6; % upper stroke
+pickup rule.nib; autorounded;
+x1=x2; z2=1/2[z3,z6]; y1-y2=x6-x3;
+if top y1>h: y1:=bot h; fi
+draw z1..z2;
+labels(1,2,3,4,5,6); endchar;
+
+cmchar "Reversed linear map symbol";
+beginchar(15,20u#,.8asc_height#,0#);
+adjust_fit(0,0); pickup rule.nib; autorounded;
+numeric circ_diam; circ_diam=5u;
+y2=math_axis; y8=y2+.5circ_diam; lft x6 = u;
+x6=x2-circ_diam;
+circle_points; draw_circle;
+x9=x2+.5rule_thickness; y9=y10=y2; x10=w-u-.5rule_thickness;
+draw z9---z10;
+penlabels(1,2,3,4,5,6,7,8,9,10); endchar;
+
+def negate (expr center) =
+ .5[z101,z102] = center;
+ y102-y101 = 9u;
+ x102-x101 = 2/5 (y102-y101);
+ draw z101---z102;
+ penlabels(101,102);
+enddef;
+
+
+cmchar "Negated multimap symbol";
+beginchar(16,20u#,.8asc_height#,0#);
+adjust_fit(0,0); pickup rule.nib; autorounded;
+numeric circ_diam; circ_diam=5u;
+y2=math_axis; y8=y2+.5circ_diam; rt x2=w-u;
+x6=x2-circ_diam;
+circle_points; draw_circle;
+x9=u+.5rule_thickness; y9=y10=y2; x10=x6-.5rule_thickness;
+draw z9---z10;
+penlabels(1,2,3,4,5,6,7,8,9,10);
+negate(.6[z9,z10]);
+endchar;
+
+cmchar "Negated reversed linear map symbol";
+beginchar(17,20u#,.8asc_height#,0#);
+adjust_fit(0,0); pickup rule.nib; autorounded;
+numeric circ_diam; circ_diam=5u;
+y2=math_axis; y8=y2+.5circ_diam; lft x6 = u;
+x6=x2-circ_diam;
+circle_points; draw_circle;
+x9=x2+.5rule_thickness; y9=y10=y2; x10=w-u-.5rule_thickness;
+draw z9---z10;
+penlabels(1,2,3,4,5,6,7,8,9,10);
+negate(.4[z9,z10]);
+endchar;
+
+cmchar "Negated linear equivalence symbol";
+beginchar(18,22u#,.8asc_height#,0#);
+adjust_fit(0,0); pickup rule.nib; autorounded;
+numeric circ_diam; circ_diam=5u;
+y2=math_axis; y8=y2+.5circ_diam; rt x2=w-u;
+x6=x2-circ_diam;
+circle_points; draw_circle;
+x11=u+.5rule_thickness; y11=y2;
+draw_circle shifted (z11-z6);
+x9=x11+circ_diam+.5rule_thickness; y9=y10=y2; x10=x6-.5rule_thickness;
+draw z9---z10;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13);
+negate(.5[z9,z10]);
+endchar;