1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
% THIS IS THE OFFICIAL COMPUTER MODERN SOURCE FILE italsp.mf BY D E KNUTH.
% IT MUST NOT BE MODIFIED IN ANY WAY UNLESS THE FILE NAME IS CHANGED!
% This file contains special letters and letter combinations,
% compatible with the alphabet `{\tt itall}'.
% Codes \0020--\0021 and \0031--\0034 are generated.
cmchar "Dotless italic letter i";
beginchar(oct"020",5u#,x_height#,0);
italcorr 1/3x_height#*slant+.5hair#+.5u#;
adjust_fit(if monospace:u#,u# else: 0,0 fi); pickup fine.nib;
x0=0; x5=w; x2=.5w+.25u; x3=.5w-.25u;
hook_in(0,1,2)(skewed); hook_out(3,4,5)(skewed); % hooks
filldraw stroke z2e--z3e; % stem
penlabels(0,1,2,3,4,5); endchar;
cmchar "Dotless italic letter j";
beginchar(oct"021",5.5u#,x_height#,desc_depth#);
italcorr x_height#*slant+.5stem#-2u#;
adjust_fit(if monospace:2u# else: 0 fi, 0); pickup fine.nib;
x0=0; x2=x3; pos3(stem,0); lft x3l=hround(w-2u-.5stem);
hook_in(0,1,2); % opening hook
pos4(vair,-90); pos5(hair,-180); pos6(flare,-180);
bot y3=-1/3d; bot y4r=-d-oo; y6-.5flare=-vround.9d;
x4=1/3(w-u); lft x5r=min(hround-.5u,lft x5r+x4-x5l-eps);
filldraw stroke z2e---z3e...{left}z4e; % stem and arc
bulb(4,5,6); % bulb
penlabels(0,1,2,3,4,5,6); endchar;
cmchar "Italic German letter es-zet (sharp s)";
beginchar(oct"031",4.5u#+max(1.5u#,stem#)+max(3.5u#,2flare#),
asc_height#,desc_depth#);
italcorr .9asc_height#*slant-u#;
adjust_fit(if monospace: u# else: 0 fi,0); pickup fine.nib;
z88=(.5w-2.75u,h); z89=(.5w-1.75u,-d);
numeric theta; theta=angle(z88-z89);
pos1(stem,0); pos2(vair,90); pos3(.5[hair,stem],180);
pos4(stem,theta+90); pos5(stem,theta-90); pos6(.5[hair,stem],0);
pos7(vair,-90); pos8(hair,-180); pos9(flare,-180);
rt x1r=hround(w-1.5u); lft x8r=hround-.25u; x2=.5[x1,x4]; x7=.5[x8,x5];
y9-.5flare=vround -.85d; bot y7r=-d-oo; y1=.5[x_height,h]; top y2r=h+oo;
y4=.25[x_height,h]; y5=.5[-d,y4];
z4=whatever[z88,z89]; z5=whatever[z88,z89];
x3=.8[x2+x4-x88,x88]; x6=.8[x7+x5-x89,x89]; y3=.8[y4,y2]; y6=.8[y5,y7];
bulb(7,8,9); % left bulb
filldraw stroke z1e{up}...z2e{left}...z3e...{z89-z88}z4e; % upper arc
filldraw z4r--z5l--z5r--z4l--cycle; % stem
filldraw stroke z5e{z89-z88}...z6e...{left}z7e; % lower arc
pos11(.1[hair,curve],-30); x11l=2/3[x12l,x1l]; y11=2/3[y1,y12];
pos12(.3[hair,curve],0); rt x12r=hround(w-3u); y12=.5h;
pos13(.8[hair,curve],30); x13=.5[x12,x14]; y13=.5[y12,y14];
pos14(curve,0); rt x14r=hround(w-.5u); y14=.2h;
pos15(vair,-90); x15=.5[x14,x16]; bot y15r=-oo;
pos16(hair,-180); pos17(.6[hair,flare],-180);
lft x16r=hround(rt x5r+.75u); y17-.5(.6[hair,flare])=.07h;
filldraw stroke z1e{down}...z11e{1.5(x12e-x11e),y12e-y11e}
...{down}z12e...{2(x13-x12),y13-y12}z13e
...{down}z14e...{left}z15e; % stroke
bulb(15,16,17); % inner bulb
pickup crisp.nib; pos20(bar,90); pos21(bar,90);
top y20r=top y21r=x_height;
lft x20=lft x4r-.5stem-u; z21=whatever[z4,z5];
filldraw stroke z20e--z21e; % bar
penlabels(1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,20,21,88,89); endchar;
cmchar "Italic ligature ae";
beginchar(oct"032",13u#,x_height#,0);
italcorr max(1/3x_height#*slant,x_height#*slant+.5(.2[hair#,stem#])-u#);
adjust_fit(if monospace:-u#,-u# else: 0,0 fi); pickup fine.nib;
forsuffixes $=hair,stem: shaved$:=mfudged$; save $; $=shaved$; endfor
numeric heavy_hair; heavy_hair=hround .2[hair,stem];
numeric light_stem; light_stem=hround .75[hair,stem];
pos0(vair,-90); pos1(heavy_hair,0); pos2(vair,90);
pos3(light_stem,180); pos4(vair,270); pos5(hair,320);
x0=rt x3l; rt x1r=hround(w-1.5u+.5heavy_hair); x2=x4=.5(w+6u);
lft x3r=hround(.5w-.5light_stem); x5r=good.x(w-.5u); x6=x5;
y0=y3=y6=bar_height; y1=.5[y0,y2]; top y2r=h+oo; bot y4r=-oo;
top y5l=vround(.5bar_height+.5); path p; p=z4{right}..z5..z6;
filldraw stroke z0e{right}...z1e{up}...pulled_arc.e(2,3)
& pulled_arc.e(3,4)...{direction 1 of p}z5e; % arc of e
pos7(light_stem,0); pos8(light_stem,0);
x7=x8=x3; y7+.5light_stem=h+oo; y8-.5light_stem=-oo;
pos7'(vair,-225); pos11(curve,-180); z7'=z7;
pos12(vair,-90); pos3'(hair,0); z3'=z3;
lft x11r=hround(1.5u-.5curve); x12=.5[x11,x3];
y11=.3[y12,y7]; bot y12r=-oo;
filldraw stroke z7'e{3(x11-x7),y11-y7}...pulled_arc.e(11,12)
& pulled_arc.e(12,3'); % bowl of a
filldraw z7l---z8l..z8r---z7r..cycle; % stem
penlabels(0,1,2,3,4,5,6,7,8,11,12); endchar;
cmchar "Italic ligature oe";
beginchar(oct"033",13u#,x_height#,0);
italcorr max(1/3x_height#*slant,x_height#*slant+.5(.2[hair#,stem#])-u#);
adjust_fit(if monospace:-u#,-u# else: 0,0 fi); pickup fine.nib;
forsuffixes $=hair,stem: shaved$:=mfudged$; save $; $=shaved$; endfor
numeric heavy_hair; heavy_hair=hround .2[hair,stem];
pos0(vair,-90); pos1(heavy_hair,0); pos2(vair,90);
pos3(stem,180); pos4(vair,270); pos5(hair,320);
x0=rt x3l; rt x1r=hround(w-1.5u+.5heavy_hair); x2=x4=.5(w+6u);
lft x3r=hround(.5w-.5stem); x5r=good.x(w-.5u); x6=x5;
y0=y3=y6=bar_height; y1=.5[y0,y2]; top y2r=h+oo; bot y4r=-oo;
top y5l=vround(.5bar_height+.5); path p; p=z4{right}..z5..z6;
filldraw stroke z0e{right}...z1e{up}...pulled_arc.e(2,3)
& pulled_arc.e(3,4)...{direction 1 of p}z5e; % arc of e
pos11(vair,90); pos12(curve,180); pos13(vair,270); pos14(stem,360);
x11=x13=.5[x12,x14]; lft x12r=hround(1.5u-.5curve); x14=x3;
top y11=h+oo; y12=y14=.5[y11,y13]; bot y13=-oo;
filldraw stroke pulled_arc.e(11,12) & pulled_arc.e(12,13)
& pulled_arc.e(13,14) & pulled_arc.e(14,11); % bowl
penlabels(0,1,2,3,4,5,6); endchar;
cmchar "Italic Scandinavian letter o/slash";
beginchar(oct"034",9u#,x_height#+.5desc_depth#,.5desc_depth#);
italcorr h#*slant-u#+.5vair#;
adjust_fit(0,0); pickup fine.nib;
pos1(vair,90); pos2(fudged.stem,180);
pos3(vair,270); pos4(fudged.stem,360);
x1=x3=.5w; lft x2r=hround(1.5u-.5fudged.stem); x4=w-x2;
top y1=x_height+oo; y2=y4=.5[y1,y3]; bot y3=-oo;
filldraw stroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
& pulled_arc.e(3,4) & pulled_arc.e(4,1); % bowl
x5=x4; x6=x2; y5=h; y6=-d;
numeric theta; theta=angle(z5-z6)-90;
pickup crisp.nib; pos5(vair,theta); pos6(vair,theta);
filldraw stroke z5e--z6e; % diagonal
penlabels(1,2,3,4,5,6); endchar;
|