If you have a .tfm
based font, so one of the classical fonts, you can examine the file. Say you want to know about pplr8t
(Palatino Roman, T1 encoded). Then you can run this shell command
tftopl pplr8t.tfm > pplr8t.pl
In the pplr8t.pl
file, look for LIGTABLE
; this is a big chunk near the beginning of the file. If you run a grep search such as
egrep '\(LABEL|LIG|STOP\)' pplr8t.pl
you'll get
(LIGTABLE
(LABEL O 25)
(LIG O 55 O 26)
(STOP)
(LABEL O 33)
(LIG C i O 36)
(LIG C l O 37)
(STOP)
(LABEL O 40)
(STOP)
(LABEL O 41)
(LIG O 140 O 275)
(STOP)
(LABEL O 47)
(LIG O 47 O 21)
(STOP)
(LABEL O 54)
(LIG O 54 O 22)
(STOP)
(LABEL O 55)
(LIG O 55 O 25)
(LIG O 177 O 177)
(STOP)
(LABEL O 74)
(LIG O 74 O 23)
(STOP)
(LABEL O 76)
(LIG O 76 O 24)
(STOP)
(LABEL O 77)
(LIG O 140 O 276)
(STOP)
(LABEL C A)
(STOP)
(LABEL C F)
(STOP)
(LABEL C L)
(STOP)
(LABEL C P)
(STOP)
(LABEL C R)
(STOP)
(LABEL C T)
(STOP)
(LABEL C V)
(STOP)
(LABEL C W)
(STOP)
(LABEL C Y)
(STOP)
(LABEL O 140)
(LIG O 140 O 20)
(STOP)
(LABEL C f)
(LIG C i O 34)
(LIG C f O 33)
(LIG C l O 35)
(STOP)
(LABEL C r)
(STOP)
(LABEL C v)
(STOP)
(LABEL C w)
(STOP)
(LABEL C y)
(STOP)
(LABEL O 200)
(STOP)
(LABEL O 201)
(STOP)
(LABEL O 210)
(STOP)
(LABEL O 212)
(STOP)
(LABEL O 217)
(STOP)
(LABEL O 220)
(STOP)
(LABEL O 224)
(STOP)
(LABEL O 225)
(STOP)
(LABEL O 230)
(STOP)
(LABEL O 300)
(STOP)
(LABEL O 301)
(STOP)
(LABEL O 302)
(STOP)
(LABEL O 303)
(STOP)
(LABEL O 304)
(STOP)
(LABEL O 305)
(STOP)
(LABEL O 335)
(STOP)
(LIG O 55 O 26)
(LIG C i O 36)
(LIG C l O 37)
(LIG O 140 O 275)
(LIG O 47 O 21)
(LIG O 54 O 22)
(LIG O 55 O 25)
(LIG O 177 O 177)
(LIG O 74 O 23)
(LIG O 76 O 24)
(LIG O 140 O 276)
(LIG O 140 O 20)
(LIG C i O 34)
(LIG C f O 33)
(LIG C l O 35)
The relevant chunks are those of the form
(LABEL O 41)
(LIG O 140 O 275)
(STOP)
which means that character "octal 41" (that is !
) followed by "octal 140" (that is `
) should be changed into the character in position "octal 275" of the font.
Similarly,
(LABEL C f)
(LIG C i O 34)
(LIG C f O 33)
(LIG C l O 35)
(STOP)
means that f
followed by i
becomes the character in slot "octal 34", by f
becomes "octal 33" and by l
"octal 35". There's also an entry for "octal 33":
(LABEL O 33)
(LIG C i O 36)
(LIG C l O 37)
(STOP)
so the combination ffi
becomes first "octal 33", then "octal 36".
If you want to disable the "ffl" ligature, you have to tell microtype
to remove ligatures starting with "octal 33", which can be done as
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\catcode`\^^[=12 % for technical reasons
\DisableLigatures[^^[]{encoding=T1}
\begin{document}
ffl ffi
\end{document}
Since "octal 33" is not printable, one has to resort to a low level trick for specifying it (^^[
, because the character code of [
is "octal 133"). The \catcode
trick is because LaTeX, by default, declares invalid all non printable characters.
However you have no way, with the microtype
method, to disable ffl
and keep ffi
.
.tfm
based font or in OpenType ones for (Xe|Lua)TeX?\DisableLigatures
is quite limited: if you want to disableffl
, you have to disable allf
ligatures.