]> git.donarmstrong.com Git - lilypond.git/blob - mf/feta-din-code.mf
* lily/dots.cc (print): replace -
[lilypond.git] / mf / feta-din-code.mf
1
2 ex# :=  (dynamic_design_size / 2.4)* pt#;
3 descender# := 0.5 ex#;
4 ascender# := 0.72 ex#;
5 staffspace# := 1.75 / 2.0 * ex#;
6
7
8 %% !! synchronize with feta-params.mf
9 linethickness# := 0.3 pt# + 0.04 staffspace#;
10 stafflinethickness# := stafflinethickness#;
11
12 horizontal_space# :=  .66 ex#;
13
14 font_x_height ex#;
15 font_normal_space horizontal_space#;
16
17 define_pixels (staffspace, linethickness, stafflinethickness, ex, descender, ascender);
18
19
20
21 %%
22 %
23 % TODO: blot diameter should be fixed, not scalable.
24 %
25 %
26
27
28 save serif_thick;
29 serif_thick# = 1.1 linethickness#;
30 define_blacker_pixels (serif_thick);
31 med_thick = round (1.5 linethickness);
32 bottom_blot = 1.3 serif_thick;
33
34
35 code := 32;
36 fet_beginchar("Space", "space", "space")
37         set_char_box(0, horizontal_space#,  0, ex#);
38 fet_endchar;
39
40
41 %
42 % Couldn't find many z examples. This one is losely inspired 
43 % by a sfz from Mueller etuden fuer Horn (Edition Hofmeister.)
44 %
45
46 code := 121;
47 fet_beginchar ("dynamic z", "z", "z");
48         set_char_box (0, .98 ex#, 0, 0.9 ex#);
49
50         save thin_thick, top_narrow, over_shoot;
51         save bot_thick;
52
53         thin_thick = serif_thick;
54         top_narrow = thin_thick;
55         top_overshoot =  .8 serif_thick;
56         top_thick = .3 h ;
57         bot_thick = .2 ex;
58         bot_overshoot = serif_thick;
59
60         x0 = + top_narrow;
61         y0 = .9  [y1r, y1l];
62         y1l = .72 h;
63         x1r = .34 ex;
64         x2 = .66 ex;
65         y2 = y1r - top_overshoot;
66
67
68         y3 = h - .7 thin_thick;
69         x3 = w - .6 top_narrow - .5 thin_thick;
70
71         y4 = .5 thin_thick;
72         x4 = .5 thin_thick;
73
74         x5l =.25 ex;
75         y5l = .4 bot_overshoot;
76         y6l = -bot_overshoot;
77         x6 = w - 3 top_narrow;
78         x7 = w;
79         y7 = .82 [y8r, y6r];
80         x8r = w - .35 top_narrow;
81         x9 = w;
82         y8r = .45 h;
83
84         penpos1(top_thick, 80);
85         penpos3 (thin_thick, angle(z3-z4) + 90);
86         penpos4(thin_thick, angle (z3-z4) + 90);
87         penpos5(bot_thick, 70);
88         penpos6(3/2 bot_thick, 70);
89         penpos8 (thin_thick, 20);
90
91         penlabels(range 0 thru 9);
92
93         save p,q,r;
94         path p,q,r;
95
96         p := z0{down}
97                 ..  z1l{dir(10)}
98
99                 .. simple_serif (z3l, z3r, 90) .. z2{left} .. z1r{left}
100                 .. tension 1.2 
101                 .. cycle;
102         q := z3l -- z3r -- z4r -- z4l -- cycle;
103         r := simple_serif (z4r, z4l, 90) .. z5l{right}
104                 .. z6l{right}
105                 .. z7{up}
106                 .. simple_serif (z8r, z8l, 90)
107                 ..  z6r{left} .. z5r{left} .. cycle;
108         pickup pencircle scaled 1;
109 %       draw p ; draw q ; draw r ;
110
111         fill p; fill q; fill r;
112
113 fet_endchar;
114
115
116 % forte f, grabbed from Ed Breitkopf Mozart horn concerto 3.
117 %
118 % NOTES:
119 %
120 % * the bulbs are open.
121 %
122 % * blotting around the serif
123 %
124 %
125 %
126 % TODO: insert blots around the serif
127 %
128 %
129 %
130 slant_angle = 20;
131
132
133 code := 101;
134 fet_beginchar("dynamic f", "f", "f");
135         set_char_box (0, 1.1 ex#, descender#, ex# + ascender#);
136
137         save left_angle, right_angle;
138         save serif_length, serif_excentricity;
139         save f_thick;
140         save bulb_thick, bulb_diam, fill_up;
141         save p;
142         path p; 
143         bulb_diam = 7.5 / 40 ex;
144         bulb_thick = 8.5/40 ex;
145         fill_up = 1.5 serif_thick;
146         save slant;
147         left_angle =   slant_angle - 6;
148         right_angle =  slant_angle - 3;
149         f_thick = 7/16 ex;
150         serif_length = 0.96 ex;
151         serif_excentricity = 0.01 ex;
152
153
154         % z1 is the "base point"
155         z1 = (0.2 ex, - serif_thick);
156         y2 = y1 + ex;
157         z2l = z1 + whatever*dir (90 - left_angle);
158         penpos2 (f_thick, 0);
159
160         y3l = y1 + ex + ascender;
161         x3l = x1 + 1 ex;
162         penpos3 (med_thick, -90);
163         penpos4 (bulb_thick, -20);
164         z3r = whatever [z4r,z4l];
165
166         x4l - x3l = 1/10 ex;
167
168         penpos5(bulb_thick, -45);
169         x5r = 0.1 [x4l, x4r];
170         y5l = y4l - bulb_diam;
171
172         z6 = z2r + whatever* dir (90 - right_angle);
173         y6 = y1 + 3/8 ex;
174
175         x7 = x1 - 1/4 ex;
176         y7r = y1 -descender;
177         penpos7(med_thick, -90);
178
179         penpos8 (bulb_thick, 160);
180         x8l = x7l - 1/10 ex;
181         z7l = whatever [z8r,z8l];
182
183         penpos9 (bulb_thick, 135);
184         x9r = 0.1 [x8l, x8r];
185         y9l = y8l + bulb_diam;
186         labels(1,6,9);
187         penlabels(2, 3,4,5, 7, 8,9);
188
189         p := z1 --- z2l 
190                 .. tension 1.1
191                 .. z3l{right} .. z4r{down}
192                 .. z5r{left} .. z5l{up}
193                 .. tension 0.8
194                 .. z4l{up} .. z3r{left}
195                 .. tension 1.1
196                 .. z2r --- z6 .. tension 1.25 ..  z7r{left}
197                 .. z8r{up} .. z9r{right} .. z9l{down} .. tension 0.8
198                 .. z8l{down} .. z7l{right} .. cycle;
199         pickup pencircle scaled 1;
200         fill p;
201 %       draw p;
202
203 %
204 % todo round for pixels...
205 %
206         pickup pencircle scaled round (1.4 serif_thick);
207         (rt x13) - (lft x14) = serif_length;
208         y13 = y14;
209         y14 = y2;
210         0.5 [x13, x14] = x2 + serif_excentricity;
211
212         draw z13 .. z14;
213
214         penlabels(16);
215         labels(13,14,15);
216 fet_endchar;
217
218
219 %
220 % Notes:
221 %  
222 % - The S is trapezoidal (i.e. narrower at the top) 
223 %
224 % - The white space is differently shaped at the top (the bulb's inner
225 % curve is filled up.)
226 %
227 % - less heavy than the f and p signs.
228 %
229
230
231 code := 114;
232 fet_beginchar("dynamic s", "s", "s");
233         set_char_box (0, 17/24  ex#, 0, 1 ex#);
234
235         save left_angle, right_angle;
236         save s_thick, s_thin;
237         save base_point;
238         save bulb_diam, bulb_len;
239         save over_shoot;
240         over_shoot = 0; % .2 serif_thick;
241         pair base_point;
242
243         bulb_diam = 11/70 ex;
244         bulb_len = 1.0 bulb_diam;
245         left_angle =  slant_angle - 2;
246         right_angle =  slant_angle -11;
247
248         s_thick = 16/70 ex;
249         s_thin = serif_thick;
250
251         base_point = (0,0);
252
253         penpos1 (bulb_diam, -45);
254         z1 = 0.35 [z2l,z2r] + bulb_len * dir(45);
255         penpos2 (bulb_diam, -25);
256         y2l = 0.845 [y7r, y3r];
257
258         z2l = base_point + whatever * dir (90-left_angle);
259         penpos3 (s_thin, 100);
260         x3l = 1/2 w ;
261         y3l = ypart base_point - over_shoot ;
262         
263         penpos4 (s_thick, 25);
264         ypart z4l  = ypart z1r;
265         z4r = base_point + (w,0) + whatever *dir(90-right_angle);
266         penpos5 (s_thick, 40);
267         z5 = z3l + whatever * dir (90-right_angle);
268         y5 = ypart (0.48 [z7r, z3r]);
269
270         
271         penpos6 (s_thick, 25);
272         z6l = base_point + whatever *dir(90-left_angle);
273         y6r = y9l;
274
275         penpos7 (.9 s_thin, 110);
276         z7l = 0.45 [z6r, z8l] + whatever * dir (90-left_angle);
277         y7r = h + over_shoot;
278
279         penpos8 (.9 bulb_diam, -25);
280         z8 = .6 [z4l,z4r] + whatever *dir(90-right_angle);
281
282         y8r = ypart (0.23 [z7r, z3r]);
283
284         penpos9 (.9 bulb_diam, -45);
285         z9 = .4 [z8r,z8l] + .9 bulb_len * dir (-135);
286
287         penlabels(1,2,3,4,5,6,7,8,9);
288
289         labels(12);
290         save p;
291         path p;
292         p := z2l{down} .. z3l{right} .. z4r{up}
293                 .. z5r
294                 .. z6r{up}
295                 .. z7l{right}
296                 %.. z8l{down}
297                 ..z9l{down}
298                 .. z9r{right} .. z7r{left}
299                 .. z6l{down}
300                 .. z5l
301                 .. z4l{down}
302                 .. z3r{left}
303                 .. z2r{up} .. z1r{up}
304                 .. z1l{left} .. cycle;
305         pickup pencircle scaled 1;
306         fill p;
307 fet_endchar;
308
309
310
311
312 %
313 % piano p, grabbed from Ed Breitkopf Mozart horn concerto 3.
314 %
315 % Notes:
316 %
317 % * there is no dishing in the serif (but we do it anyway)
318 %
319 % * The cheek is a little fatter than the stem 
320
321 % * The slant is extreme: 20 degrees
322 %
323 % * the twiddle (what'sitcalled) is a slightly darker than the serif
324 %
325 % * The hole in the cheek has a straight right side.
326 %
327 % * Corners are filled up.
328 %
329 %
330
331 save slant;
332 slant := ypart (dir(slant_angle));
333 currenttransform := currenttransform slanted slant;
334
335 code := 111;
336
337
338 fet_beginchar("dynamic p", "p", "p")
339         %
340         % TODO w really   is 13/12 ex
341         % but should do kerning
342         set_char_box (0, 15/12 ex#, descender#, 1.0 ex#);
343
344         save twiddle_thick, stem_thick, cheek_thick;
345         save updir, fill_up;
346         save serif, dishing_angle, p, q;
347         save cheek_medium, left_serif_protude, right_serif_protude;
348         save lower_overshoot;
349
350         pair updir;
351         path serif,q,p;
352         save my_slant_angle;
353         my_slant_angle = 0; 
354         updir := dir (90 - my_slant_angle );
355         twiddle_thick = med_thick;
356         cheek_medium = 1/6 ex;
357
358         dishing_angle = 5;
359         fill_up := 1.5 serif_thick;
360         straigh_len = 0.5 ex;
361         lower_overshoot  := .3 serif_thick; 
362
363         stem_thick = 2/6 ex;
364         cheek_thick = 13/32 ex;
365         cheek_width = 0.72 ex;
366         left_serif_protude = 18/60 ex;
367         right_serif_protude= 15/60 ex;
368         
369         penpos1 (twiddle_thick, -slant - 5);
370         penpos2 (cheek_medium, 90 - slant );
371         penpos3 (cheek_medium, 90 - slant);
372
373         x4r - x4l = cheek_thick;
374         penpos4 (whatever, 0);
375         penpos5 (whatever, -38);
376         penpos6 (stem_thick, 0);
377         penpos17 (straigh_len, 90 -slant);
378         whatever [z17l, z17r] =  z4l;
379         y17 = 7/16 ex;
380
381         x6l = 0;
382         y6l = - descender + serif_thick/2;
383         z1l = z6l - whatever *dir (90 - my_slant_angle + 20 );
384         y1r = 0.5 ex;
385         y2r = ex;
386         z7 = whatever * updir + z6l;
387         y7 = 43/60  ex;
388         
389         z2l = whatever *updir + 0.3 [z7, z1r];
390         y8 = ypart (0.9 [z7, z2l]);
391         z8 = 2/3 [z6l, z6r] + whatever * updir;
392
393
394         y3r = ex;
395         z3l = 0.58 [(stem_thick, -descender), (stem_thick + cheek_width - cheek_thick, -descender)] + whatever * updir;
396         y4r = .38  ex;
397         z4r = whatever*updir + (stem_thick+  cheek_width, -descender);
398
399         z5l = whatever*updir  + z3l;
400         y5r = -lower_overshoot;
401         y5l = y5r + cheek_medium * ypart dir(55);
402
403         z9 = z6r + whatever*updir;
404         y9 = .2 [y5l, y5r];
405
406         p :=
407                 z2r{right} .. {dir( -60)}z8 & z8{dir 35} .. z3r{right}
408                 .. z4r{-updir}
409                 .. tension 1.1
410                 .. z5r{left} .. z9
411                 & z9 -- z6r -- z6l -- z7{updir} 
412                 ..  z2l{left} .. tension 1.2 ..
413                 % z1r & z1r -- z1l & z1l
414                 simple_serif (z1r, z1l, -90)
415                 .. cycle;
416
417
418         save blot_t, corner_t;
419
420         blot_t := 0.13;
421         corner_t := xpart (p intersectiontimes z9);
422
423         z19 = point corner_t - 2 blot_t of p;
424         z20 = point corner_t + blot_t of p;
425         labels(19,20);
426
427         save blot_path;
428         path blot_path;
429
430         pickup pencircle scaled 1;
431
432         fill z19{up} .. {right}z20{updir} .. z19{-(direction corner_t - 2 blot_t of p)} .. cycle;
433
434         pickup pencircle scaled 1;
435         fill p;
436
437         y12  = 0.5 ex;
438         z12 = z6r + whatever*updir;
439
440         save inner_tension;
441         inner_tension = 1.4;
442         q :=
443                 z17l .. tension 1.5 .. z17r  .. z3l{left}.. tension 1.05 .. z12{-updir} .. tension 1.05 .. z5l{right} .. cycle; 
444         unfill q;
445         penlabels (1, 2, 3, 4, 5, 6, 17);
446
447
448
449
450         pickup pencircle scaled serif_thick;
451         lft x11 = -left_serif_protude;
452         rt x10 = stem_thick+ right_serif_protude;
453         bot y10 = bot y11 = -descender;
454
455         
456         serif := simple_serif (z10, z11, dishing_angle);
457         draw serif;
458
459         labels(7,8, 9, 10, 11,12);
460
461         
462         z13 = point 0.05 of serif;
463         z14 = point 0.85 of serif;
464         z15 = z6l + updir * fill_up +( serif_thick/2, 0);
465         z16 = z6r + updir * 1.2fill_up- +( serif_thick/2, 0);
466         labels(13,14, 15, 16);
467
468 %       pickup pencircle scaled 1;
469         draw z13{direction 0.05 of serif} .. z16{updir};
470         draw z14{-(direction 0.85 of serif)} .. z15{updir};
471 fet_endchar;
472
473 %
474 % NOTES:
475 %
476 % * right stem is fatter and more straight than the left 2 two stems.
477 %
478 % * The twiddle  at the left is similar to the p twiddle 
479 %
480 % * The bottoms of the stems are blotted. 
481 %
482
483 %
484 %
485 % This is cut & paste programming. Somehow 3 i shapes in two chars (p and m)
486 % Doesn't seem worth the trouble of writing a macro.
487 %
488 code := 108;
489
490 fet_beginchar("dynamic m", "m", "m");
491         set_char_box (0, 1.5 ex#, 0, 1.0 ex#);
492
493         % should share code with p for twiddle.
494
495         save i_thick, i_angle, i_twiddle_thick,
496                 i_twiddle_start_angle, i_twiddle_start_y, 
497                 i_left_space;
498         save p;
499         save idir, center, right_ending;
500         save overshoot;
501         pair center, idir, right_ending;
502
503         path p;
504
505         overshoot = .25  serif_thick;
506         i_thick := 21 / 80 ex;
507         i_angle := 0;
508         idir := dir(90- i_angle);
509
510         i_left_space = 16/80 ex;
511         i_twiddle_thick = 1.2 serif_thick;
512         i_twiddle_start_y =  8/16 ex;
513         i_twiddle_start_angle = 0;
514         center =(0,0);
515
516         penpos1 (i_twiddle_thick, -i_twiddle_start_angle);
517         y1 = i_twiddle_start_y;
518         z1r = center - (i_left_space,0)  + whatever * idir;
519
520         y3 = 0.5 bottom_blot + ypart center; 
521         penpos3(i_thick, 0);
522         z3l = center + whatever * idir;
523         y4 = ypart center;
524         penpos4 (i_thick - bottom_blot, 0);
525         z4 - z3 = whatever * idir;
526
527         y2l = 1 ex  +  overshoot;
528         z2l = .08 [z3l, z3r] + whatever * idir;
529         z2r = 5/8 [z1r, z3l] + whatever * idir;
530         y2r = y5l + 1/9 ex;
531         z2 = 1/2 [z2l, z2r] ;
532         penpos5(i_thick, 0);
533         z5 = z4 + whatever * idir;
534         y5 = 55 / 80 ex;
535
536         p := simple_serif (z1l, z1r, 90) .. tension 1.2 .. z2r{right} .. z5l --- z3l
537                 ..  z4l --- z4r .. z3r --- z5r .. tension 1.2 .. z2l{left} .. cycle;
538
539         fill p;
540         right_ending := z5r;
541         penlabels (1, 2, 3 , 4,5);
542
543 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
544         clearxy;
545
546         i_angle := -3.2;
547         idir := dir(90 - i_angle);
548         i_left_space := 14/80 ex;
549
550
551         z1r = right_ending;
552         z5l = right_ending + (i_left_space,0);
553         penpos1(serif_thick, - i_twiddle_start_angle);
554
555         y3 = .5 bottom_blot + ypart center; 
556         penpos3(i_thick, 0);
557         z3l = z5l + whatever * idir;
558         y4 = ypart center;
559         penpos4(i_thick - bottom_blot, 0);
560         z4 - z3 = whatever * idir;
561
562         y2l = 1 ex+ overshoot;
563
564         z2l = .08 [z3l, z3r] + whatever * idir;
565         z2r = 5/8 [z1r, z3l] + whatever * idir;
566         y2r = y5l + 1/9 ex;
567         z2 = 1/2 [z2l, z2r] ;
568         penpos5(i_thick, 0);
569
570         p := simple_serif (z1l, z1r, 90) .. tension 1.05 .. z2r{right} .. z5l --- z3l
571                 ..  z4l --- z4r .. z3r --- z5r .. tension 1.2 .. z2l{left} .. cycle;
572
573         fill p;
574         right_ending := z5r;
575         penlabels (1, 2, 3 , 4,5);
576         clearxy;
577 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
578
579         i_thick := 23 / 80 ex;
580         i_angle := -6;
581         i_left_space := 14/80 ex;
582
583
584         idir := dir(90- i_angle);
585         z1r = right_ending;
586         z5l = right_ending + (i_left_space,0);
587         penpos5 (whatever, 10);
588         penpos3 (whatever, 20);
589
590         y7 = 0; 
591         penpos7(i_thick ,0);
592         
593         penpos1(serif_thick, - i_twiddle_start_angle);
594         
595         z3l = z7l + whatever * idir;
596         z3r = z7r + whatever * idir;
597         z5l = z7l + whatever * idir;
598         z5r = z7r + whatever * idir;
599
600         save end_twiddle_angle;
601         end_twiddle_angle := 35;
602         penpos6(serif_thick, - end_twiddle_angle);
603         y6l = 23/80 ex + ypart center;
604         z6l = 1.6 [z3l, z3r]  + whatever * idir;
605         
606
607
608         y3l =  1/8 ex + ypart center; 
609         y2l = 1 ex+  overshoot;
610         z2l = .08 [z3l, z3r] + whatever * idir;
611         z2r = 5/8 [z1r, z3l] + whatever * idir;
612         y2r = y5l + 1/9 ex;
613         z2 = 1/2 [z2l, z2r] ;
614         z8 = z7 - (0, 1 overshoot);
615
616         p := simple_serif (z1l, z1r, 90) .. tension 1.05
617                 .. z2r{right} .. z5l --- z3l
618                 .. z8{right}
619                 .. simple_serif(z6r, z6l, 90)
620                 .. tension 0.85
621                 .. z3r --- z5r
622                 .. tension 1.2
623                 .. z2l{left} .. cycle;
624
625 %       pickup pencircle scaled 1;
626 %       draw p;
627         fill p;
628         right_ending := z5r;
629         penlabels (1, 2, 3 , 4,5,6,7, 8);
630         clearxy;
631
632 fet_endchar;
633
634
635 code := 113;
636
637
638 currenttransform := identity slanted ypart(dir(15));
639 fet_beginchar("dynamic r", "r", "r");
640         set_char_box (0, .75 ex#, 0, 1ex#);
641
642
643         save base_point, stem_thick, bulb_diam;
644         save twiddle_thick, attach_len, overshoot, taille;
645         stem_thick =.26 ex;
646         bulb_diam = .30 ex;
647         twiddle_thick= 1.1 serif_thick;
648         overshoot = .5 serif_thick;
649
650         taille = -0.3 serif_thick;
651
652         pair base_point;
653         base_point = (0,0);
654
655         x1l = 0;
656         y1l = .5 bottom_blot;
657
658         penpos10(stem_thick - bottom_blot, 0);
659         y10 = 0;
660         x10 = x1;
661
662         penpos1 (stem_thick, 0);
663         y2l - y1l = 36/47 ex;
664         x2l = x1l;
665         penpos2 (stem_thick, 0);
666
667         y3 = .77  ex;
668         x3r = x2l - .2 ex;
669         penpos3(twiddle_thick, -20);
670
671         x9 = 0.15 [x1r, x1l] ;
672         y9 = y4l - .12 ex ;
673
674         x4l = -0.1 [x1l, x1r];
675         y4l = ex + overshoot;
676
677         x4r = 0.62 [x3r, x2l];
678         y4r = 0.5 [y4l, y2l];
679
680         penpos5(whatever, -74);
681         y5l - y5r =  bulb_diam;
682         y5l = ex + overshoot;
683         x5 = x2r + attach_len;
684         attach_len + bulb_diam/2 + stem_thick = w;
685
686         z6 = z5;
687         penpos6 (bulb_diam, 0);
688 %       z7 = z6l + taille* dir(180);
689
690         save alpha;
691         alpha := 35;
692         z7 = z6 + .4 * bulb_diam * dir (-90 -alpha);
693         z8 = 9/10 [z1r, z2r];
694
695
696         save p;
697         path p;
698
699         p := z1r .. z10r --- z10l .. z1l 
700                 --- z2l
701                 .. z4r{left}
702                 .. tension 1.2
703                 .. {down}simple_serif(z3r, z3l,-90){up}
704                 .. tension 0.95
705                 .. z4l
706                 .. z9
707                 & z9{curl 0}
708                 .. z5l
709                 .. z6r{dir(-80)}
710                 .. z5r{left}
711                 .. z7
712                 .. z6l
713                 .. tension 1.2
714                 .. z8 --- cycle;
715         pickup pencircle scaled 1;
716         draw p;
717         fill p;
718         penlabels (1,2,3, 4,5,6,7,8, 9, 10);
719 fet_endchar ;
720
721
722
723
724
725 %%% KERNING
726
727 ligtable "m" : "p" kern 0.2 ex#, "f" kern -0.1 ex#;
728 ligtable "f" : "f" kern -0.13 ex#;
729 ligtable "r" : "f" kern 0.1 ex#;
730
731
732
733
734
735
736
737
738
739
740 %% notes from old dyn code.
741
742 % "f" obviously has a _lot_ bigger slant than "p" (see Wanske p.239)
743 % however; perhaps we need two f symbols:
744 %  - a super-slanted one used in "f" "mf" "sfz" "sf", and
745 %  - a more normal-slanted in "ff" "fff" "fp" "fp" (see Wanske p.241)
746 %
747 % looking at professionally typeset music reveals that typesetters 
748 % are somewhat unsure about slanting in "mf", "fp", "sfz"
749
750 % "f" and "p" (in any combination) are a lot (factor two) fatter than
751 % "s", "m", and "z".  sometimes the "m" and "z" are a bit fatter than
752 % "s".
753
754
755 % Chester, Breitkopf suggest smaller sizes of these other chars,
756 % using the x-height as reference point.