I'm starting to put together a LaTeX package, which I hope to distribute broadly, that
- provides lualatex code to disable ligation of character pairs and triplets for selected words (globally within the document for all selected words, but not globally over all possible ligature instances);
- provides a pre-assembled list of English-language words for which TeX's f-ligatures -- f-f, f-i, f-l, ff-i, and ff-l -- should be suppressed (note that there are seven ways that ligation suppression can occur: f-f, f-i, f-l, ff-i, ff-l, f-fi, and f-fl);
provides the proper kerning amounts, which can be quite different from zero, separately for each of the seven different ways of disabling ligation and for each of the following font families
- Latin Modern,
- selected font families of the tex-gyre font group, and
- (possibly) selected other opentype font families as well
for regular (upright), bold, italic, and bold-italic font shapes;
- provides reasonably straightforward mechanisms for users to add additional words to the default list as well as to define their own ligation exception lists for ligature pairs and triplets not among TeX's "standard five" f-ligatures.
Before going too far along in the process of creating this package, and risking having to start over more or less from scratch after releasing a first version of the planned package and getting user feedback, I thought it might be worth pausing and soliciting suggestions and requests (and discouragement too!) from interested members of this group as to the features they'd like to see in such a package.
Background
I take it for granted that users of this group know that TeX (i) provides mechanisms for automatic ligation of the "ff", "fi", "fl", "ffi", and "ffl" character combinations and (ii) provides not just one but four [4!] mechanisms for suppressing ligation feature on an ad-hoc, i.e., instance by instance basis; see, e.g., p. 56 of Eijkhout's book TeX by Topic. Interestingly, one of the four methods -- inserting an empty brace group, {}
, between the characters in question -- does not work in xe(la)tex and lua(la)tex, i.e., ligation is not suppressed if this method is employed.
In the TeXBook, Knuth cites "shelfful" as a word for which the "ff" ligature should be suppressed. The general principle that suggests/requires ligation suppression may be expressed as: ligatures should/must not cross morpheme boundaries. Morphemes, loosely speaking, are the smallest linguistic units (whether words or word particles) that contain distinct meaning, as in "shelf" and "ful[l]" in the preceding example. Other candidate words -- I've assembled well over a hundred such words in the meantime -- are "selfish", "halflife" and "pdflatex" (ouch!), "stuffiness", "scofflaw" and "cufflink", "wolffish" (yes, there is such a beast), and "safflower", to name some examples of each of the other six cases for which ligatures ought to be suppressed.
To the best of my knowledge, there exists no general method yet that allows TeX/LaTeX users to create a ligation exception list that could be loaded, say, in the document's preamble and which offers a "turnkey solution" to the various issues related to ligature suppression. (For instance, if ligation is to be suppressed for "f-l" for some group of words, the kerning amounts needed to obtain the proper amount of separation between the "f" and "l" character can differ considerably depending on (i) the font family in use and (ii) whether the text is set in an upright, bold, italic, or bold-italic shape.) Thus, writers are left to their own devices and, more often than not, fail to suppress ligation when needed. Incidentally, whereas this problem is generally not too virulent in English-language documents, it seems to be far more serious in other languages, such as German, which feature composite words much more frequently.
Of course, the failure to suppress ligatures selectively for certain words is not an issue that's confined to TeX and LaTeX. Many general-purpose word processing packages, including Word, either don't offer ligation at all or they require it to be enabled via some set of menu choices that most users are apparently not even aware of. (And, once it's enabled, most users don't seem to know how to disable it selectively for certain words...) Whereas some "professional" packages, such as Adobe's InDesign, do offer the option to enable character ligation globally, they do not seem to offer a method for specifying a list of words in advance for which character ligation should be suppressed.
Open Questions
I'd like to solicit your opinions, advice, and comments on the following issues:
The code I have to instruct TeX to suppress ligation for a specified list of words is based on
lua(la)tex
. Hence, the package requires theluatex
engine; it will not run under eitherpdf(la)tex
orxe(la)tex
. [See the answers to the questions Can one (more or less automatically) suppress ligatures for certain words? and Porting the luatex/ConTeXt module "translate" to lualatex for details on the lualatex code involved.] Given that many (most?!) LaTeX users don't even seem to know aboutlualatex
yet (and many still use the .tex -> .dvi -> .ps -> .pdf route, i.e., don't seem to be familiar or comfortable withpdf(la)tex
), is requiringlualatex
effectively going to kill the package's usability for all but a tiny minority of TeX users? Or, is it safe and/or reasonable to assume that even though lualatex may not exactly be in widespread use at the present time, it will be used more commonly in two or three years, say?Are there already lists of words for which f-ligatures should be avoided, whether in English or in other languages? I'm not aware of such lists, leading me to assemble my own list of more than a hundred such words in the meantime. However, if anyone is aware of such word lists -- especially if they're accessible to the public -- I'd really appreciate knowing about them.
How important might it be to make the package usable for users of fonts other than Latin Modern? Obviously, with hundreds (thousands?, tens of thousands?) of opentype fonts in existence, many of which feature at least the set of five f-ligatures, it's quite impossible for me (or anyone else!) to maintain a list of the kerning amounts neede to fix the ligation exceptions for all of these fonts. Of course, I'll include Latin Modern as well as some of the fonts in the TeX Gyre distributions for treatment in the package. Which other font families should I consider?
Suggestions for font families for which not to bother with creating ligation exception adjustments? For instance, some font families have a lowercase-f with a very pronounced right-overhang; in these cases, suppressing the "f-i" and "f-l" ligatures would require moving the "i" and "l" characters so far over to the right, to avoid a collision with the "f", that an ugly visual hole or gap inside the word would result -- creating an even worse typographical problem.
Any suggestions for a snappy and/or catchy name for this package?!
Comments and suggestions on other topics -- as long as they're related to the issues at hand -- are obviously also welcome!
Addendum: I've followed up on Mark Everitt's suggestion and found doncherry's question, over in English.SE, about words for which ligation should be avoided. I've posted my current list of such words as an answer to doncherry's question.
Second Addendum: It's been suggested I provide the following piece of information, for anyone who comes across this posting and might be wondering if anything has come of the announced efforts. The comments and answers I received were, in fact, extremely helpful in the creation of the selnolig package. This package performs automated selective ligature suppression for German (f-ligatures, aka common ligatures, only) and English (common and rare ligatures) language documents. This package is fairly stable now but still subject to various potential improvements. Comments and suggestions always welcome!
\DisableLigatures{encoding = T1,family = tt* }'. Like any product do also your
market research`! I think your concerns for LuaLaTeX are very valid.