summaryrefslogtreecommitdiff
path: root/fonts/cm/mf_optimized_kerning
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/cm/mf_optimized_kerning
Initial commit
Diffstat (limited to 'fonts/cm/mf_optimized_kerning')
-rw-r--r--fonts/cm/mf_optimized_kerning/changed_roman.mf258
-rw-r--r--fonts/cm/mf_optimized_kerning/changed_romlig.mf182
-rw-r--r--fonts/cm/mf_optimized_kerning/readme24
3 files changed, 464 insertions, 0 deletions
diff --git a/fonts/cm/mf_optimized_kerning/changed_roman.mf b/fonts/cm/mf_optimized_kerning/changed_roman.mf
new file mode 100644
index 0000000000..3343942238
--- /dev/null
+++ b/fonts/cm/mf_optimized_kerning/changed_roman.mf
@@ -0,0 +1,258 @@
+% This is ROMAN.MF in text format, as of May 13, 1986.
+% The Computer Modern Roman family of fonts (by D. E. Knuth, 1979--1985)
+% Kerning partially optimized by Markus Pilzecker, 94-04-05, Bensheim, Germany.
+
+if ligs>1: font_coding_scheme:="TeX text";
+ spanish_shriek=oct"074"; spanish_query=oct"076";
+else: font_coding_scheme:=if ligs=0: "TeX typewriter text"
+ else: "TeX text without f-ligatures" fi;
+ spanish_shriek=oct"016"; spanish_query=oct"017"; fi
+
+mode_setup; font_setup;
+
+input romanu; % upper case (majuscules)
+input romanl; % lower case (minuscules)
+input greeku; % upper case Greek letters
+input romand; % numerals
+input romanp; % ampersand, question marks, currency sign
+input romspl; % lowercase specials (dotless \i, ligature \ae, etc.)
+input romspu; % uppercase specials (\AE, \OE, \O)
+input punct; % punctuation symbols common to roman and italic text
+input accent; % accents common to roman and italic text
+if ligs>1: input romlig; fi % letter ligatures
+if ligs>0: input comlig; fi % ligatures common with italic text
+if ligs<=1: input romsub; fi % substitutes for ligatures
+
+ligtable "!": "`" =: spanish_shriek;
+ligtable "?": "`" =: spanish_query;
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+ k#:=-.5u#; kk#:=-1.5u#; kkk#:=-2u#; % three degrees of kerning
+ ligtable "a":
+ "b" kern -.5u#,
+ "h" kern -.25u#,
+ if serifs:
+ "v" kern k#,
+ "j" kern u#
+ else:
+ "r" kern k#
+ fi ,
+ "t" kern -.45u#,
+ "u" kern -.675u#
+ ;
+ if serifs:
+ ligtable "c":
+ "h" kern -.5u#,
+ "k" kern k#
+ ;
+ fi
+ ligtable "d":
+ "a" kern -.25u#,
+ "e" kern -.3u#,
+ "t" kern -.25u#,
+ "u" kern -.5u#
+ ;
+ ligtable "e":
+ "a" kern .2u#,
+ "b" kern -.3u#,
+ "d" kern .5u#,
+ "h" kern -.325u#,
+ "i" kern .5u#,
+ "r" kern .075u#,
+ "s" kern .5u#
+ ;
+ ligtable "h":
+ "a" kern -.5u#,
+ if serifs:
+ "b" kern k#,
+ fi
+ "d" kern -.5u#,
+ "e" kern -.5u#,
+ "o" kern -.425u#
+ if serifs: ,
+ "t" kern k#,
+ "u" kern -.75u#,
+ "v" kern k#,
+ "w" kern k#,
+ "y" kern k#
+ fi
+ ;
+ ligtable "i":
+ "c" kern -.1u#,
+ "s" kern .25u#,
+ "u" kern -.15u#
+ ;
+ ligtable "k": "e" kern k#,
+ "a" kern -.1u#,
+ "o" kern k#,
+ "d" kern k#
+ ;
+ ligtable "l":
+ "b" kern -.5u#,
+ "t" kern -.25u#
+ ;
+ ligtable "m":
+ "n":
+ if serifs:
+ "a" kern -.425u#,
+ "b" kern -.925u#,
+ "d" kern -.5u#,
+ "e" kern -.5u#,
+ "g" kern -.25u#,
+ "t" kern -.55u#,
+ "u" kern -.75u#,
+ "v" kern k#,
+ "w" kern k#,
+ "y" kern k#
+ fi
+ ;
+ ligtable "o":
+ "b":
+ "p": "c" kern -k#,
+ "d" kern -k#,
+ "e" kern .25u#,
+ "l" kern -.2u#,
+ "o" kern -k#,
+ "p" kern -.5u#,
+ "q" kern -k#,
+ if serifs:
+ "v" kern k#,
+ "w" kern -.5u#,
+ "j" kern u#,
+ else:
+ "r" kern k#,
+ fi
+ "s" kern .2u#,
+ "x" kern k#,
+ "y" kern k#
+ ;
+ ligtable "r":
+ "i" kern .3u#,
+ "k" kern -.225u#,
+ "n" kern .25u#,
+ "s" kern .05u#
+ ;
+ ligtable "s":
+ "c" kern -.075u#,
+ "e" kern .35u#,
+ "i" kern .25u#,
+ "s" kern .2u#,
+ "t" kern .05u#
+ ;
+ ligtable "t": "a" kern -.5u#,
+ "c" kern -.5u#,
+ "e" kern -.525u#,
+ "i" kern -.5u#,
+ "h" kern -.75u#,
+ "l" kern -.75u#,
+ "m" kern -.5u#,
+ "o" kern -.25u#,
+ "p" kern -.375u#,
+ "s" kern -.225u#,
+ "t" kern -.675u#,
+ "u" kern -.5u#,
+ "y" kern k#,
+ "w" kern k#
+ ;
+ ligtable "u":
+ "b" kern -.75u#,
+ "c" kern -.5u#,
+ "m" kern -.25u#,
+ "n" kern -.25u#,
+ "t" kern -.25u#,
+ "w" kern -.5u#
+ ;
+ ligtable
+ if serifs:
+ "v": "a" kern -u#,
+ fi
+ "w": "e" kern k#,
+ "a" kern k#,
+ "o" kern k#,
+ "d" kern k#
+ ;
+ ligtable "P": "A" kern kk#,
+ "y": "o" kern k#,
+ "e" kern k#,
+ "a" kern k#,
+ "." kern kk#,
+ "," kern kk#
+ ;
+ ligtable "A":
+ if serifs:
+ "R":
+ fi\\
+ "b" kern -u#,
+ "p" kern -u#,
+ "t" kern -.5u#,
+ "u" kern -u#,
+ "C" kern k#,
+ "O" kern k#,
+ "G" kern k#,
+ "U" kern k#,
+ "Q" kern k#,
+ "L": "T" kern kk#,
+ "Y" kern kk#,
+ "V" kern kkk#,
+ "W" kern kkk#
+ ;
+ ligtable "F":
+ "V":
+ "W":
+ if serifs: "o" kern kk#,
+ "e" kern kk#,
+ "u" kern kk#,
+ "r" kern kk#,
+ "a" kern kk#,
+ "A" kern kkk#
+ else: "o" kern k#,
+ "e" kern k#,
+ "u" kern k#,
+ "r" kern k#,
+ "a" kern k#,
+ "A" kern kk#
+ fi ,
+ "X": "O" kern k#,
+ "C" kern k#,
+ "G" kern k#,
+ "Q" kern k#
+ ;
+ ligtable "K":
+ "e" kern -.5u#,
+ "u" kern -.5u#,
+ "O" kern k#,
+ "C" kern k#,
+ "G" kern k#,
+ "Q" kern k#
+ ;
+ ligtable "M":
+ "e" kern -.25u#
+ ;
+ ligtable "T": "y" kern
+ if serifs: k#
+ else: kk#
+ fi,
+ "Y": "e" kern kk#,
+ "o" kern kk#,
+ "r" kern kk#,
+ "a" kern kk#,
+ "A" kern kk#,
+ "u" kern kk#;
+ ligtable "O":
+ "D": "X" kern k#,
+ "W" kern k#,
+ "A" kern k#,
+ "V" kern k#,
+ "Y" kern k#
+ ;
+ ligtable "g": "j" kern -k#; % logjam
+ ligtable "I": "I" kern -k#; fi % Richard III
+ % there are ligature/kern programs for |"f"| in the {\tt romlig} file
+ % and for |"-"|, |"`"|, and |"'"| in the {\tt comlig} file
+bye.
diff --git a/fonts/cm/mf_optimized_kerning/changed_romlig.mf b/fonts/cm/mf_optimized_kerning/changed_romlig.mf
new file mode 100644
index 0000000000..4085ec36af
--- /dev/null
+++ b/fonts/cm/mf_optimized_kerning/changed_romlig.mf
@@ -0,0 +1,182 @@
+% This is ROMLIG.MF in text format, as of May 13, 1986.
+% This file describes five roman ligatures that begin with `f'
+% and puts them in code positions \0013--\0017.
+% Kerning partially optimized by Markus Pilzecker, 94-04-05, Bensheim, Germany
+
+numeric itc#; % modified italic correction on `f' and `ff'
+itc#=if serifs: max(0,flare#-.25u#) else: 1.25u# fi;
+
+ligtable "f":
+ "a" kern .25u#,
+ "i"=:oct"014",
+ "f"=:oct"013",
+ "l"=:oct"015",
+ "r" kern .3u#,
+ "'" kern itc#,
+ "?" kern itc#,
+ "!" kern itc#,
+ ")" kern itc#,
+ "]" kern itc#
+ ;
+ligtable oct"013":
+ "i"=:oct"016",
+ "l"=:oct"017",
+ "'" kern itc#,
+ "?" kern itc#,
+ "!" kern itc#,
+ ")" kern itc#,
+ "]" kern itc#
+ ;
+
+cmchar "The ligature ff";
+beginchar(oct"013",10.5u#+2letter_fit#,asc_height#,0);
+italcorr asc_height#*slant+if serifs:flare#-.25u# else: 1.25u# fi;
+adjust_fit(0,0);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); rt x11r=hround(w-3u+.5stem');
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround .8[stem,flare];
+ pos2(bulb_diam,0); pos12(bulb_diam,0);
+ rt x2r=hround(rt x11r-stem_corr); lft x12l=hround(w-.75u+.5);
+ y2+.5bulb_diam=.85[x_height,h+oo]; y12+.5bulb_diam=.9[x_height,h+oo];
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 6.25u;
+ pos12(5/7[vair,flare],90); y12=y2; rt x12=hround(w+.75u); fi
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+f_stroke(11,12,d,e,f,inner_jut,1.25jut); % right stem, arc, terminal, serif
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround .5u-1;
+pos3(bar,90); pos4(bar,90);
+rt x4=hround(w-1/3u);
+if hefty: pos3'(bar,90); x3'-x1=x4-x11; y3'=y3;
+ pos4'(bar,90); x4'=x11; y4'=y4;
+ filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e; % bars
+else: filldraw stroke z3e--z4e; fi % bar
+penlabels(1,2,3,4,11,12); endchar;
+
+cmchar "The ligature fi";
+beginchar(oct"014",10u#+2letter_fit#,asc_height#,0);
+italcorr asc_height#*slant-serif_fit#+.5if serifs:stem# else:dot_size# fi-2u#;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); rt x11r=hround(w-2.5u+.5stem');
+pos12(stem',0); x11=x12; bot y12=0;
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround 1/4[.8[stem,flare],dot_size];
+ pos2(bulb_diam,0); x2r=x12r;
+ y2+.5bulb_diam=.8[x_height,h+oo]; top y11=x_height+min(oo,serif_drop);
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: bulb_diam=max(stem,dot_size);
+ pos2(6/7[vair,flare],90); top y2r=h; rt x2=hround 5.3u;
+ pickup tiny.nib; pos13(bulb_diam,0); pos14(bulb_diam,90);
+ x13=x11-.5; top y14r=min(2x_height,h+1); top y11=x_height;
+ if bot y14l-x_height<tiny: y14l:=min(y14r-eps,y11+2tiny); fi
+ x13=x14; y13=.5[y14l,y14r]; dot(13,14); % dot
+fi; % this is the ligature we're drawing
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+pickup tiny.nib; filldraw stroke z11e--z12e; % right stem
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround .5u-1;
+pos3(bar,90); pos4(bar,90);
+if serifs: x4=x11; % bar will overlap upper right serif
+ sloped_serif.l(11,12,d,1/3,jut,min(oo,serif_drop)); % upper right serif
+ dish_serif(12,11,e,1/3,inner_jut,f,1/3,jut); % lower right serif
+else: rt x4= hround 5.3u; fi
+pickup crisp.nib; filldraw stroke z3e--z4e; % bar
+penlabels(1,2,3,4,11,12,13,14); endchar;
+
+cmchar "The ligature fl";
+beginchar(oct"015",10u#+2letter_fit#,asc_height#,0);
+italcorr asc_height#*slant-serif_fit#+.5stem#-2u#;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); rt x11r=hround(w-2.5u+.5stem');
+pos12(stem',0); x11=x12; bot y12=0; top y11=h;
+filldraw stroke z11e--z12e; % right stem
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround .8[stem,flare];
+ pos2(bulb_diam,0); x2r=x11r-stem_corr;
+ y2+.5bulb_diam=.9[x_height,h+oo];
+ sloped_serif.l(11,12,d,1/3,eps,max(serif_drop,oo)); % erase excess at top
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.3u; fi
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround .5u-1;
+pos3(bar,90); pos4(bar,90);
+if serifs: x4=x11;
+ dish_serif(12,11,e,1/3,inner_jut,f,1/3,jut); % lower right serif
+else: rt x4= hround 5.3u; fi
+pickup crisp.nib; filldraw stroke z3e--z4e; % bar
+penlabels(1,2,3,4,11,12); endchar;
+
+cmchar "The ligature ffi";
+beginchar(oct"016",15u#+4letter_fit#,asc_height#,0);
+italcorr asc_height#*slant-serif_fit#+.5if serifs:stem# else:dot_size# fi-2u#;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); lft x11l=hround(.5w-.5stem');
+pos21(stem',0); rt x21r=hround(w-2.5u+.5stem');
+pos22(stem',0); x21=x22; bot y22=0;
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround 1/4[.8[stem,flare],dot_size];
+ pos2(bulb_diam,0); x2r=x11r-stem_corr;
+ pos12(bulb_diam,0); x12r=x21r;
+ top y21=x_height+min(oo,serif_drop);
+ y2+.5bulb_diam=.8[x_height,h+oo]; y12=y2;
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: bulb_diam=max(stem,dot_size);
+ pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.75u;
+ pos12(6/7[vair,flare],90); y12=y2; rt x12=hround(.5w+2.8u);
+ pickup tiny.nib; pos23(bulb_diam,0); pos24(bulb_diam,90);
+ x23=x21-.5; top y24r=min(2x_height,h+1); top y21=x_height;
+ if bot y24l-x_height<tiny: y24l:=min(y24r-eps,y21+2tiny); fi
+ x23=x24; y23=.5[y24l,y24r]; dot(23,24); fi % dot
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+f_stroke(11,12,d,e,f,inner_jut,inner_jut); % middle ditto
+pickup tiny.nib; filldraw stroke z21e--z22e; % right stem
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround.5u-1;
+pos3(bar,90); pos4(bar,90);
+if serifs: x4=x21; % bar will overlap upper right serif
+ sloped_serif.l(21,22,g,1/3,jut,min(oo,serif_drop)); % upper right serif
+ dish_serif(22,21,h,1/3,inner_jut,i,1/3,jut); % lower right serif
+else: rt x4=hround(.5w+2.8u); fi
+pickup crisp.nib;
+if hefty: pos3'(bar,90); x3'-x1=x4-x11; y3'=y3;
+ pos4'(bar,90); x4'=x11; y4'=y4;
+ filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e; % bars
+else: filldraw stroke z3e--z4e; fi % bar
+penlabels(1,2,3,4,11,12,21,22,23,24); endchar;
+
+cmchar "The ligature ffl";
+beginchar(oct"017",15u#+4letter_fit#,asc_height#,0);
+italcorr asc_height#*slant-serif_fit#+.5stem#-2u#;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); lft x11l=hround(.5w-.5stem');
+pos21(stem',0); rt x21r=hround(w-2.5u+.5stem');
+pos22(stem',0); x21=x22; bot y22=0; top y21=h;
+filldraw stroke z21e--z22e; % right stem
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround .8[stem,flare];
+ pos2(bulb_diam,0); x2r=x11r-stem_corr;
+ pos12(bulb_diam,0); x12r=x21r-stem_corr;
+ y2+.5bulb_diam=.85[x_height,h+oo]; y12+.5bulb_diam=.9[x_height,h+oo];
+ sloped_serif.l(21,22,g,1/3,eps,max(serif_drop,oo)); % erase excess at top
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.75u;
+ pos12(5/7[vair,flare],90); y12=y2; rt x12=hround(.5w+2.8u); fi
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+f_stroke(11,12,d,e,f,inner_jut,inner_jut); % middle ditto
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround.5u-1;
+pos3(bar,90); pos4(bar,90);
+if serifs: dish_serif(22,21,h,1/3,inner_jut,i,1/3,jut); % lower right serif
+ pickup crisp.nib; x4=x21;
+else: rt x4=hround(.5w+2.8u); fi
+if hefty: pos3'(bar,90); x3'-x1=x4-x11; y3'=y3;
+ pos4'(bar,90); x4'=x11; y4'=y4;
+ filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e; % bars
+else: filldraw stroke z3e--z4e; fi % bar
+penlabels(1,2,3,4,11,12,21,22); endchar;
diff --git a/fonts/cm/mf_optimized_kerning/readme b/fonts/cm/mf_optimized_kerning/readme
new file mode 100644
index 0000000000..51404da7a0
--- /dev/null
+++ b/fonts/cm/mf_optimized_kerning/readme
@@ -0,0 +1,24 @@
+The files are modified versions of the METAFONT source files
+with the corresponding name.
+Modifications concern optimized values for character kerning.
+They have been evaluated with high resolution (> 1000 dpi) fonts.
+For further modifications take care, not to try to correct rounding
+errors at - say - 300 dpi at this place.
+Emphasis has been put onto character pairs that are most
+frequent in the English and the German language.
+Fonts without serifs have been widely ignored.
+
+IMPORTANT NOTE from the CTAN maintainers:
+
+As these files are changed versions of Donald E. Knuth's original CM source
+files, we decided to change the names.
+
+Using these files to create fonts from the Computer Modern source files
+without changing the names of the created fonts is a violation of
+Donald Knuth's stipulation on the copyright page of Computers & Typesetting,
+Volume E and therefore strictly forbidden.
+
+With this changes, the fonts produce quite different results on different
+computer systems, and they will also cause TeX to typeset your old papers
+with different line breaks, page breaks, overfull boxes, etc.
+