In XeLaTeX (or LuaLaTeX), if you are using an opentype/truetype font, you can just load it with the default ligature features (usually just
liga) turned off.
In standard LaTeX, the only safe solution that I know is to create special tfm files that do not contain ligatures. The new primitive, '
\noligs' in pdftex 1.30 was created specifically so that you do not have to mess with these tfm files. The modification to the tfm files is not that hard, but I do not know how to make latex make use of the results.
To patch a tfm file, say 'cmr10.tfm', first find the file and go to its location, then do this:
$ tftopl cmr10.tfm > cmr10-noligs.pl
The output file
cmr10-noligs.pl is a 'human readable' representation of the tfm contents. You can open it in any text editor. Close to the top, there is a table that starts like this:
(LABEL O 40)
(KRN C l R -0.277779)
(KRN C L R -0.319446)
(LABEL C f)
(LIG C i O 14)
(LIG C f O 13)
(LIG C l O 15)
LIGTABLE, delete all lines with
LIG in it (most fonts have only
LIG, but there are some variations possible like
LIG/>). When you have done that, you
may end up with combinations of
STOP on consecutive lines. Whenever that happens, delete both those lines also.
Then save the file, and run the shell command
$ pltotf cmr10-noligs.pl
This creates the new metrics file,
cmr10-noligs.tfm, that can then be used to do typesetting without any automatic ligatures.
Before you can actually use this font, you (usually) also have to add a dvips/pdftex map file entry for it, otherwise these programs will believe you have created a completely
new metafont font. In this case, my
pdftex.map contains this line for
cmr10 CMR10 <cmr10.pfb
all that is needed is a copy of that line with the new tfm name
cmr10-noligs CMR10 <cmr10.pfb
Note: it is actually possible that there is no matching map line for the original font
because it was itself a virtual font. In that case, you do not need an extra map line at all, but you do need to copy the
<fontname>.vf file (use
kpsewhich to find it, it is on your disk somewhere) to
Someone else will have to explain how to create a LaTeX package from new tfm files,
I do not remember how to do that any more.