Bringhurst urges us in Chapter 10 of The Elements of Typographic Style: Version 4.0 to fix the font files if needed. See below a summary of the chapter using the section titles.
Bringhurst suggests to modify the font file so the fixes are done forever.
But I think that for some fixes we can use feature files in LuaTeX.
This can make easier to transfer projects from computers with fonts installed system-wide.
I ask for help to identify what can be corrected using feature files and show an example file.
(Would it be better to make this question a comunity wiki?)
List of possible issues to be fixed
-
Letterform
Sometimes the glyphs are completely wrong. Usually due to missing glyphs taken from other fonts.
In this case the only possibility is to use a font editor. Not possible with feature files. -
Hinting
Hinting is not an easy process and sometimes is wrong or missing Altogether.
In this case the only possibility is to use a font editor. Not possible with feature files. -
Vertical position
Some characters' vertical position (specially +, -, dashes, …) could be improved.
Is it posible to fix it with feature files? -
Sidebering
This is the blank space at the right and left of the outline of the glyph insie the box.
Bringhurst says that he has to fix these values usually to fix the space between letters and puntuation symbols
(He describes his style in this regards as a halfway between british and french typographic traditions).
Can/Should it be done with feature files?
(Themicrotype
package can do the french typeseting style. Does it use kerning correction for that?) -
Character substitution
Some characters could be in an inappropriate encoding position.
I guess this can be fix with a GSUB rule. -
Kerning
What to say about bad kerning, that the audience of this forum doesn't already know!
This is an easy one; I can even answer myself 🙂
Summary of Chapter 10
10 Grooming the font
10.1 Legal considerations
10.1 Check the license before tuning a digital font
10.2 Ethical & aesthetic considerations
!0.2.1 If ain't broken…
10.2.2 If the font is out of tune, fix it once and for all
10.2.3 Respect the font first of all, the letterform second, the type designer third, the foundry fourth
10.2.4 Keep on fixing
10.3 Honing the character set
10.3.1 If there are defective glyphs, meal them
10.3.2 If text figures, ligatures or other glyphs you need on a regular basis don't reside on the base font, install them there
10.3.3 if glyphs you need are missing altogether, make them
10.3.4 Check and correct the sidebering
10.3.5 Refine the kerning table
10.3.6 Check the kerning of the word space
10.4 Hinting
10.4.1 If the font looks poor at low resolutions, check the hinting
10.5 Naming convention
Best Answer
A little guide to feature files
With feature files you can define two types of operation in lookups: substitute (
sub
) glyphs by others and position (pos
) glyphs. What is impossible, is to modify the letterforms or add missing glyphs. Also, wrong encoding can’t be corrected by feature files. The only thing one can do in this case is to a glyph by another from the font so at least the visual appearance is as expected.Simple lookups
The simplest positioning is kerning:
Substitution is possible as 1:1, n:1 (ligature), 1:n
Contextual lookups
More complex lookups can define in which context an operation takes place:
With the keyword
ignore
one can exclude contexts from the substitution. The following will substitute e with a final form if it’s not followed by one of the letters A-Z or a-z:Advanced positioning
The two kinds of position parameters in the kern lookups are short formats. The full format is
<xplacement yplacement xadvance yadvance>
. So, for example adjust the vertical position of a superscript glyph with:To illustrate let’s adjust the greek letter Η with polytonic accents. In the first example it’s Eta with grave (Ὴ, needs space to the left), in the second we add a iota adscriptum (ῌ needs space to the right.
xplacement
shifts the image of the glyph by the given value without changing its box,xadvance
changes the size of the glyph’s box:Important: