From Wiki
Jump to navigation Jump to search


Ligatures are combinations of letters that use different glyph shapes to avoid clashing of parts like i-dots and f-arcs. Many fonts contain at least fi and fl ligatures, well-furnished fonts have also ft, ffl, ffi, fft, fb, ffb, fh, ffh and maybe some traditional ones like st, sp, ct, ch and combinations with long s – German ß was originally a long-s + end-s ligature (even if it looks like s+z and is called szlig).

While the use of ligatures is a feature of good typography, there are places where they don’t belong, namely at syllable seams where hyphenation can or should take place.

Some typical German examples are Auf-lage, auf-laden, auf-fallen, Zupf-instrument, Schiff-fahrt. English examples would be chief-ly, shelf-ful, elf-like, wolf-trap, clothes-pin.

Traditional TeX methods to break ligatures

  • Auf\/lage – breaks the ligature, but also kills hyphenation and kerning
  • Auf{}lage – worked in pdfTeX (MkII), but not in modern TeX engines
  • For LaTeX, there’s the selnolig package (English and German).

Enabling Ligatures in fonts

Ligatures in OpenType fonts are defined via "features" that you can/must enable. Usual ligature features are liga and tlig, but some fonts my have others for more/exotic ligatures. Here’s an example for a good set of default features:


The other way round – if you don’t enable ligatures in your font features, you won’t get any; this might be desirable for mono width (typewriter) fonts.

Single places

If you only want to fix a few occurrences, you can use \noligature. Compare:

Auflage Zupfinstrument
Au\noligature{fl}age Zup\noligature{fi}nstrument


ConTeXt has a method of replacing words that you can use for ligature exception dictionaries:



Auflage Zupfinstrument

Auflage Zupfinstrument

Much better. The first parameter os \replaceword is a set (collection) keycode, i.e. you can define different sets of replacements and activate them with \setreplacements.

Here’s a list of German ligature exceptions, derived from selnolig LaTeX package. Just \input it in your environment.

In current versions (after 2017-09-28) you may also define several exceptions at once, like

\replaceword [eg] [Au{fl}age Schiff{f}ahrt Zup{fi}nstrument]

Find more details in the source: lang-rep.mkiv


You can also define blocking of ligatures as a font feature:


\definedfont[Serif*default:nolig] % no ligatures
fi ff fl Auflage Zupfinstrument

\definedfont[Serif*default] % yes ligatures
fi ff fl Auflage Zupfinstrument

While general blocking (\blockligatures[fi,fl]) works, the exception handling (\blockligatures[au:fl:age]) might depend on a version unpublished as of this writing (i.e. after 2017-09-28).