Skip to Content

Inter-Character Features Don’t Work Across Fonts

Features like kerning, ligatures, and contextual alternatives that work across two characters will break if those characters are in separate fonts.

This is one of those things that sounds kind of obvious when you say it, but it has some subtle implications.

Adjacent Mixed Styles

Different styles, like roman, italic, or bold italic, are usually different fonts. And while you probably wouldn’t expect ligatures to work between adjacent roman and italic characters, kerning doesn’t work either.

(fluff) with roman parentheses and italic text

See Adjacent Romans and Italics Can Collide.

Multiple Subsets

Imagine we’re trying to optimize web font sizes for a site that is mostly in American English, but occasionally we’d like to write in other Latin languages. We might split our font into two: the first with characters in the Basic Latin Unicode block and the second with the Supplemental and Extended blocks.

However, languages that use characters with diacritics don’t do so exclusively. For example, in EB Garamond, Té might normally have kerning metrics, but if the T and é were in different subset fonts, they wouldn’t be kerned.

Té kerned, Té unkerned

CJK Subsets

CJK fonts are so large they have to be split up when used on a website. And this is mostly fine, since we don’t have to worry about kerning or ligatures for the ideographic characters.

However, there may still be sets of characters that need to be kept together. The Latins might be kerned or have ligatures.

As another example, here I’ve added chws Contextual Half-Width Spacing support to Shippori Mincho. This replaces some pairs of adjacent punctuation with half-width variants, preserving the overall horizontal rhythm while avoiding some of the gaps that punctuation can produce.

「い」、「ろ」 with contextual half-width spacing

If the kagikakko and touten were in different subset fonts, the contextual replacement would break and every glyph would advance a full em.

「い」、「ろ」 with full-width spacing
See Also
For an example where METAFONT adjusts metrics between different fonts, see Adjacent Romans and Italics Can Collide: METAFONT’s Italic Correction.