summaryrefslogtreecommitdiff
path: root/fonts/sansmathfonts/source/sans-romms.mf
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/sansmathfonts/source/sans-romms.mf
Initial commit
Diffstat (limited to 'fonts/sansmathfonts/source/sans-romms.mf')
-rw-r--r--fonts/sansmathfonts/source/sans-romms.mf290
1 files changed, 290 insertions, 0 deletions
diff --git a/fonts/sansmathfonts/source/sans-romms.mf b/fonts/sansmathfonts/source/sans-romms.mf
new file mode 100644
index 0000000000..8b72039da8
--- /dev/null
+++ b/fonts/sansmathfonts/source/sans-romms.mf
@@ -0,0 +1,290 @@
+% Based on the Computer Modern source file romms.mf by D E Knuth.
+
+% Edited by Ariel Barton to produce better sans serif symbols
+
+% Date: 2013/03/22
+
+% This file contains special characters of ``math italic'' fonts
+% that actually are not supposed to be slanted.
+% Codes \0050--\0057, \0072--\0077, and \0133--\0137 are generated.
+
+% The italic corrections are zero in all of these characters.
+
+cmchar "Leftward top half arrow";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(oct"050",18u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup crisp.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u;
+y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0+4u+eps;
+pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+pos6(rule_thickness,angle(z3-z0)); z6l=z0;
+numeric t; path p; p=z4r..{2(x0-x4),y0-y4}z6r;
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+filldraw z0--(x0,y2l)--z1l{right}..{left}z1r
+ --subpath (t,0) of\\(z3r..{2(x0-x3),y0-y3}z5r)
+ --z3l..{2(x0-x3),y0-y3}cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,5,6); endchar;
+
+cmchar "Leftward bottom half arrow";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(oct"051",18u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup crisp.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u;
+y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0+4u+eps;
+pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+pos6(rule_thickness,angle(z3-z0)); z6l=z0;
+numeric t; path p; p=z4r..{2(x0-x4),y0-y4}z6r;
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+filldraw z0{2(x4-x0),y4-y0}..z4l
+ --subpath (0,t) of\\(z4r..{2(x0-x4),y0-y4}z6r)
+ --z1l{right}..{left}z1r--(x0,y2r)--cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,5,6); endchar;
+
+cmchar "Rightward top half arrow";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(oct"052",18u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup crisp.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u);
+y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0-4u-eps;
+pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+pos6(rule_thickness,angle(z3-z0)); z6l=z0;
+numeric t; path p; p=z4l..{2(x0-x4),y0-y4}z6r;
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+filldraw z0--(x0,y2l)--z1l{left}..{right}z1r
+ --subpath (t,0) of\\(z3l..{2(x0-x3),y0-y3}z5r)
+ --z3r..{2(x0-x3),y0-y3}cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,5,6); endchar;
+
+cmchar "Rightward bottom half arrow";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(oct"053",18u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup crisp.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u);
+y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0-4u-eps;
+pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+pos6(rule_thickness,angle(z3-z0)); z6l=z0;
+numeric t; path p; p=z4l..{2(x0-x4),y0-y4}z6r;
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+filldraw z0{2(x4-x0),y4-y0}..z4r
+ --subpath (0,t) of\\(z4l..{2(x0-x4),y0-y4}z6r)
+ --z1l{left}..{right}z1r--(x0,y2r)--cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,5,6); endchar;
+
+cmchar "Left hook";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(oct"054",5u#,v_center(2spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib; autorounded;
+lft x2=hround u-eps; x1=x3=w-x2;
+y1-y3=spread; y2=.5[y1,y3]; y3=math_axis;
+draw z1{left}...z2{down}...z3{right}; % hook
+labels(1,2,3); endchar;
+
+cmchar "Right hook";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(oct"055",5u#,v_center(2spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib; autorounded;
+rt x2=hround(w-u)+eps; x1=x3=w-x2;
+y1-y3=spread; y2=.5[y1,y3]; y3=math_axis;
+draw z1{right}...z2{down}...z3{left}; % hook
+labels(1,2,3); endchar;
+
+cmchar "Triangle pointing right";
+beginchar(oct"056",9u#,v_center(x_height#));
+adjust_fit(0,0); pickup rule.nib;
+numeric a,b; a=sqrt(3.14159\\ /sqrt3); % triangle area $=$ circle area
+b=.5w-(rt hround u); .5[x1',x2']=.5w; x2'-x1'=a*b*sqrt3;
+x1=x3=good.x x1'; x2=good.x x2';
+y2=.5[y1,y3]=math_axis; y1=good.y(y2+a*b);
+draw z1--z2--z3--cycle; % triangle
+labels(1,2,3); endchar;
+
+cmchar "Triangle pointing left";
+beginchar(oct"057",9u#,v_center(x_height#));
+adjust_fit(0,0); pickup rule.nib;
+numeric a,b; a=sqrt(3.14159\\ /sqrt3); % triangle area $=$ circle area
+b=.5w-(rt hround u); .5[x1',x2']=.5w; x1'-x2'=a*b*sqrt3;
+x1=x3=good.x x1'; x2=good.x x2';
+y2=.5[y1,y3]=math_axis; y1=good.y(y2+a*b);
+draw z1--z2--z3--cycle; % triangle
+labels(1,2,3); endchar;
+
+cmchar "Period";
+numeric dot_diam#; dot_diam#=if monospace: 5/4 fi\\ dot_size#;
+define_whole_blacker_pixels(dot_diam);
+beginchar(oct"072",5u#,dot_diam#,0); % non-ASCII position
+adjust_fit(0,0); pickup fine.nib;
+pos1(dot_diam,0); pos2(dot_diam,90);
+lft x1l=hround(.5w-.5dot_diam); bot y2l=0; z1=z2; dot(1,2); % dot
+penlabels(1,2); endchar;
+
+cmchar "Comma";
+numeric dot_diam#; dot_diam#=if monospace: 5/4 fi\\ dot_size#;
+define_whole_blacker_pixels(dot_diam);
+beginchar(oct"073",5u#,dot_diam#,comma_depth#); % non-ASCII position
+adjust_fit(0,0);
+x1-.5dot_diam=hround(.5w-.5dot_diam); y1-.5dot_diam=0;
+comma(1,a,dot_diam,.2u,comma_depth); % dot and tail
+penlabels(1); endchar;
+
+cmchar "Less than sign";
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar("<",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; % diagonals
+labels(1,2,3); endchar;
+
+cmchar "Virgule (slash)";
+beginchar(oct"075",9u#,body_height#,paren_depth#); % non-ASCII position
+italcorr body_height#*slant-.5u#;
+adjust_fit(0,0); pickup rule.nib;
+rt x1=hround(w-u)+eps; top y1=h+eps;
+lft x2=hround u-eps; bot y2=-d-eps;
+draw z1--z2; % diagonal
+penlabels(1,2); endchar;
+
+cmchar "Greater than sign";
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(">",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; % diagonals
+labels(1,2,3); endchar;
+
+% We adjust this to have flattened points
+cmchar "Five-pointed star";
+beginchar(oct"077",9u#,v_center(x_height#));
+adjust_fit(0,0); pickup tiny.nib;
+numeric theta; theta=360/5; % degrees between points
+if not hefty: % Knuth's version comes first
+ pos0(curve,0); pos1(rule_thickness,90); x0=x1=good.x .5w;
+ top y1r=vround(math_axis+.5x_height+.5rule_thickness);
+ ypart(.5[z1,z0+(z1-z2) rotated 2theta])=math_axis;
+ pos2(curve,theta); pos3(rule_thickness,90+theta);
+ z2=z0; z3-z0=(z1-z0) rotated theta;
+ z4=whatever[z0l,z1r]=whatever[z2r,z3r];
+ filldraw for n=0 upto 4:
+ z0+(z1r-z0)rotated(n*theta)--z0+(z4-z0)rotated(n*theta)--endfor
+ cycle; % star
+ penlabels(0,1,2,3,4);
+else:
+ % Sans serif (hefty) version
+ numeric star_tip; star_tip = rule_thickness/3;
+ % Points and center of the star
+ x0 = 0.5w;
+ z1 = z0 + whatever*dir (90+theta);
+ for k=2,3,4,5: z[k] = z0 + (z1-z0) rotated ((k-1)*theta); endfor
+ for k=1 upto 5:
+ if star_tip > tiny: pos[k](star_tip, k*theta);
+ else: z[k]l=z[k]r=z[k];
+ fi
+ endfor
+ % Width and vertical position
+ lft x1l = 0; 0.5[bot y2l, top y5] = math_axis;
+ % Base of the points
+ z6 = z0 + whatever * dir (90-theta/2);
+ x6 = x0 + w/12;
+ z7 = z6 + (tiny/3)*dir angle(z0-z6);
+ % Draw the star
+ if z4l = z4:
+ filldraw for n=0 upto 4:
+ (z4--z7) rotatedaround(z0,n*theta)--endfor cycle;
+ else:
+ filldraw for n=0 upto 4:
+ (z4l--z6--z5r) rotatedaround(z0,n*theta)--endfor cycle;
+ fi
+ penlabels(0,1,2,3,4,5,6,7);
+fi
+endchar;
+
+cmchar "Musical flat sign";
+beginchar(oct"133",7u#,body_height#,0);
+adjust_fit(0,0); pickup crisp.nib;
+numeric light_hair; light_hair=if hefty: vair else: hair fi;
+pos1(light_hair,0); pos2(light_hair,180); pos3(light_hair,0); x1=x2=x3;
+pos4(.25[light_hair,curve],60); pos5(curve,0);
+lft x1l=hround u; x4=.5w; rt x5r=hround(w-u);
+top y1=h; bot y3=-o; top y4=x_height+o;
+y2=y4-.2x_height; y5=3/4x_height;
+filldraw stroke z1e--z3e; % stem
+filldraw stroke z2e{up}...z4e{right}...z5e{down}
+ ...{2(x3-x5e),y3-y5e}z3e; % bowl
+penlabels(1,2,3,4,5); endchar;
+
+cmchar "Musical natural sign";
+beginchar(oct"134",7u#,asc_height#,desc_depth#);
+adjust_fit(0,0); pickup crisp.nib;
+numeric light_hair; light_hair=if hefty: vair else: hair fi;
+pos1(light_hair,0); pos2(curve,90); pos3(curve,90);
+pos4(curve,90); pos5(curve,90); pos6(light_hair,0);
+rt x1r=hround 15/8u; x2=x4=x1l; x3=x5=x6r=w-x2;
+y1=h+o; top y2r=0; .5[y2,y3]=0; y4-y2=y5-y3=x_height; bot y6=-d-o;
+x2'=x1r; z2'=whatever[z2r,z3r]; x5'=x6l; z5'=whatever[z4l,z5l];
+(x1r,y)=z1l+whatever*(z5-z4); y6l:=y6l-(y-y1r); y1r:=y;
+filldraw z1l--z2l--z3l--z3r--z2'--z1r--cycle; % left stem and lower bar
+filldraw z6r--z5r--z4r--z4l--z5'--z6l--cycle; % right stem and upper bar
+penlabels(1,2,3,4,5,6); endchar;
+
+cmchar "Musical sharp sign";
+beginchar(oct"135",7u#,asc_height#,desc_depth#);
+adjust_fit(0,0); pickup crisp.nib;
+numeric light_hair; light_hair=if hefty: vair else: hair fi;
+pos1(curve,90); pos2(curve,90); pos3(curve,90); pos4(curve,90);
+lft x1=lft x3=hround u; x2=x4=w-x1;
+top y3r=0; .5[y3,y4]=0; y1-y3=y2-y4=x_height;
+filldraw stroke z1e--z2e; filldraw stroke z3e--z4e; % bars
+numeric theta,hstem; theta=angle(z2-z1);
+(hstem-crisp)*cosd theta=light_hair-crisp;
+pos5(hstem,theta); pos6(hstem,theta); pos7(hstem,theta); pos8(hstem,theta);
+lft x5l=lft x6l=hround(2u-.5light_hair); x7=x8=w-x6;
+top y7l=h+o; bot y6r=-d-o; z7-z5=z8-z6=(whatever,0) rotated theta;
+filldraw stroke z5e--z6e; filldraw stroke z7e--z8e; % stems
+penlabels(1,2,3,4,5,6,7,8); endchar;
+
+% Slurs edited to use light_hair at the ends
+% and to have cutoff rather than rounded ends
+cmchar "Slur below (smile)";
+beginchar(oct"136",18u#,v_center(.5x_height#));
+adjust_fit(0,0); pickup fine.nib;
+numeric light_stem; light_stem=Vround .5[vair,stem];
+numeric light_hair; light_hair=if hefty: vair else: hair fi;
+x1-.5light_hair=hround u; y1+.5light_hair=vround(h+.5light_hair);
+x3=w-x1; y3=y1;
+pos2(light_stem,90); x2=.5w; y2l=good.y -d;
+numeric theta; theta=angle((z2-z1)yscaled 3);
+pos1(light_hair,90+theta); pos3(light_hair,90-theta);
+filldraw z1l{dir theta}...z2l...{dir-theta}z3l
+ if serifs: .. else: -- fi
+ z3r{-dir-theta}...z2r...{-dir theta}z1r
+ if serifs: .. else: -- fi
+ cycle; % arc
+penlabels(1,2,3); endchar;
+
+cmchar "Slur above (frown)";
+beginchar(oct"137",18u#,v_center(.5x_height#));
+adjust_fit(0,0); pickup fine.nib;
+numeric light_stem; light_stem=Vround .5[vair,stem];
+numeric light_hair; light_hair=if hefty: vair else: hair fi;
+x1-.5light_hair=hround u; y1-.5light_hair=vround(-d-.5light_hair);
+x3=w-x1; y3=y1;
+pos2(light_stem,90); x2=.5w; y2=good.y h;
+numeric theta; theta=angle((z2-z1)yscaled 3);
+pos1(light_hair,90+theta); pos3(light_hair,90-theta);
+filldraw z1l{dir theta}...z2l...{dir-theta}z3l
+ if serifs: .. else: -- fi
+ z3r{-dir-theta}...z2r...{-dir theta}z1r
+ if serifs: .. else: -- fi
+ cycle; % arc
+penlabels(1,2,3); endchar;