-2002-04-06 Jan Nieuwenhuizen <janneke@gnu.org>
+2002-04-08 Han-Wen <hanwen@cs.uu.nl>
+
+ * VERSION (MY_PATCH_LEVEL): Release 1.5.51.
+
+ * mf/feta-din-code.mf: kerning for dynamics.
+
+2002-04-07 Han-Wen <hanwen@cs.uu.nl>
+
+ * input/regression/dynamics-glyphs.ly: new file
+
+ * mf/feta-din-code.mf: dynamic tweaks. New dynamic s.
+
+ * mf/feta-nummer-code.mf: another bulb routine: mimic the bulb of
+ forte f for the 2 number. Some fixes for the other bulbed glyphs.
* Documentation/windows/gs-profile.sh:
* Documentation/windows/gsview-profile.sh: Remove. Functionality
2002-04-05 Han-Wen <hanwen@cs.uu.nl>
- * mf/cmbase.mf: remove file. -- do without s and z signs for now.
+ * mf/cmbase.mf: remove file. -- do without s, r and z signs for now.
2002-04-04 Han-Wen <hanwen@cs.uu.nl>
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=5
-PATCH_LEVEL=50
-MY_PATCH_LEVEL=mb1
+PATCH_LEVEL=51
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
romanze = \notes \relative c' {
\key f \major
\time 2/2
+ \property Score.skipBars = ##t
c'4.( _#'(italic (dynamic "p") " con molto espressione")
)f8 a,4 a
--- /dev/null
+% Generated automatically by: lelie, at Sun Apr 7 23:41:57 20022912
+\def\lilypondtagline{Lily was here, 1.5.50.mb1 }
+\def\LilyPondVersion{1.5.50.mb1}
+\def\lilypondpaperunit{mm}
+% Outputting Score, defined at:
+% /home/hanwen/usr/src/lilypond/input/regression/dynamics-glyphs.ly:10:1
+\def\lilypondpaperlinethickness{0.175730}
+\def\lilypondpapervsize{296.900000}
+\def\lilypondpaperscmsetting{(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse
+}
+\def\lilypondpaperunit{mm}
+\def\lilypondpaperlineheight{14}
+\def\lilypondpaperstaffheight{7.029196}
+\def\lilypondpaperindent{13.571429}
+\def\lilypondpaperstaffspace{1.757299}
+\def\lilypondpaperpaperfile{a4-init.ly}
+\def\lilypondpaperlinewidth{190.000000}
+\def\lilypondpaperledgerlinethickness{0.351460}
+\let\lilypondpaperpssetting\undefined
+\def\lilypondpaperinterscoreline{4.000000}
+\def\lilypondpaperpapersizename{a4}
+\def\lilypondpaperhsize{210.000000}
+\def\lilypondpaperoutputscale{1.757299}
+\def\lilypondpaperpapersize{a4}
+\def\lilypondpaperblotdiameter{0.014058}
+\let\lilypondpapertexsetting\undefined
+\def\scaletounit{ 2.83464566929134 mul }\special{\string! %!PS-Adobe-1.0: music-drawing-routines.ps %
+% %
+% Functions for direct and embedded PostScript %
+ %
+/blot-diameter { lilypondpaperblotdiameter } bind def %
+ %
+% fucking redhat xdvi patch. %
+/skeel { scale } bind def %
+ %
+ %
+/set_tex_dimen { %
+ cvr def %
+} bind def %
+ %
+/euclidean_length %
+{ %
+ 1 copy mul exch 1 copy mul add sqrt %
+} bind def %
+ %
+/skeel { scale } bind def %
+% FIXME. translate to middle of box. %
+% Nice rectangle with rounded corners %
+/draw_box % breapth width depth height %
+{ %
+ currentdict /testing known { %
+ %% real thin lines for testing %
+ /blot 0.005 def %
+ }{ %
+ /blot blot-diameter def %
+ } ifelse %
+ %
+ 0 setlinecap %
+ blot setlinewidth %
+ 1 setlinejoin %
+ %
+ blot 2 div sub /h exch def %
+ blot 2 div sub /d exch def %
+ blot 2 div sub /w exch def %
+ blot 2 div sub /b exch def %
+ %
+ b neg d neg moveto %
+ b w add 0 rlineto %
+ 0 d h add rlineto %
+ b w add neg 0 rlineto %
+ 0 d h add neg rlineto %
+ %
+ currentdict /testing known { %
+ %% outline only, for testing: %
+ stroke %
+ }{ %
+ closepath gsave stroke grestore fill %
+ } ifelse %
+} bind def %
+ %
+/draw_round_box % breapth width depth height blot %
+{ %
+ /blot exch def %
+ %
+ 0 setlinecap %
+ blot setlinewidth %
+ 1 setlinejoin %
+ %
+ blot 2 div sub /h exch def %
+ blot 2 div sub /d exch def %
+ blot 2 div sub /w exch def %
+ blot 2 div sub /b exch def %
+ %
+ b neg d neg moveto %
+ b w add 0 rlineto %
+ 0 d h add rlineto %
+ b w add neg 0 rlineto %
+ 0 d h add neg rlineto %
+ %
+ currentdict /testing known { %
+ %% outline only, for testing: %
+ stroke %
+ }{ %
+ closepath gsave stroke grestore fill %
+ } ifelse %
+} bind def %
+ %
+% Nice beam with rounded corners %
+/draw_beam % slope width thick %
+{ %
+ currentdict /testing known { %
+ %% real thin lines for testing %
+ /blot 0.005 def %
+ }{ %
+ /blot blot-diameter def %
+ } ifelse %
+ blot setlinewidth %
+ %
+ 0 setlinecap %
+ 1 setlinejoin %
+ %
+ blot sub /t exch def %
+ blot sub /w exch def %
+ w mul /h exch def %
+ %
+ blot 2 div t 2 div neg moveto %
+ w h rlineto %
+ 0 t rlineto %
+ w neg h neg rlineto %
+ 0 t neg rlineto %
+ %
+ currentdict /testing known { %
+ %% outline only, for testing: %
+ stroke %
+ }{ %
+ closepath gsave stroke grestore fill %
+ } ifelse %
+} bind def %
+ %
+/draw_repeat_slash % width slope thick %
+{ %
+ 1 setlinecap %
+ 1 setlinejoin %
+ %
+ /beamthick exch def %
+ /slope exch def %
+ /width exch def %
+ beamthick beamthick slope div euclidean_length %
+ /xwid exch def %
+ 0 0 moveto %
+ xwid 0 rlineto %
+ width slope width mul rlineto %
+ xwid neg 0 rlineto %
+ % width neg width angle sin mul neg rlineto %
+ closepath fill %
+} bind def %
+ %
+ %
+/draw_ez_ball % ch letter_col ball_col font %
+{ %
+ % font %
+ findfont 0.7 scalefont setfont %
+ 0.1 setlinewidth %
+ 0 0 moveto %
+ 0 setgray %
+ 0.5 0 0.5 0 360 arc closepath fill stroke %
+ % ball_col %
+ 1 eq { %
+ 0.01 setlinewidth %
+ 1 setgray %
+ 0.5 0 0.4 0 360 arc closepath %
+ fill stroke %
+ } if %
+ % letter_col %
+ setgray %
+ % 0.25 is empiric centering. Change to taste %
+ 0.25 -0.25 moveto %
+ % ch %
+ show %
+} bind def %
+ %
+% Simple, but does it work everywhere? %
+% Han-Wen reports that one printer (brand?) at cs.uu.nl chokes on this, %
+% reverted for now -- jcn %
+% %
+% The filled circles are drawn by setting the linewidth %
+% to 2*radius and drawing a point. %
+/simple_draw_ez_ball % ch letter_col ball_col font %
+{ %
+ % font %
+ findfont 0.85 scalefont setfont %
+ /origin { 0.45 0 } def %
+ 0 setgray %
+ 1.1 setlinewidth %
+ origin moveto %
+ origin lineto stroke %
+ % ball_col %
+ setgray %
+ 0.9 setlinewidth %
+ origin moveto %
+ origin lineto stroke %
+ % letter_col %
+ setgray %
+ % 0.25 is empiric centering. Change to taste %
+ origin moveto %
+ -0.28 -0.30 rmoveto %
+ % ch %
+ show %
+} bind def %
+ %
+% this is for drawing slurs. %
+/draw_bezier_sandwich % thickness controls %
+{ %
+ setlinewidth %
+ moveto %
+ curveto %
+ lineto %
+ curveto %
+ gsave %
+ fill %
+ grestore %
+ stroke %
+} bind def %
+ %
+/draw_dot % x1 y2 R %
+{ %
+% 0 360 arc fill stroke %
+ 0 360 arc closepath fill stroke %
+} bind def %
+ %
+/draw_dashed_line % dash thickness dx dy %
+{ %
+ 1 setlinecap %
+ 1 setlinejoin %
+ setdash %
+ setlinewidth %
+ 0 0 moveto %
+ lineto %
+ stroke %
+} bind def %
+ %
+/draw_dashed_slur % dash thickness controls %
+{ %
+ 1 setlinecap %
+ 1 setlinejoin %
+ setdash %
+ setlinewidth %
+ 8 -2 roll %
+ moveto %
+ curveto %
+ stroke %
+} bind def %
+ %
+ %
+ %
+/bracket_traject %
+{ %
+ /traject_ds exch def %
+ /traject_alpha exch def %
+ traject_ds traject_alpha sin mul add %
+ exch %
+ traject_ds traject_alpha cos mul add %
+ exch %
+} bind def %
+ %
+ %
+ %
+/half_bracket %
+{ %
+%6 %
+ 0 0 %
+%5a %
+ bracket_thick arch_height add half_height arch_thick sub arch_width add %
+ arch_angle arch_height -0.15 mul bracket_traject %
+%5b %
+ bracket_thick 0.5 mul half_height %
+ 0 arch_height 0.5 mul bracket_traject %
+%5c %
+ 0 half_height %
+%4a %
+ bracket_thick half_height arch_thick sub %
+ 0 arch_height 0.4 mul bracket_traject %
+%4b %
+ bracket_thick arch_height add half_height arch_thick sub arch_width add %
+ arch_angle arch_height -0.25 mul bracket_traject %
+%4c %
+ bracket_thick arch_height add half_height arch_thick sub arch_width add %
+%3 %
+ bracket_thick half_height arch_thick sub %
+%2 %
+ bracket_thick 0 %
+%1 %
+ 0 0 %
+} bind def %
+ %
+/draw_half_bracket { %
+ moveto %
+ lineto %
+ lineto %
+ curveto %
+ curveto %
+ lineto %
+ gsave %
+ fill %
+ grestore %
+} bind def %
+ %
+/draw_bracket % arch_angle arch_width arch_height bracket_height arch_thick bracket_thick %
+{ %
+ % urg %
+ %
+ /bracket_thick exch def %
+ /arch_thick exch def %
+ /bracket_height exch def %
+ /arch_height exch def %
+ /arch_width exch def %
+ /arch_angle exch def %
+ %
+ bracket_height 2 div bracket_thick add /half_height exch def %
+ bracket_thick 0.5 mul setlinewidth %
+ 1 setlinecap %
+ 1 setlinejoin %
+ half_bracket %
+ 20 copy %
+ 1 -1 scale %
+ draw_half_bracket %
+ stroke %
+ 1 -1 scale %
+ draw_half_bracket %
+ stroke %
+} bind def %
+ %
+}\input lilyponddefs \outputscale=\lilypondpaperoutputscale \lilypondpaperunit\turnOnPostScript\font\magfontAOYTomMMBo=feta20 scaled 1000
+\font\magfontOHZTomMMBo=feta-din14 scaled 1000
+\vbox to 12.1900 \outputscale {\hbox{%
+\placebox{ -8.0000 \outputscale }{ 7.7229 \outputscale }{\kern 0.0000 \outputscale \vrule width 100.3976 \outputscale depth 0.0500 \outputscale height 0.0500 \outputscale }%
+\placebox{ -7.0000 \outputscale }{ 7.7229 \outputscale }{\kern 0.0000 \outputscale \vrule width 100.3976 \outputscale depth 0.0500 \outputscale height 0.0500 \outputscale }%
+\placebox{ -6.0000 \outputscale }{ 7.7229 \outputscale }{\kern 0.0000 \outputscale \vrule width 100.3976 \outputscale depth 0.0500 \outputscale height 0.0500 \outputscale }%
+\placebox{ -5.0000 \outputscale }{ 7.7229 \outputscale }{\kern 0.0000 \outputscale \vrule width 100.3976 \outputscale depth 0.0500 \outputscale height 0.0500 \outputscale }%
+\placebox{ -4.0000 \outputscale }{ 7.7229 \outputscale }{\kern 0.0000 \outputscale \vrule width 100.3976 \outputscale depth 0.0500 \outputscale height 0.0500 \outputscale }%
+\placebox{ -6.0000 \outputscale }{ 12.9229 \outputscale }{\magfontAOYTomMMBo\char113 }%
+\placebox{ -7.0000 \outputscale }{ 8.7229 \outputscale }{\magfontAOYTomMMBo\char107 }%
+\placebox{ -6.0000 \outputscale }{ 94.2127 \outputscale }{\kern -0.0650 \outputscale \vrule width 0.1300 \outputscale depth 3.0000 \outputscale height 0.2250 \outputscale }%
+\placebox{ -5.5000 \outputscale }{ 94.1477 \outputscale }{\magfontAOYTomMMBo\char32 }%
+\placebox{-11.6067 \outputscale }{ 92.3005 \outputscale }{\magfontOHZTomMMBo\hbox{sfp}}%
+\placebox{ -6.0000 \outputscale }{ 72.2307 \outputscale }{\kern 0.0000 \outputscale \vrule width 0.1600 \outputscale depth 2.0000 \outputscale height 2.0000 \outputscale }%
+\placebox{ -6.0000 \outputscale }{ 80.2399 \outputscale }{\kern -0.0650 \outputscale \vrule width 0.1300 \outputscale depth 3.0000 \outputscale height 0.2250 \outputscale }%
+\placebox{ -5.5000 \outputscale }{ 80.1749 \outputscale }{\magfontAOYTomMMBo\char32 }%
+\placebox{-10.7667 \outputscale }{ 78.7166 \outputscale }{\magfontOHZTomMMBo\hbox{pp}}%
+\placebox{ -6.0000 \outputscale }{ 59.2643 \outputscale }{\kern -0.0650 \outputscale \vrule width 0.1300 \outputscale depth 3.0000 \outputscale height 0.2250 \outputscale }%
+\placebox{ -5.5000 \outputscale }{ 59.1993 \outputscale }{\magfontAOYTomMMBo\char32 }%
+\placebox{-10.7667 \outputscale }{ 57.7118 \outputscale }{\magfontOHZTomMMBo\hbox{mp}}%
+\placebox{ -6.0000 \outputscale }{ 45.2916 \outputscale }{\kern -0.0650 \outputscale \vrule width 0.1300 \outputscale depth 3.0000 \outputscale height 0.2250 \outputscale }%
+\placebox{ -5.5000 \outputscale }{ 45.2266 \outputscale }{\magfontAOYTomMMBo\char32 }%
+\placebox{-11.6067 \outputscale }{ 43.7390 \outputscale }{\magfontOHZTomMMBo\hbox{mf}}%
+\placebox{ -6.0000 \outputscale }{ 31.3188 \outputscale }{\kern -0.0650 \outputscale \vrule width 0.1300 \outputscale depth 3.0000 \outputscale height 0.2250 \outputscale }%
+\placebox{ -5.5000 \outputscale }{ 31.2538 \outputscale }{\magfontAOYTomMMBo\char32 }%
+\placebox{-11.6067 \outputscale }{ 30.5246 \outputscale }{\magfontOHZTomMMBo\hbox{f}}%
+\placebox{ -6.0000 \outputscale }{ 17.3460 \outputscale }{\kern -0.0650 \outputscale \vrule width 0.1300 \outputscale depth 3.0000 \outputscale height 0.2250 \outputscale }%
+\placebox{ -5.5000 \outputscale }{ 17.2810 \outputscale }{\magfontAOYTomMMBo\char32 }%
+\placebox{-11.6067 \outputscale }{ 15.8227 \outputscale }{\magfontOHZTomMMBo\hbox{ff}}%
+\placebox{ -7.0000 \outputscale }{ 8.7229 \outputscale }{\magfontAOYTomMMBo\char107 }%
+\placebox{ -6.0000 \outputscale }{ 12.9229 \outputscale }{\magfontAOYTomMMBo\char113 }%
+}\vss}
+\EndLilyPondOutput
\ No newline at end of file
maybe this should be tunable?
*/
if (compression_penalty_b_)
- positions->force_f_ *= 2; // hmm.
+ ; // positions->force_f_ *= 2; // hmm.
}
positions->config_.push (indent_f_);
-code := 111;
-
save serif_thick;
serif_thick# = 1.1 stafflinethickness#;
define_blacker_pixels (serif_thick);
code := 101;
fet_beginchar("dynamic f", "f", "dynf");
- set_char_box (0, 1.25 ex#, descender#, ex# + ascender#);
+ set_char_box (0, 1.1 ex#, descender#, ex# + ascender#);
save left_angle, right_angle;
save serif_length, serif_excentricity;
serif_length = 0.96 ex;
serif_excentricity = 0.01 ex;
- z1 = (0.375 ex, - serif_thick);
+
+ % z1 is the "base point"
+ z1 = (0.2 ex, - serif_thick);
y2 = y1 + ex;
z2l = z1 + whatever*dir (90 - left_angle);
penpos2 (f_thick, 0);
fill p;
% draw p;
- pickup pencircle scaled 1.1 serif_thick;
+%
+% todo round for pixels...
+%
+ pickup pencircle scaled round (1.4 serif_thick);
(rt x13) - (lft x14) = serif_length;
y13 = y14;
y14 = y2;
fet_endchar;
-save slant;
-slant := ypart (dir(20));
+%
+% Notes:
+%
+% - The S is trapezoidal (i.e. narrower at the top)
+%
+% - The white space is differently shaped at the top (the bulb's inner
+% curve is filled up.)
+%
+% - less heavy than the f and p signs.
+%
+
+
+code := 114;
+fet_beginchar("dynamic s", "s", "dyns");
+ set_char_box (0, 2/3 ex#, 0, 1 ex#);
+
+ save left_angle, right_angle;
+ save s_thick, s_thin;
+ save base_point;
+ save bulb_diam, bulb_len;
+ save over_shoot;
+ over_shoot = 0; % .2 serif_thick;
+ pair base_point;
+
+ bulb_diam = 11/70 ex;
+ bulb_len = 1.0 bulb_diam;
+ left_angle = slant_angle - 0;
+ right_angle = slant_angle -9;
+ s_thick = 7.5/36 ex;
+ s_thin = 5/70 ex;
+ base_point = (0,0);
+
+ penpos1 (bulb_diam, -45);
+ z1 = 0.35 [z2l,z2r] + bulb_len * dir(45);
+ penpos2 (bulb_diam, -25);
+ y2l = 0.845 [y7r, y3r];
+
+ z2l = base_point + whatever * dir (90-left_angle);
+ penpos3 (s_thin, 100);
+ x3l = 1/2 w ;
+ y3l = ypart base_point - over_shoot ;
+
+ penpos4 (s_thick, 25);
+ ypart z4l = ypart z1r;
+ z4r = base_point + (w,0) + whatever *dir(90-right_angle);
+ penpos5 (s_thick, 40);
+ z5 = z3l + whatever * dir (90-right_angle);
+ y5 = ypart (0.48 [z7r, z3r]);
+
+
+ penpos6 (s_thick, 25);
+ z6l = base_point + whatever *dir(90-left_angle);
+ y6r = y9l;
+
+ penpos7 (.9 s_thin, 110);
+ z7l = 0.45 [z6r, z8l] + whatever * dir (90-left_angle);
+ y7r = h + over_shoot;
+
+ penpos8 (.9 bulb_diam, -25);
+ z8 = .6 [z4l,z4r] + whatever *dir(90-right_angle);
+
+ y8r = ypart (0.23 [z7r, z3r]);
+
+ penpos9 (.9 bulb_diam, -45);
+ z9 = .4 [z8r,z8l] + .9 bulb_len * dir (-135);
+
+ penlabels(1,2,3,4,5,6,7,8,9);
+
+ labels(12);
+ save p;
+ path p;
+ p := z2l{down} .. z3l{right} .. z4r{up}
+ .. z5r
+ .. z6r{up}
+ .. z7l{right}
+ %.. z8l{down}
+ ..z9l{down}
+ .. z9r{right} .. z7r{left}
+ .. z6l{down}
+ .. z5l
+ .. z4l{down}
+ .. z3r{left}
+ .. z2r{up} .. z1r{up}
+ .. z1l{left} .. cycle;
+ pickup pencircle scaled 1;
+ fill p;
+fet_endchar;
+
+
+
%
% piano p, grabbed from Ed Breitkopf Mozart horn concerto 3.
slant := ypart (dir(slant_angle));
currenttransform := currenttransform slanted slant;
+code := 111;
+
fet_beginchar("dynamic p", "p", "dynp")
%
code := 108;
fet_beginchar("dynamic m", "m", "dynm");
- set_char_box (0, 1.3 ex#, 0, 1.0 ex#);
+ set_char_box (0, 1.5 ex#, 0, 1.0 ex#);
% should share code with p for twiddle.
i_left_space;
save p;
save idir, center, right_ending;
+ save overshoot;
pair center, idir, right_ending;
+
path p;
+ overshoot = .25 serif_thick;
i_thick := 21 / 80 ex;
i_angle := 0;
idir := dir(90- i_angle);
i_twiddle_start_y = 8/16 ex;
i_twiddle_start_angle = 0;
center =(0,0);
- bottom_blot = serif_thick;
+ bottom_blot = 1.5 serif_thick;
penpos1 (i_twiddle_thick, -i_twiddle_start_angle);
y1 = i_twiddle_start_y;
z1r = center - (i_left_space,0) + whatever * idir;
- y3 = bottom_blot + ypart center;
+ y3 = 0.5 bottom_blot + ypart center;
penpos3(i_thick, 0);
z3l = center + whatever * idir;
y4 = ypart center;
penpos4 (i_thick - bottom_blot, 0);
z4 - z3 = whatever * idir;
- y2l = 1 ex;
- z2l = .15 [z3l, z3r] + whatever * idir;
+ y2l = 1 ex + overshoot;
+ z2l = .08 [z3l, z3r] + whatever * idir;
z2r = 5/8 [z1r, z3l] + whatever * idir;
y2r = y5l + 1/9 ex;
z2 = 1/2 [z2l, z2r] ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clearxy;
+ i_angle := -3.2;
+ idir := dir(90 - i_angle);
+ i_left_space := 15/80 ex;
+
z1r = right_ending;
z5l = right_ending + (i_left_space,0);
penpos1(serif_thick, - i_twiddle_start_angle);
- y3 = bottom_blot + ypart center;
+ y3 = .5 bottom_blot + ypart center;
penpos3(i_thick, 0);
z3l = z5l + whatever * idir;
y4 = ypart center;
penpos4(i_thick - bottom_blot, 0);
z4 - z3 = whatever * idir;
- y2l = 1 ex;
- z2l = .15 [z3l, z3r] + whatever * idir;
+ y2l = 1 ex+ overshoot;
+
+ z2l = .08 [z3l, z3r] + whatever * idir;
z2r = 5/8 [z1r, z3l] + whatever * idir;
y2r = y5l + 1/9 ex;
z2 = 1/2 [z2l, z2r] ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
i_thick := 23 / 80 ex;
- i_angle := -7;
- i_left_space := 14/80 ex;
- end_overshoot = .25 serif_thick;
+ i_angle := -6;
+ i_left_space := 15/80 ex;
idir := dir(90- i_angle);
y3l = 1/8 ex + ypart center;
- y2l = 1 ex+ end_overshoot;
+ y2l = 1 ex+ overshoot;
z2l = .08 [z3l, z3r] + whatever * idir;
z2r = 5/8 [z1r, z3l] + whatever * idir;
y2r = y5l + 1/9 ex;
z2 = 1/2 [z2l, z2r] ;
- z8 = z7 - (0, 2 end_overshoot);
+ z8 = z7 - (0, 1 overshoot);
p := simple_serif (z1l, z1r, 90) .. tension 1.05
.. z2r{right} .. z5l --- z3l
% Chester, Breitkopf suggest smaller sizes of these other chars,
% using the x-height as reference point.
+
+ligtable "m" : "p" kern 0.25 ex#, "f" kern;
+ligtable "f" : "f" kern -0.13 ex#;