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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
|
% THIS IS THE OFFICIAL COMPUTER MODERN SOURCE FILE itald.mf BY D E KNUTH.
% IT MUST NOT BE MODIFIED IN ANY WAY UNLESS THE FILE NAME IS CHANGED!
% This file contains the ten digits in so-called italic style.
% Character codes \0060 through \0071 are generated.
% The characters all have the same italic correction.
cmchar "Italic numeral 0";
beginchar("0",9u#,fig_height#,0);
italcorr fig_height#*slant-.5u#;
adjust_fit(0,0);
penpos1(vair,90); penpos3(vair,-90); penpos2(curve,180); penpos4(curve,0);
if not monospace: interim superness:=sqrt(more_super*hein_super); fi
x2r=hround(1.5u-.5curve); x4r=w-x2r; x1=x3=.5w;
y1r=h+o; y3r=-o; y2=y4=.5h-vair_corr; y2l:=y4l:=.52h;
penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
& pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle; % bowl
penlabels(1,2,3,4); endchar;
cmchar "Italic numeral 1";
beginchar("1",9u#,fig_height#,0);
italcorr fig_height#*slant-.5u#;
adjust_fit(0,0); pickup tiny.nib;
numeric light_stem; light_stem=hround .4[stem',cap_stem'];
pos1(light_stem,0); pos2(light_stem,0);
lft x1l=lft x2l=hround(.5(w+.5u)-.5cap_stem'); top y1=h+apex_o; bot y2=0;
filldraw stroke z1e--z2e; % stem
dish_serif(2,1,a,1/3,min(2.25u,lft x2l-1.5u),
b,1/3,min(2.25u,w-1.25u-rt x2r)); % serif
pickup crisp.nib; pos3(slab,-90); pos4(bar,-90);
top y3l=h+apex_o; top y4l=.8h+apex_o;
lft x4=max(1.25u,tiny.lft x1l-2.35u); tiny.rt x1r=lft x3+.25[tiny,hair];
erase fill z3l{x4l-x3l,3(y4l-y3l)}...z4l{left}
--(x4l,h+apex_o+1)--(x3l,h+apex_o+1)--cycle; % erase excess at top
filldraw stroke z3e{x4e-x3e,3(y4e-y3e)}..{left}z4e; % point
penlabels(1,2,3,4); endchar;
cmchar "Italic numeral 2";
beginchar("2",9u#,fig_height#,0);
italcorr fig_height#*slant-.5u#;
adjust_fit(0,0); pickup fine.nib;
pos1(vair,45); pos2(vair,0); pos3(vair,-90); pos4(hair,-180);
pos5(vair,-270); pos6(curve,-360); pos7(hair,-405); pos8(hair,-360);
x1=x2-.5u; rt x2r=hround(3.5u+.5vair);
x3=.6[x2,x4]; lft x4r=hround(u-.5hair);
x5=x7=.5w-.5u; rt x6r=hround(w-u); lft x8l=hround(1.5u-.5hair);
y1=.5[x_height,h]; y2=1/3[y1,y3]; y4=x_height; bot y3r=vround .78y4;
top y5r=h+o; y6=.5[y5,y7]; y7=.52y4; bot y8=-o;
filldraw stroke if not hefty:z1e{2(x2-x1),y2-y1}...{down}z2e...{left}z3e...fi
z4e{up}...pulled_arc.e(5,6)
...z7e{2(x7-x6),y7-y6}...{down}z8e; % main stroke
pos9(vair,-90); pos10(vstem+curve-stem,-90); pos11(hair,0);
x9=w-x10=2.5u; rt x11r=hround(w-.5u+.5hair);
y9=.25[y10,y7]; bot y10r=-o; y11=.38x_height;
filldraw stroke z8e{up}...z9e{right}..{right}z10e...{up}z11e; % bar
penlabels(1,2,3,4,5,6,7,8,9,10,11); endchar;
cmchar "Italic numeral 3";
beginchar("3",9u#,fig_height#,0);
italcorr fig_height#*slant-.5u#;
adjust_fit(0,0); pickup fine.nib;
pos1(vair,45); pos2(vair,0); pos3(vair,-90); pos4(hair,-180);
pos5(vair,-270); pos6(stem,-360); pos7(bar,-450); pos8(bar,-450);
x1=x2-.5u; rt x2r=hround(3.5u+.5vair); x3=.5[x2,x4]; lft x4r=hround u;
x5=x7=.5w; rt x6r=hround(w-u); x8=x7-u;
y1=.5[x_height,h]; y2=.5[y1,y3]; y7=y8=.52h; bot y3r=vround 1/4[y7,h];
y4=1/3[y3,y5]; top y5r=h+o; y6=.5[y5,y7];
filldraw stroke if not hefty: z1e{2(x2-x1),y2-y1}...{down}z2e...{left}z3e...fi
z4e{up}...pulled_arc.e(5,6) & pulled_arc.e(6,7)..z8e; % upper arc
pos7'(vair,90); z7'l=z7r;
pos9(curve,0); pos10(vair,-90); pos11(hair,-180); pos12(flare,-180);
rt x9r=hround(w-u); x10=.5w-.5u; lft x11r=hround .75u;
y9=.25h; bot y10r=-o; y11=1/3x_height; bulb(10,11,12); % bulb
filldraw stroke pulled_arc.e(7',9) & pulled_arc.e(9,10); % lower arc
penlabels(1,2,3,4,5,6,7,8,9,10,11,12); endchar;
cmchar "Italic numeral 4";
beginchar("4",9u#,fig_height#,desc_depth#);
italcorr fig_height#*slant-.5u#;
adjust_fit(0,0); pickup fine.nib;
pos1(stem,0); pos6(stem,0); pos7(stem,0);
pos2(bar,-45); pos3(bar,-90); pos4(bar,-90); pos5(bar,-45);
rt x1r=hround(.5w+.5u+.5stem); lft x2l=hround .25u;
x3=2.75u; x4=w-2u; rt x5r=hround(w-.25u);
rt x6r=rt x7r=hround(2/3w+.5stem);
y1+.5stem=h+o; bot y2r=0; bot y3r=vround(.08h-.5bar);
bot y4r=vround-.5bar; bot y5r=vround(.03h-.5bar);
y6+.5stem=bar_height; y7-.5stem=-d;
filldraw circ_stroke z1e{down}...{3(x2-x1),y2-y1}z2e; % diagonal
filldraw stroke z2e{z1-z2}...z3e{right}..{right}z4e
...{x5-x4,2(y5-y4)}z5e; % bar
filldraw z6l---z7l..z7r---z6r..cycle; % stem
penlabels(1,2,3,4,5,6,7); endchar;
cmchar "Italic numeral 5";
beginchar("5",9u#,fig_height#,0);
italcorr fig_height#*slant-.5u#;
adjust_fit(0,0);
numeric bot_thickness,light_hair;
bot_thickness=max(fine.breadth,vround(slab-vair_corr));
light_hair=hround(cap_hair if hefty: -\\2stem_corr fi);
pickup tiny.nib; pos5(vair,180); pos6(vair,90);
bot y5=vround(.53h-vair); top y6r=max(vround .61803h+o,top y6r+y5+eps-y6l);
pos3(light_hair,0); pos4(light_hair,0);
lft x3l=max(1.35u,2.1u-.5light_hair); x3=x4=x5; y4=y5;
top y3=h if not hefty: +\\o fi;
filldraw stroke z3e--z4e; % thin stem
penpos7(cap_stem-fine,0); penpos8(bot_thickness-fine,-90);
fine.rt x7r=hround(w-.9u); x8=.5[u,x7]; x6=.5[x5,x7];
erase fill z5--bot z5--(x6,bot y5)--z6{left}
..tension .9 and 1..{x5-x6,3(y5-y6)}cycle; % erase excess in middle
filldraw stroke z6e{left}..tension .9 and 1..{x5-x6,3(y5-y6)}z5e; % link
pickup fine.nib; pos6'(vair,90); z6'=z6;
y7=.5[y6,y8]; bot y8r=-o;
filldraw stroke pulled_arc.e(6',7) & pulled_arc.e(7,8); % bowl
if serifs: pos9(hair,-180); y9=.5y5; lft x9r=hround .9u;
pos10(flare+1/3(cap_stem-stem),-180); bulb(8,9,10); % bulb
else: pos9(3/7[bot_thickness,flare],angle(-7u,-h));
lft x9r=hround(tiny.lft x3l-.75u); bot y9r=vround .15h-o;
x9l:=good.x x9l; y9l:=good.y y9l;
filldraw stroke term.e(8,9,left,1,4); fi % terminal
if hefty: pickup crisp.nib; pos1(slab,90); pos2(hair,0);
top y1r=h; x1=x4; rt x2r=hround(w-1.5u); y2=y1l-eps;
arm(1,2,a,0,0); % arm
else: numeric flag_breadth; flag_breadth=7/8[vair,cap_curve];
pos1(flag_breadth,90); pos2(flag_breadth,60);
pos0(vair,90); top y1r=tiny.top y3; top y2r=vround .95h+o; y0r=y1r;
lft x1=tiny.lft x3l; x2r=.5[x1,x0]; rt x0=hround(w-1.6u);
erase fill top z1r--z1r...{right}z2r
--(x2r,top y1r)--cycle; % erase excess at top
filldraw stroke z1e...{right}z2e...z0e; fi % flag
penlabels(0,1,2,3,4,5,6,7,8,9,10); endchar;
cmchar "Italic numeral 6";
beginchar("6",9u#,fig_height#,0);
italcorr fig_height#*slant-.5u#;
adjust_fit(0,0);
numeric top_thickness,bot_thickness,side_thickness,pull;
top_thickness=max(fine.breadth,vround(slab-2vair_corr));
bot_thickness=max(fine.breadth,vround(slab-vair_corr));
side_thickness=max(fine.breadth,hround 1/3[curve,cap_curve]);
pull=min(.25,1.5superpull);
pickup fine.nib; pos2(top_thickness,-270);
pos3(side_thickness,-180); pos4(bot_thickness,-90);
pos5(side_thickness,0); pos6(vair,90);
lft x3r=w-rt x5r=hround max(.75u,1.5u-.5side_thickness);
x4=x6-.1u=x2-u=.5w;
top y2r=h+o; y3=.5[y2,y4]; bot y4r=-o;
y5=.5[y4,y6]; top y6=vround 5/8h+o;
path p; {{interim superness:=more_super; p=pulled_super_arc.l(3,4)(pull)}};
numeric t; t=xpart(p intersectiontimes((x3r,y5)--(x4,y5)));
pos7(thin_join,180); z7l=point t of p;
(x,y6r)=whatever[z7l,z6l]; x6r:=min(x,.5[x5r,x6]);
filldraw stroke pulled_super_arc.e(2,3)(pull)
& {{interim superness:=more_super; pulled_super_arc.e(3,4)(pull)}}
& {{less_tense; pulled_super_arc.e(4,5)(pull) & pulled_super_arc.e(5,6)(pull)}}
& z6e{left}...{direction t of p}z7e; % arc and bowl
if serifs: pos1(hair,-360); pos0(flare,-360);
rt x0r=max(rt x2+eps,hround(w-1.2u));
y0=vround min(.9h-.5flare,.85h+.5flare)+o;
{{less_tense; bulb(2,1,0)}}; % arc and bulb
else: pos1(vround .1[top_thickness,flare],90);
top y1r=vround .97h+o; rt x1=hround(x5-.5);
filldraw stroke term.e(2,1,right,.9,4); fi % terminal
penlabels(0,1,2,3,4,5,6,7); endchar;
cmchar "Italic numeral 7";
beginchar("7",9u#,fig_height#,desc_depth#);
italcorr fig_height#*slant-.5u#;
adjust_fit(0,0); pickup fine.nib;
numeric fat_curve; fat_curve=1.4[stem,curve];
pos1(hair,0); pos2(hair,0); pos3(vstem+curve-stem,-90);
pos4(vair,-90); pos5(hair,0); pos6(fat_curve,0);
top y1=h+o; y2=x_height; y3l=y5=y1;
bot y4r=vround(.5[y2,h]-.5vair); y6-.5fat_curve=-o;
lft x2l=hround(.5u-.5hair); x3=.5w-.5u; x4=2/3w;
rt x5r=hround(w-.75u+.5hair); rt x6r=hround(.5w+u+.5fat_curve);
z1=z2+whatever*(z5-z6); filldraw stroke z1e--z2e; % serif
filldraw stroke z2e{z1-z2}...z3e{right}..{right}z4e
...{2(x5-x6),y5-y6}z5e; % bar
filldraw circ_stroke z6e{up}...{2(x5-x6),y5-y6}z5e; % diagonal
penlabels(1,2,3,4,5,6); endchar;
cmchar "Italic numeral 8";
beginchar("8",9u#,fig_height#,0);
italcorr fig_height#*slant-.5u#;
adjust_fit(0,0);
numeric top_thickness,mid_thickness,bot_thickness,upper_side,lower_side,theta;
top_thickness=max(fine.breadth,vround(slab-2vair_corr));
bot_thickness=max(fine.breadth,vround(slab-vair_corr));
x0=.5w; y0=.54h;
if hefty: mid_thickness=vround 2/3vair; upper_side=hround(stem-3stem_corr);
lower_side=hround min(.5[curve,cap_curve]-stem_corr,upper_side+.25u);
penpos1(top_thickness,90); penpos2(upper_side,180);
penpos3(mid_thickness,270); penpos8(upper_side,360);
penpos4(mid_thickness,90); penpos7(lower_side,180);
penpos6(bot_thickness,270); penpos5(lower_side,360);
penpos0(vair,90); z3l=z0r; z4l=z0l;
x1=x6=.5w; x2r=w-x8r=hround u; x7r=w-x5r=hround .75u;
top y1r=h+o; bot y6r=-o; y2=y8=.5[y1l,y3l]; y7=y5=.5[y4l,y6l];
filldraw stroke pulled_arc.e(1,2)
& pulled_arc.e(2,3); % left half of upper bowl
filldraw stroke pulled_arc.e(4,5)
& pulled_arc.e(5,6); % right half of lower bowl
filldraw stroke pulled_arc.e(6,7)
& pulled_arc.e(7,4); % left half of lower bowl
filldraw stroke pulled_arc.e(3,8)
& pulled_arc.e(8,1); % right half of upper bowl
else: pickup fine.nib; theta=90-angle(18u,h); slope:=-h/18u;
upper_side=max(fine.breadth,hround(.5[hair,stem]-stem_corr));
lower_side=hround(.5[hair,stem]+stem_corr);
if lower_side>1.2upper_side: upper_side:=lower_side; fi
pos1(top_thickness,-90); pos6(bot_thickness,-90);
x1=x6=.5w; top y1l=h+o; bot y6r=-o; pos0(cap_stem,theta);
lft x2l=w-rt x8l=hround 1.25u; lft x7r=w-rt x5r=hround .75u;
x2r-x2l=upper_side-fine; x5r-x5l=lower_side-fine;
ellipse_set(1l,2l,3l,0l); ellipse_set(1r,2r,3r,0r);
ellipse_set(6l,5l,4l,0l); ellipse_set(6r,5r,4r,0r);
numeric tau; tau=max(.8,.20710678/(superness-.5));
filldraw stroke z1e{left}..tension atleast tau..z2e{down}
..z3e---z4e..z5e{down}..tension atleast tau..z6e{left}; % S stroke
pos7(lower_side,180); pos8(upper_side,180);
y7=.5[y5l,y5r]; y8=.5[y2l,y2r]; pos9(vair,90); z9=z0;
filldraw stroke z1e{right}..tension atleast tau..z8e{down}
..tension atleast tau and atleast 1..{-18u,-.618h}z9e; % upper right stroke
filldraw stroke z6e{left}..tension atleast tau..z7e{up}
..tension atleast tau and atleast 1..{18u,.5h}z9e; fi % lower left stroke
penlabels(0,1,2,3,4,5,6,7,8,9); endchar;
cmchar "Italic numeral 9";
beginchar("9",9u#,fig_height#,0);
italcorr fig_height#*slant-.5u#;
adjust_fit(0,0);
numeric top_thickness,bot_thickness,side_thickness,pull;
top_thickness=max(fine.breadth,vround(slab-2vair_corr));
bot_thickness=max(fine.breadth,vround(slab-vair_corr));
side_thickness=max(fine.breadth,hround 1/3[curve,cap_curve]);
pull=min(.25,1.5superpull);
pickup fine.nib; pos2(bot_thickness,-90);
pos3(side_thickness,0); pos4(top_thickness,90);
pos5(side_thickness,180); pos6(vair,270);
w-rt x3r=lft x5r=hround max(.75u,1.5u-.5side_thickness);
x4-.1u=x6+.1u=x2+.75u=.5w;
bot y2r=-o; y3=.5[y2,y4]; top y4r=h+o;
y5=.5[y4,y6]; bot y6=vround 3/8h-o;
path p; {{interim superness:=more_super; p=pulled_super_arc.l(3,4)(pull)}};
numeric t; t=xpart(p intersectiontimes((x3r,y5)--(x4,y5)));
pos7(thin_join,360); z7l=point t of p;
(x,y6r)=whatever[z7l,z6l]; x6r:=max(x,.5[x5r,x6]);
filldraw stroke pulled_super_arc.e(2,3)(pull)
& {{interim superness:=more_super; pulled_super_arc.e(3,4)(pull)}}
& {{less_tense; pulled_super_arc.e(4,5)(pull) & pulled_super_arc.e(5,6)(pull)}}
& z6e{right}...{direction t of p}z7e; % arc and bowl
if serifs: pos1(hair,-180); pos0(flare,-180);
lft x0r=min(lft x2-eps,hround 1.2u);
y0=vround max(.1h+.5flare,.15h-.5flare)-o;
{{less_tense; bulb(2,1,0)}}; % arc and bulb
else: pos1(.1[bot_thickness,flare],-120);
bot y1r=vround .07h-o; lft x1r=hround 1.3u;
filldraw stroke term.e(2,1,left,.9,4); fi % terminal
penlabels(0,1,2,3,4,5,6,7); endchar;
|