diff options
author | Karl Berry <karl@freefriends.org> | 2013-06-27 16:32:47 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-06-27 16:32:47 +0000 |
commit | 5d0a78fa69eddaec28febee79e47b450d57ada3f (patch) | |
tree | 22a451886d6dc95a71429a132b13e2357ec8266a /Master/texmf-dist/doc/lualatex/selnolig | |
parent | 6b1d2a3aee8e3f5b29fe828e0b963d43cf3a6298 (diff) |
selnolig (16jun13)
git-svn-id: svn://tug.org/texlive/trunk@30982 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/lualatex/selnolig')
-rw-r--r-- | Master/texmf-dist/doc/lualatex/selnolig/selnolig-bugreport.tex | 2 | ||||
-rw-r--r-- | Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-test.pdf | bin | 78883 -> 75892 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-test.tex | 3 | ||||
-rw-r--r-- | Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-wordlist.tex | 25 | ||||
-rw-r--r-- | Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-test.pdf | bin | 125806 -> 124940 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-test.tex | 2 | ||||
-rw-r--r-- | Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-wordlist.tex | 6 | ||||
-rw-r--r-- | Master/texmf-dist/doc/lualatex/selnolig/selnolig.pdf | bin | 322053 -> 321322 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/lualatex/selnolig/selnolig.tex | 198 |
9 files changed, 131 insertions, 105 deletions
diff --git a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-bugreport.tex b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-bugreport.tex index 97aed1156fe..ed0c155c420 100644 --- a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-bugreport.tex +++ b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-bugreport.tex @@ -1,5 +1,5 @@ % !TEX TS-program = lualatex -% selnolig-bugreport.tex, 2013/05/28 +% selnolig-bugreport.tex, 2013/06/12 \documentclass{article} \usepackage[margin=1in]{geometry} diff --git a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-test.pdf b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-test.pdf Binary files differindex 59d3958ab83..5e20074a587 100644 --- a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-test.pdf +++ b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-test.pdf diff --git a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-test.tex b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-test.tex index 5ff136520a6..dd47782f6f3 100644 --- a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-test.tex +++ b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-test.tex @@ -8,7 +8,7 @@ % in the companion file 'selnolig-english-wordlist.tex'. % % Author: Mico Loretan (loretan dot mico at gmail dot com) -% Date: 2013/05/28 +% Date: 2013/06/12 % Check first that we're running Lua(La)TeX. \usepackage{ifluatex} @@ -34,6 +34,7 @@ \setmainfont[ FeatureFile= gpp-ft.fea, ItalicFont = {Garamond Premier Pro Italic}, + BoldItalicFont = {Garamond Premier Pro Italic}, BoldFont = {Garamond Premier Pro}] {Garamond Premier Pro} diff --git a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-wordlist.tex b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-wordlist.tex index ea1f7b1f9c4..e8726ccac1b 100644 --- a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-wordlist.tex +++ b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-english-wordlist.tex @@ -1,7 +1,7 @@ % !TeX root = selnolig-english-test.tex % !TEX TS-program = lualatex -% Last updated: 2013/05/28 +% Last updated: 2013/06/12 % For use with the 'selnolig' package and the % driver program 'selnolig-english-test.tex'. @@ -506,6 +506,27 @@ animallike bowllike eellike jewellike owllike petallike seallike snaillike soull bowelless coalless goalless heelless idealless keelless mailless mealless recoilless skilless skillessness skillessnesses soilless soulless soullessly soullessness soullessnesses tailless toolless trailless wheelless \egroup + +\item \emph{\mbox{ij}} to \emph{ij} + +\bgroup \em +antijam hijack demijohns hijinks + +trijet trijets + +bijection bijective + +bijou bijouterie + +gaijin + +jipijapa marijuana frijoles + +\emph{but:} mijnheer, de Bruijn, rijsttafel (from Dutch) + + +\egroup + \end{itemize} @@ -547,7 +568,7 @@ administer statistics statistically activist agronomist biologist \emph{etc.} -\ \ \ \emph{but:} misthink misthrow calisthenic +\ \ \ \emph{but:} m\mbox{is}think m\mbox{is}throw cal\mbox{is}thenic diff --git a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-test.pdf b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-test.pdf Binary files differindex 7717b1c3f33..bfad64017fb 100644 --- a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-test.pdf +++ b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-test.pdf diff --git a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-test.tex b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-test.tex index ef4f9e8a080..d2dfb0aeae8 100644 --- a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-test.tex +++ b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-test.tex @@ -7,7 +7,7 @@ % of test words is in 'selnolig-german-wordlist.tex'. % % Author: Mico Loretan (loretan dot mico at gmail dot com) -% Date: 2013/05/28 +% Date: 2013/06/12 % Check first that we're running lua(la)tex. \usepackage{ifluatex} diff --git a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-wordlist.tex b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-wordlist.tex index bbd638ecf47..b3b72a2cd69 100644 --- a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-wordlist.tex +++ b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-german-wordlist.tex @@ -1,7 +1,7 @@ % !TeX root = selnolig-german-test.tex % !TEX TS-program = lualatex -% Last updated: 2013/05/28 +% Last updated: 2013/06/12 % For use with the 'selnolig' package and the % driver program 'selnolig-german-test.tex'. @@ -468,7 +468,7 @@ reiflich reifliche reiflichem reiflichen reiflicher reiflichere reiflicherem rei Restauflage Restauflagen -Rinder-Kopffleisch +Rinderkopffleisch Rohstoffindex Rohstoffindexe Rohstoffindices Rohstoffindustrie @@ -977,7 +977,7 @@ Pfeifkonzert Trumpfkarte Tarifkonflikt Tarifkommission -Stoffkissen Stoffkatze Treibstroffkosten Kliffkante Auspuffklang +Stoffkissen Stoffkatze Treibstoffkosten Kliffkante Auspuffklang \end{itemize} diff --git a/Master/texmf-dist/doc/lualatex/selnolig/selnolig.pdf b/Master/texmf-dist/doc/lualatex/selnolig/selnolig.pdf Binary files differindex 52137fba1a5..1fcbac9e1a3 100644 --- a/Master/texmf-dist/doc/lualatex/selnolig/selnolig.pdf +++ b/Master/texmf-dist/doc/lualatex/selnolig/selnolig.pdf diff --git a/Master/texmf-dist/doc/lualatex/selnolig/selnolig.tex b/Master/texmf-dist/doc/lualatex/selnolig/selnolig.tex index ea6bb1f43dd..3a23c22c5ca 100644 --- a/Master/texmf-dist/doc/lualatex/selnolig/selnolig.tex +++ b/Master/texmf-dist/doc/lualatex/selnolig/selnolig.tex @@ -9,7 +9,7 @@ % It has the status "maintained". % % Author: Mico Loretan (loretan dot mico at gmail dot com) -% Date: 2013/05/28 +% Date: 2013/06/12 % Check first that we're running lua(la)tex. \usepackage{ifluatex} @@ -138,7 +138,6 @@ allcolors=DarkBlue]{hyperref} \usepackage[capitalize,nameinlink,noabbrev]{cleveref} - % The macros \selnoligpackagename, % \selnoligpackageversion, and \selnoligpackagedate % used below are defined in 'selnolig.sty'. @@ -147,7 +146,7 @@ Selective suppression of typographic ligatures\thanks{ Current version: \selnoligpackageversion. Features of the \pkg{selnolig} package are subject to change without prior notice. \newline\hspace*{\parindent} -The main text font used in this document is \enquote{Garamond Premier Pro}. \enquote{\ebg EB Garamond} is used for words that involve the \emph{\mbox{\ebg sk}}, {\ebg \mbox{fb}, \mbox{fh}, \mbox{fj}, \mbox{fk}, \mbox{ffb}, \mbox{ffh}, \mbox{ffj}, and \mbox{ffk}} glyphs. Both \enquote{common} and \enquote{discretionary} typographic ligatures are enabled for these fonts\textemdash \emph{and} are suppressed selectively using the rules of the \pkg{selnolig} package.}} +The main text font used in this document is \enquote{Garamond Premier Pro}. \enquote{\ebg EB Garamond} is used for words that involve the {\ebg\uselig{fb}, \uselig{fh}, \uselig{fj}, \uselig{fk}, \uselig{ffb}, \uselig{ffh}, \uselig{ffj}, \uselig{ffk}, and \emph{\uselig{sk}}} glyphs. \enquote{Common}, \enquote{discretionary}, and \enquote{historic} typographic ligatures are enabled for these fonts\textemdash \emph{and} are suppressed selectively using the rules of the \pkg{selnolig} package.}} \author{Mico Loretan\thanks{ \href{mailto:loretan.mico@gmail.com}{loretan dot mico at gmail dot com}.}} @@ -155,17 +154,23 @@ The main text font used in this document is \enquote{Garamond Premier Pro}. \enq \date{\selnoligpackagedate} \begin{document} - \VerbatimFootnotes \pagenumbering{roman} + +% aside - for some reason, the \uselig macros in the +% footnote to the title don't work; need to bring in +% the "heavy artillery", viz., \selnoligoff and +% \selnoligon +\selnoligoff \maketitle +\selnoligon \begin{abstract} -The \pkg{selnolig} package suppresses typographic ligatures selectively, i.e., based on predefined search patterns. The search patterns focus on ligatures deemed inappropriate because they span morpheme boundaries. For example, the word \opt{shelfful}, which is mentioned in the \TeX book as a word for which the \enquote{ff} ligature might be inappropriate, is automatically typeset as shelfful rather than as shel\mbox{ff}ul. +The \pkg{selnolig} package suppresses typographic ligatures selectively, i.e., based on predefined search patterns. The search patterns focus on ligatures deemed inappropriate because they span morpheme boundaries. For example, the word \opt{shelfful}, which is mentioned in the \TeX book as a word for which the \enquote{ff} ligature might be inappropriate, is automatically typeset as shelfful rather than as \uselig{shelfful}. \newline\hspace*{\parindent} -For English and German language documents, the \pkg{selnolig} package provides extensive rules for the selective suppression of so-called \enquote{common} ligatures. These comprise the ff, fi, fl, ffi, and~ffl ligatures as well as the ft and~fft ligatures. Other f-ligatures, such as {\ebg\mbox{fb}, \mbox{fh}, \mbox{fj}} and {\ebg\mbox{fk}}, are suppressed globally, while making exceptions for names and words of non-English/German origin, such as {\ebg Kafka} and {\ebg fjord}. +For English and German language documents, the \pkg{selnolig} package provides extensive rules for the selective suppression of so-called \enquote{common} ligatures. These comprise the ff, fi, fl, ffi, and~ffl ligatures as well as the ft and~fft ligatures. Other f-ligatures, such as {\ebg\uselig{fb}, \uselig{fh}, \uselig{fj}} and {\ebg\uselig{fk}}, are suppressed globally, while making exceptions for names and words of non-English/German origin, such as {\ebg Kafka} and {\ebg fjord}. \newline\hspace*{\parindent} For English language documents, the package further provides ligature suppression rules for a number of so-called \enquote{discretionary} or \enquote{rare} ligatures such as~ct, st, and~sp. \newline\hspace*{\parindent} @@ -182,7 +187,7 @@ The \pkg{selnolig} package requires use of the \LuaLaTeX\ format provided by a r The ability of \TeX\ and Friends to use typographic ligatures has long been cherished by its users. Indeed, the automated and transparent use of typographic ligatures by \TeX\ and Friends is often offered up as one of the reasons for using these programs to obtain high-quality typeset output. -However, even though the automatic use of typographic ligatures is highly desirable in general, there are words for which the use of certain typographic ligatures may not be appropriate. The \TeX book observes, on page~19, that the word |shelfful| may look better if it is typeset as \enquote{shelfful}, i.e., \emph{without} the ff-ligature, rather than as \enquote{\mbox{shelfful}}. Some other English-language words that would generally be considered to be good candidates for non-use of ligatures are \mbox{cufflink} and \mbox{offload}; compare their appearance with that of cufflink and offload. Observe that all three of these words are composed of two \emph{morphemes}: the first morpheme ends in an~\enquote{f\,} or~\enquote{ff\,} while the second morpheme starts with either an~\enquote{f\,} (in the case of shelfful) or an~\enquote{l} (in the cases of cufflink and offload). A \href{http://en.wikipedia.org/wiki/Morpheme}{morpheme}, briefly stated, is the smallest linguistic unit within a word that bears distinct meaning; all words\textemdash other than nonsense words, I suppose\textemdash contain at least one morpheme. The words apple and orange contain one morpheme each, and the words apples, oranges, shelfful, cufflink, and offload each contain \emph{two} morphemes. Stated formally, the main purpose of the \pkg{selnolig} package is to provide methods and rules for an automated yet selective (rather than global) suppression of typographic ligatures that span certain morpheme boundaries. +However, even though the automatic use of typographic ligatures is highly desirable in general, there are words for which the use of certain typographic ligatures may not be appropriate. The \TeX book observes, on page~19, that the word |shelfful| may look better if it is typeset as \enquote{shelfful}, i.e., \emph{without} the ff-ligature, rather than as \enquote{\uselig{shelfful}}. Some other English-language words that would generally be considered to be good candidates for non-use of ligatures are \uselig{cufflink} and \uselig{offload}; compare their appearance with that of cufflink and offload. Observe that all three of these words are composed of two \emph{morphemes}: the first morpheme ends in an~\enquote{f\,} or~\enquote{ff\,} while the second morpheme starts with either an~\enquote{f\,} (in the case of shelfful) or an~\enquote{l} (in the cases of cufflink and offload). A \href{http://en.wikipedia.org/wiki/Morpheme}{morpheme}, briefly stated, is the smallest linguistic unit within a word that bears distinct meaning; all words\textemdash other than nonsense words, I suppose\textemdash contain at least one morpheme. The words apple and orange contain one morpheme each, and the words apples, oranges, shelfful, cufflink, and offload each contain \emph{two} morphemes. Stated formally, the main purpose of the \pkg{selnolig} package is to provide methods and rules for an automated yet selective (rather than global) suppression of typographic ligatures that span certain morpheme boundaries. For English language documents, the need to suppress typographic ligatures that span morpheme boundaries does not appear to be a hugely pressing typographic concern, possibly because English doesn't feature composite words that frequently. However, in other languages, such as German, composite words are much more common. In these languages, there is naturally a much greater potential for composite words to feature instances of |ff|, |fi|, |fl| etc.\ character pairs spanning morpheme boundaries. In German typography, a ligature that spans a morpheme boundary appears to be something that should be avoided at (nearly) all cost, presumably because the presence of the ligatures has the potential to impair seriously the intelligibility of the composite words.\footnote{For German texts, I believe that the \emph{Duden} provides authoritative backing for questions related to selective ligature suppression. For English texts, I'm not aware of the existence of a document, issued by an official or quasi-official body, that prescribes whether ligatures that span morpheme boundaries should be suppressed. If anybody can provide such a reference, I would be happy to list it.} @@ -190,9 +195,9 @@ For English language documents, the need to suppress typographic ligatures that What has \emph{not} been available so far is a \LaTeX\ package that (a) provides a list of word patterns and entire words for which ligatures should be suppressed and (b) systematically discovers all instances of these patterns in a document and applies the non-ligation rules automatically to all words for which one or more pattern matches obtain. The \pkg{selnolig} package is meant to address this need. The package is currently set up to handle non-ligation issues for English and German language documents by providing extensive lists of ligature suppression rules tailored to the respective languages. Of course, I make no claim as to the completeness of either list. The package therefore makes it straightforward for users to provide their own supplemental ligature suppression rules to treat words not already covered by the package.\footnote{If you come up with such words, please email them to me so that I can augment and update the package's ligature suppression rules. A suggested template for reporting such cases is provided in \cref{sec:template}.} -For both English and German language documents, the \pkg{selnolig} package provides rules to suppress \emph{selectively} the following f-ligatures: ff, fi, fl, ffi, and ffl\textemdash the \enquote{standard} f-ligatures that should be familiar to most users of Computer Modern fonts\textemdash as well as the~ft and~fft ligatures. The latter two ligatures, while not provided by the Computer Modern and Latin Modern font families, are frequently available in \href{http://en.wikipedia.org/wiki/Serif#Old_Style}{oldstyle} (also known as \enquote{Garalde}) font families.\footnote{In some oldstyle font families, the \enquote{ft} and \enquote{fft} ligatures are rendered as \enquote{\sabon ft} and \enquote{\sabon fft}, respectively.} Oldstyle-type font families generally feature a great variety of typographic ligatures. Given the popularity of these font families for typesetting documents, it seems useful on the \pkg{selnolig} package to provide ligature suppression rules for the ligatures provided by these font families. +For both English and German language documents, the \pkg{selnolig} package provides rules to suppress \emph{selectively} the following f-ligatures: ff, fi, fl, ffi, and ffl\textemdash the \enquote{standard} f-ligatures that should be familiar to most users of Computer Modern fonts\textemdash as well as the~ft and~fft ligatures. The latter two ligatures, while not provided by the Computer Modern and Latin Modern font families, are frequently available in \href{http://en.wikipedia.org/wiki/Serif#Old_Style}{oldstyle} (also known as \enquote{Garalde}) font families.\footnote{In some oldstyle font families, the \enquote{ft} and \enquote{fft} ligatures are rendered as \enquote{\sabon ft} and \enquote{\sabon fft}, respectively.} Oldstyle-type font families generally feature a great variety of typographic ligatures. Given the popularity of these font families for typesetting, the \pkg{selnolig} package provides ligature suppression rules for many of the ligatures provided by these font families. -For both English and German language documents, the {\ebg \mbox{fb}, \mbox{fh}, \mbox{fj}, and \mbox{fk}} ligatures are suppressed \emph{globally}; see also \cref{sec:global-nolig}. However, exceptions are provided in order not to suppress these ligatures for selected words of \emph{non-English\slash German} origin, such as {\ebg fjord, fjell, Prokofjew, and Kafka}. +For both English and German language documents, the {\ebg \uselig{fb}, \uselig{fh}, \uselig{fj}, and \uselig{fk}} ligatures are suppressed \emph{globally}; see also \cref{sec:global-nolig}. However, exceptions are provided in order not to suppress these ligatures for selected words of \emph{non-English\slash German} origin, such as {\ebg fjord, fjell, Prokofjew, and Kafka}. For English language documents, the \pkg{selnolig} package recognizes an option called \opt{broadf}; if it is set, additional f-ligatures will be suppressed selectively. The package also features an option called \opt{hdlig} to provide selective ligature suppression for discretionary (aka rare) ligatures such as~ct, st, sp, {\ebg\emph{sk}}, \emph{th}, \emph{at}, \emph{et}, \emph{ll}, \emph{as}, \emph{is}, and~\emph{us}. No rules are currently provided to suppress historic\slash discretionary ligatures for German documents.\footnote{A remark on the classification of various forms of typographic ligatures in OpenType fonts: There appears to little terminological standardization as to which typographic ligatures are labelled \enquote{historic} and which ones are labelled \enquote{discretionary}. To wit, the fonts Latin Modern Roman, Garamond Premier Pro, and Hoefler Text report having \enquote{only} discretionary ligatures, whereas Junicode, Cardo, EB Garamond, and Palatino Linotype report having both historic and discretionary ligatures. Interestingly, none of these fonts report having ligatures classified as either \enquote{contextual} or \enquote{required}. } @@ -240,10 +245,9 @@ but if one or more of the language options noted above are specified as options \renewcommand\labelenumi\theenumi The ligature suppression macros of the \pkg{selnolig} package \emph{require} the use of \LuaLaTeX; they will not work under either pdf\LaTeX\ or \XeLaTeX.\footnote{If the \pkg{selnolig} package is not run under \LuaLaTeX, a warning message will be issued and only the package's supplemental hyphenation rules will be available to the user.} -If you've been using pdf\LaTeX\ until now, the requirement to use \LuaLaTeX\ will likely force you to make some changes to your existing documents. Fortunately, these changes should be minor and straightforward to implement, because \LuaLaTeX\ is (for the most part) a strict superset of pdf\LaTeX. Almost all documents that compile correctly under pdf\LaTeX\ should also compile correctly under \LuaLaTeX. The most important changes are: +If you've been using pdf\LaTeX\ until now, the requirement to use \LuaLaTeX\ will likely force you to make some changes to your existing documents. Fortunately, these changes should be minor and straightforward to implement, because \LuaLaTeX\ is (for the most part) a strict superset of pdf\LaTeX. Almost all documents that compile correctly under pdf\LaTeX\ should also compile correctly under \LuaLaTeX. The most important changes you'll need to make are: \begin{enumerate} -\item Do not load the |inputenc| and |fontenc| packages. \item Insert the instruction |\usepackage{fontspec}| -in the preamble.\footnote{If the \pkg{selnolig} package is run under \LuaLaTeX\ but the \pkg{fontspec} package isn't loaded by the time the \Verb+\begin{document}+ statement is encountered, \pkg{selnolig} will terminate with an error message.} Then, use commands such as \cmmd{setmainfont} and \cmmd{setsansfont} to load the fonts you wish to use. +\item Do not load the |inputenc| and |fontenc| packages. \item Load the |fontspec| package.\footnote{If the \pkg{selnolig} package is run under \LuaLaTeX\ but the \pkg{fontspec} package isn't loaded by the time the \Verb+\begin{document}+ statement is encountered, \pkg{selnolig} will terminate with an error message.} Then, use commands such as \cmmd{setmainfont} and \cmmd{setsansfont} to load the fonts you wish to use. \end{enumerate} \endgroup @@ -259,19 +263,18 @@ rather than either |latex myfile| or |pdflatex myfile|. If you use a text editin The very first time one runs \LuaLaTeX\ on a document with a new set of fonts, the compilation speed will likely be quite slow, because \LuaLaTeX\ has to create various cache files to store font-related information. Subsequent compilation runs should be much faster. -The answers to the questions \href{http://tex.stackexchange.com/q/28642/5001}{Frequently loaded packages: Differences between pdf\LaTeX\ and \LuaLaTeX?} and \href{http://tex.stackexchange.com/q/32295/5001}{Using Lua\TeX\ as a replacement for pdf\TeX}, both posted to \href{http://tex.stackexchange.com/}{tex.stackexchange.com}, provide very useful information for people who are new to \LuaLaTeX\ and are at least somewhat familiar with pdf\LaTeX\'s ways of getting things done. Another great resource for people who wish to become more more familiar with \LuaLaTeX\ is \href{http://mirror.ctan.org/info/luatex/lualatex-doc/lualatex-doc.pdf}{A Guide to \LuaLaTeX} by Manuel Pégourié-Gonnard. +The answers to the questions \href{http://tex.stackexchange.com/q/28642/5001}{Frequently loaded packages: Differences between pdf\LaTeX\ and \LuaLaTeX?} and \href{http://tex.stackexchange.com/q/32295/5001}{Using Lua\TeX\ as a replacement for pdf\TeX}, both posted to \href{http://tex.stackexchange.com/}{tex.stackexchange.com}, provide very useful information for people who are new to \LuaLaTeX\ and are at least somewhat familiar with pdf\LaTeX's ways of getting things done. Another great resource for people who wish to become more familiar with \LuaLaTeX\ is \href{http://mirror.ctan.org/info/luatex/lualatex-doc/lualatex-doc.pdf}{A Guide to \LuaLaTeX} by Manuel Pégourié-Gonnard. \subsection{Anything else I need to do or know?} \label{sec:anythingelse} For multilingual support, \LuaLaTeX\ and the \pkg{selnolig} package work well with the \href{http://www.ctan.org/pkg/babel}{\pkg{babel}} package. If your document loads the \pkg{babel} package, be sure to load the \pkg{selnolig} package \emph{after} the \pkg{babel} package, so that the supplemental hyphenation patterns provided by the \pkg{selnolig} package won't get clobbered by \pkg{babel}'s hyphenation settings.\footnote{The \pkg{selnolig} package is also compatible with the \href{http://www.ctan.org/pkg/hyphsubst}{\pkg{hyphsubst}} package (which, if used, should be loaded with a \Verb+\RequirePackage+ statement \emph{before} the \Verb+\documentclass+ instruction). With \TeX Live2013, it may also be possible to use the \pkg{polyglossia} package with \LuaLaTeX\ and hence with \pkg{selnolig}, but I haven't verified that this is the case.} -\LuaLaTeX\ natively supports the so-called \utf\ input encoding scheme; in fact, it is also the \emph{only} input encoding scheme that \LuaLaTeX\ knows about. The \pkg{selnolig} package assumes that the \TeX\ files it operates on conform to this input encoding method. Nowadays, many modern \TeX-aware editors support \utf\ directly; \pkg{selnolig} should have no problems with \TeX\ files produced by these editors. Legacy files, however, may use other input encoding systems. If your input files currently use a different input encoding scheme, such as \textsc{latin1}, you must first convert them to \utf. Several methods exist for changing a file's input encoding scheme; see the question \href{http://tex.stackexchange.com/q/87406/5001}{How to change a .tex file's input encoding system (preferably to \utf)?} and the associated answers on \url{tex.stackexchage.com} for some possibilities. +\LuaLaTeX\ natively supports the so-called \utf\ input encoding scheme; in fact, it is also the \emph{only} input encoding scheme that \LuaLaTeX\ knows about. The \pkg{selnolig} package assumes that the \TeX\ files it operates on conform to this input encoding method. Nowadays, many modern \TeX-aware editors support \utf\ directly; \pkg{selnolig} should have no problems with \TeX\ files produced by these editors. Older files, however, may use other input encoding systems. If your input files currently use a different input encoding scheme, e.g., \textsc{latin1}, you must convert them to \utf. Several methods exist for changing a file's input encoding scheme; see the question \href{http://tex.stackexchange.com/q/87406/5001}{How to change a .tex file's input encoding system (preferably to \utf)?} and the associated answers on \url{tex.stackexchage.com} for some possibe methods. -If your document is written in German, it is assumed that all vowels with diereses (Umlaute) are entered as \Verb|ä|, \Verb|ö|, \Verb|ü|, etc.\ rather than, say, as \Verb|\"{a}|, \Verb|\"{o}|, and~\Verb|\"{u}| or (if you tend to use the \pkg{babel} \enquote{shortcuts}) as \Verb|"a|, \Verb|"o|, and~\Verb|"u|. Likewise, it's assumed that you enter the \enquote{eszett} (\enquote{scharfes~s}) character as~|ß| rather than as~|\ss|. -It is also assumed that you use the triple-f (modern) spelling of words such as \texttt{Schifffahrt}, \texttt{Stofffarbe}, and \texttt{grifffest} as well as the double-t (modern) spelling of words such as |Mannschafttest|. +If your document is written in German, it is assumed that all vowels with diereses (Umlaute) are entered as \Verb|ä|, \Verb|ö|, \Verb|ü|, etc.\ rather than, say, as \Verb|\"{a}|, \Verb|\"{o}|, and~\Verb|\"{u}| or (if you tend to use the \pkg{babel} \enquote{shortcuts}) as \Verb|"a|, \Verb|"o|, and~\Verb|"u|. Likewise, it's assumed that you enter the \enquote{eszett} (\enquote{scharfes~s}) character as~|ß| rather than as~|\ss|.\footnote{\TeX nically speaking, |selnolig| only requires the use of \Verb|ä|, \Verb|ö|, \Verb|ü|, etc.\ in the search strings of the ligature suppression rules.} It is also assumed that you use the triple-f (modern) spelling of words such as \texttt{Schifffahrt}, \texttt{Stofffarbe}, and \texttt{grifffest} and the double-t (modern) spelling of words such as |Mannschafttest|. -Finally, all \pkg{babel}-style ``\Verb+"|+'' ligature-suppressing shortcuts should either be removed entirely or be replaced with |\breaklig| instructions; the \pkg{selnolig} package's |\breaklig| macro is explained in \cref{sec:breaklig} below.\footnote{On my \LuaLaTeX\ system, whenever a \Verb+"|+ command is encountered, I either get a bad crash that requires a reboot of the computer (under Mac\TeX\,2012) or I get a stern error message about \enquote{Forbidden control sequence found while scanning use of \cmmd{FancyVerbGetVerb}} (under Mac\TeX\,2013).} +Finally, all \pkg{babel}-style ``\Verb+"|+'' ligature-suppressing shortcuts should either be removed entirely or be replaced with |\breaklig| instructions; the \pkg{selnolig} package's |\breaklig| macro is explained in \cref{sec:breaklig}.\footnote{On my \LuaLaTeX\ system, whenever a \Verb+"|+ command is encountered, I either get a bad crash that requires a reboot of the computer (under Mac\TeX\,2012) or I get a stern error message about \enquote{Forbidden control sequence found while scanning use of \cmmd{FancyVerbGetVerb}} (under Mac\TeX\,2013).} @@ -279,40 +282,44 @@ Finally, all \pkg{babel}-style ``\Verb+"|+'' ligature-suppressing shortcuts shou \section[The selnolig package's approach to breaking up ligatures]{The \pkg{selnolig} package's approach to breaking up ligatures} -\subsection[Free, derivational, and inflectional morphemes]{Free, derivational, and inflectional morphemes: What's their relationship to ligature suppression?!} - +\subsection[Free, derivational, and inflectional morphemes]{Free, derivational, and inflectional morphemes, and their relationship to ligature suppression} -Good typography supports and enhances the readability of the typeset text. There are, obviously, a great many facets to what constitutes good readability. One of them is the ease with which readers can discern the \emph{meaning} of words, including composite words that contain two or more morphemes. Typographic ligatures serve to \enquote{group} characters into composite glyphs, and they are generally thought to contribute to the text's readability \emph{if} they do not span morpheme boundaries. Ligatures that do span morpheme boundaries within a word \emph{may} impair its readability, in part because the reader's brain often uses the grouping performed by these composite glyphs to help detect the morphemes within each word. +Good typography supports and enhances the readability of the typeset text. There are obviously a great many facets to how typography may contribute to good readability. One aspect is the ease with which readers can discern the \emph{meaning} of words. Because a typographic ligature groups two or more characters into a composite glyph, it is natural for the reader to \enquote{read} a ligature as forming a single unit and, moreover, to associate the ligature with some part of the word's meaning. Whereas this mental association of visual unity and meaning can be helpful when it comes to discerning the meaning of single-morpheme words,\footnote{Examples of single-morpheme words containing a ligature are off, fit, flat, office, baffle, left, act, cost, and spin.} it \emph{may} detract from the word's readability if the word is composite and the ligature happens to span a morpheme boundary. Ligatures that span a morpheme boundaries \emph{may} impair the word's readability if readers experience the need to do a \enquote{double take} to separate out the morphemes used in the composite word. -What exactly are morphemes? Briefly put, morphemes are the smallest linguistic units within a word that carry \emph{meaning}. Because words are, by definition, standalone units of text, each word contains at least one morpheme.\footnote{Please don't try to get me involved in a discussion of what it may mean to have words without meaning\dots} Morphemes are classified as \emph{free} morphemes if they can stand alone as words (e.g., cat, dog, sea, see), and as \emph{bound} morphemes if they can not. E.g., the letter~|s| in the words cats, dogs, and rivers indicates the plural forms of the associated nouns, but the |s| particle cannot stand alone as a (meaningful) word. A bound morpheme must therefore be associated with a free morpheme. +What exactly are morphemes? Briefly put, morphemes are the smallest linguistic units within a word that carry \emph{meaning}. Because words are, by definition, standalone units of text, each word contains at least one morpheme.\footnote{Please don't try to get me involved in a discussion of what it may mean to have words without meaning\dots} Morphemes are classified as \emph{free} if they can stand alone as words (e.g., cat, dog, sea, see), and as \emph{bound} if they can not. E.g., the letter~|s| in the words cats, dogs, and rivers indicates the plural forms of the associated nouns; because the |s| particle cannot stand alone as a (meaningful) word, it is a bound morpheme. -Bound morphemes can be divided further into derivational and inflectional morphemes. A \emph{derivational} morpheme changes the meaning of the associated free morpheme in a fundamental way. E.g., the \enquote{un} in \enquote{untrue} reverses the meaning of the associated free morpheme \enquote{true}, and the \enquote{ful} in \enquote{shelfful} changes the word's meaning from a noun to a quantity measure (two shelffuls of books on typography). An \emph{inflectional} morpheme, in contrast, signifies a less fundamental change in meaning: in nouns (and, depending on the language, adjectives as well), inflectional morphemes indicate plural forms (child vs. children, cat vs. cats) and other forms of declination.\footnote{In English, the virtually sole type of declension is to indicate plural status. In other languages, declination can occur to indicate nominative, genitive, dative, accusative, etc. forms\textemdash of nouns \emph{and} adjectives. E.g., in German one says das schöne Kind, des schönen Kindes, dem schönen Kinde, etc. the particles |en|/|es| and |en|/|e| represent inflectional morphemes associated with the genitive and accusative forms.} In verbs, inflectional morphemes indicate conjugation, such as a change in tense or of the subject performing the action implied by the verb. E.g., call vs. called, walk vs. walked, but also \enquote{I~swim} vs. \enquote{she swims}, etc. +Bound morphemes can be divided further into derivational and inflectional morphemes. A \emph{derivational} morpheme changes the meaning of the associated free morpheme in a fundamental way. E.g., the \enquote{un} in \enquote{untrue} reverses the meaning of the associated free morpheme \enquote{true}, and the \enquote{ful} in \enquote{shelfful} changes the word's meaning from a noun to a quantity measure (\enquote{two shelffuls of books on typography}). +An \emph{inflectional} morpheme signifies a less fundamental change in meaning. In nouns (and, depending on the language, adjectives as well), inflectional morphemes indicate plural forms (child vs. children, cat vs. cats) and other forms of declination.\footnote{In modern English, the virtually sole type of declination is to indicate plural status. In other languages, declination can also occur to indicate genitive, dative, accusative,~etc. forms of nouns \emph{and} adjectives. E.g., in German one says das schöne Kind, des schönen Kindes, dem schönen Kinde,~etc. The particles |en|/|es| and |en|/|e| represent inflectional morphemes associated with the genitive and dative forms.} In verbs, inflectional morphemes indicate conjugation, such as a change in tense or of the subject performing the action implied by the verb. E.g., call vs. called, walk vs. walked, and also \enquote{swim} vs. \enquote{swims}, etc. -Words containing more than one morpheme can contain either \enquote{just} free morphemes\textemdash rooftop, newspaper, etc.\textemdash or free and bound morphemes joined together\textemdash untrue, shelfful, sel\mbox{fi}sh, etc. The bound morphemes in a word generally occur either as a prefix or a suffix to the word's \enquote{main part} or \enquote{stem} (the free morpheme). Prefixes almost invariably represent derivational morphemes (e.g., true vs. untrue; do vs. redo and undo). Suffixes, in contrast, can represent either derivational or inflectional morphemes. For instance, the suffixes |like| and |less| in dwarflike and leafless are derivational morphemes, whereas the suffix |ed| in hounded and bounded is an inflectional morpheme. +Words containing more than one morpheme can contain either \enquote{just} free morphemes\textemdash rooftop, newspaper, etc.\textemdash or free and bound morphemes joined together\textemdash untrue, shelfful, childish, etc. The bound morphemes in a word generally occur either as a prefix or a suffix to the word's \enquote{main part} or \enquote{stem} (the free morpheme). Prefixes almost invariably represent derivational morphemes (e.g., untrue, review, perform). Suffixes, in contrast, can represent either derivational or inflectional morphemes. For instance, the suffixes |like| and |less| in dwarflike and leafless are derivational morphemes, whereas the suffix~|ed| in hounded and laughed is an inflectional morpheme. It is important to realize that not all ligatures that span morpheme boundaries are equally inimical to good readability. Consider, say, the word \emph{umbrellas}, which contains the ligature~\emph{as}. Note that this ligature crosses a morpheme boundary, between the free morpheme \emph{umbrella} and the suffix~\emph{s}. Nevertheless, I'm quite confident that few will claim that the presence of the \emph{as} ligature detracts from the readability of the word \emph{umbrellas}. I believe there are two reasons why this particular word's readability is not impaired by the presence of a ligature that spans a morpheme boundary. First, the suffix~\emph{s} is an inflectional morpheme: it \enquote{merely} serves to change the noun's state from singular to plural; clearly, most of the composite word's meaning is conveyed by the free morpheme \emph{umbrella}. Second, the ligature occurs at the very \emph{end} of the word rather than, say, closer to the beginning or middle of the word. The \pkg{selnolig} package adopts the following broad principles: First, ligatures that cross the boundaries of two free morphemes are always suppressed. Second, ligatures that cross the boundary between a free morpheme and a derivational morpheme are also suppressed\textemdash with certain exceptions. Third, ligatures that span the boundary between a free morpheme and an inflectional morpheme are not suppressed. As will be shown below, this third principle is particularly relevant for decisions related to the suppression (and non-suppression) of ft and fft ligatures in German texts. -It is worth observing that morphemes (which convey meaning) need not coincide with \emph{syllables} (which convey pronunciation and sound). Indeed, a word can contain several syllables but consist of only one morpheme (e.g., apple, orange, banana), or it can consist of only one syllable but contain more than one morpheme (e.g., cats, dogs, reads, reeds, seas, and sees). The fact that a ligature may span a syllable boundary within a word (and, possibly, a hyphenation point as well) does not, by itself, imply that this ligature should be suppressed. To wit, consider the German adjective \enquote{straff} and its associated forms straffe, straffer, straffen, etc.: the free morpheme in all of these words is |straff|, while the suffixes |e|, |er|, and |en| represent inflectional morphemes. Even though there's a syllable boundary between the two |f|s for all modified forms of the adjective straff, the ff-ligature is used for all forms because it doesn't span a \emph{morpheme} boundary. If TeX's hyphenation algorithm decides it needs to hyphenate the word straffen as s\kern0pt traf-fen to get a good line break, it can do so\textemdash and break up the ligature in the process. There's no need, though, to break up a ligature pre-emptively just because the word might get hyphenated in the middle of the ligature. +It is worth observing that morphemes (which convey meaning) need not coincide with \emph{syllables} (which convey pronunciation and sound). Indeed, a word can contain several syllables but consist of only one morpheme (e.g., apple, orange, banana), or it can consist of only one syllable but contain more than one morpheme (e.g., cats, dogs, reads, reeds, seas, and sees). The fact that a ligature may span a syllable boundary within a word (and, possibly, a hyphenation point as well) does not, by itself, imply that this ligature should be suppressed. To wit, consider the German adjective \enquote{straff} and its associated forms straffe, straffer, straffen, etc.: the free morpheme in all of these words is |straff|, while the suffixes |e|, |er|, and |en| represent inflectional morphemes. Even though there's a syllable boundary between the two |f|s for all modified forms of the adjective straff, the ff-ligature is used for all forms because it doesn't span a \emph{morpheme} boundary. If TeX's hyphenation algorithm decides it needs to hyphenate the word straffen as s\kern0pt traf-fen to generate a good line break, it can do so\textemdash and break up the ligature in the process. There's no need, though, to break up a ligature pre-emptively just because the word might get hyphenated in the middle of the ligature. \subsection{Ligature suppression rules: English language case} -Typographic ligatures are suppressed selectively in the following cases: +Unless the |broadf| option is set (see below), typographic ligatures are suppressed as follows: \begin{itemize} -\item if two free morphemes are joined: \mbox{halfline} $\to$ halfline, \mbox{shelflife} $\to$ shelflife, \mbox{rooftop}~$\to$ rooftop, \mbox{halftone} $\to$ halftone, \mbox{wolftrap} $\to$ wolftrap, \mbox{houndstooth} $\to$ houndstooth, \mbox{arctan}\-gent~$\to$ arctangent, \mbox{newspaper}~$\to$ newspaper, \mbox{clothespin} $\to$ clothespin, \emph{se\mbox{as}trand} $\to$ \emph{seastrand}, etc. +\item if two free morphemes are joined: \uselig{halfline} $\to$ halfline, \uselig{shelflife} $\to$ shelflife, \uselig{rooftop}~$\to$ rooftop, \uselig{halftone} $\to$ halftone, \uselig{wolftrap} $\to$ wolftrap, \uselig{houndstooth} $\to$ houndstooth, \uselig{arctan}\-gent~$\to$ arctangent, \uselig{newspaper}~$\to$ newspaper, \uselig{clothespin} $\to$ clothespin, \emph{se\uselig{as}trand} $\to$ \emph{seastrand}, etc. -\item if a prefix (usually either a free or a derivational morpheme) and main word are joined: \mbox{offload} $\to$ offload, mi\mbox{st}rust~$\to$ mistrust, di\mbox{sp}lay~$\to$ display, etc. +\item if a prefix (usually either a free or a derivational morpheme) and main word are joined: \uselig{offload} $\to$ offload, \uselig{mistrust}~$\to$ mistrust, \uselig{display}~$\to$ display, etc. -\item if a main word and a suffix are joined, \emph{if} the suffix is a derivational morpheme that begins with an~f or an~l (other than \enquote{ly}): \mbox{shelfful}~$\to$ shelfful, \mbox{leafless} $\to$ leafless, \mbox{dwarflike}~$\to$ dwarflike, etc. +\item if a main word and a suffix are joined, \emph{if} the suffix is a derivational morpheme that begins with an~f or an~l (other than \enquote{ly}): \uselig{shelfful}~$\to$ shelfful, \uselig{leafless} $\to$ leafless, \uselig{dwarflike}~$\to$ dwarflike, etc. -\item The ft ligature is also suppressed in words that end in |fth|: \mbox{fifth}~$\to$ fifth, \mbox{twelfth}~$\to$ twelfth. Note that the particle |th| is a derivational morpheme. Moreover, in English the~|th| character pair is pronounced in a distinctive way. It thus seems inadvisable to obscure its presence with an ft ligature. +\item The ft ligature is also suppressed in words that end in |fth|: \uselig{fifth}~$\to$ fifth, \uselig{twelfth}~$\to$ twelfth. Note that the particle |th| is a derivational morpheme. Moreover, in English the~|th| character pair is pronounced in a distinctive way. It thus seems inadvisable to obscure its presence with an ft ligature. \end{itemize} -In addition, if the \opt{broadf} option is set, the \pkg{selnolig} package will suppress ligatures that arise if the main word ends in~f and the suffix starts with an~i, regardless of whether the suffix is a derivational or an inflectional morpheme: elfin, selfish, golfing, surfing, beefier, fluffily, goofiness, standoffish, jiffies, buffiest,~etc. Setting the \opt{broadf} option also instructs \pkg{selnolig} to split up ffi ligatures in words such as fluffiness and fluffily. Setting the \opt{broadf} option further suppresses fl and ffl ligatures in words such as chiefly, briefly, and gruffly as well as ft ligatures in words such as fifty and fiftieth. Without ligature enabled, these words would be typeset as chie\mbox{fl}y, brie\mbox{fl}y, gru\mbox{ffl}y, fi\mbox{ft}y, and fi\mbox{ft}ieth, respectively. +In addition, if the \opt{broadf} option is set, the \pkg{selnolig} package will +\begin{itemize} +\item suppress fi and ffi ligatures that arise if the main word ends in~f and the suffix starts with an~i, regardless of whether the suffix is a derivational or an inflectional morpheme: elfin, selfish, golfing, surfing, beefier, fluffily, goofiness, standoffish, jiffies, buffiest,~etc. Setting the \opt{broadf} option also instructs \pkg{selnolig} to split up ffi ligatures in words such as fluffiness and fluffily; +\item fl and ffl ligatures in words such as chiefly, briefly, and gruffly as well as ft ligatures in words such as fifty and fiftieth.\footnote{If the ligatures were not disabled, these words would be typeset as chie\uselig{fl}y, brie\uselig{fl}y, gru\uselig{ffl}y, fi\uselig{ft}y, and fi\uselig{ft}ieth, respectively.} +\end{itemize} Note that the option \opt{broadf} is \emph{not} enabled by default. This is because I believe that any gain in readability that might result from breaking up the f-ligatures caught by the rules enabled by the \opt{broadf} option would be minor and, importantly, outweighed by the visual clashes created by the unligated~f\kern0pt i, ff\kern0pt i, f\kern0pt l, and ff\kern0pt l glyphs. @@ -322,23 +329,23 @@ Note that the option \opt{broadf} is \emph{not} enabled by default. This is beca For German words, the following principles apply when it comes to deciding which ligatures to break up and which ones to permit. These rules are built mainly from statements found in the \emph{Duden} and various websites that have taken an interest in this subject, with adaptations for the ft and fft ligatures. \begin{itemize} -\item Case 1: Joining of two free morphemes. Ligatures are suppressed if they span two \emph{free} morphemes. Examples: Schil\mbox{fi}nsel $\to$ Schilfinsel, Zup\mbox{fi}nstrument $\to$ Zupfinstrument, Bausto\mbox{ffi}ngenieur $\to$ Baustoffingenieur, Wassersto\mbox{ffi}onen $\to$ Wasserstoffionen; Imp\mbox{ff}urcht $\to$ Impffurcht, Sen\mbox{ff}abrik $\to$ Senffabrik, Schor\mbox{ffl}ecken $\to$ Schorfflecken; Ablau\mbox{fl}ogik $\to$ Ablauflogik, fün\mbox{ffi}ngrig $\to$ fünffingrig; Brie\mbox{ft}aube $\to$ Brieftaube, Sto\mbox{fft}eil $\to$ Stoffteil, el\mbox{ft}eilig $\to$ elfteilig, etc. +\item Case 1: Joining of two free morphemes: Ligatures are suppressed if they span the boundary of two \emph{free} morphemes. Examples: Schil\uselig{fi}nsel $\to$ Schilfinsel, Zup\uselig{fi}nstrument $\to$ Zupfinstrument, Bausto\uselig{ffi}ngenieur $\to$ Baustoffingenieur, Wassersto\uselig{ffi}onen $\to$ Wasserstoffionen; Imp\uselig{ff}urcht $\to$ Impffurcht, Sen\uselig{ff}abrik $\to$ Senffabrik, Schor\uselig{ffl}ecken $\to$ Schorfflecken; Ablau\uselig{fl}ogik $\to$ Ablauflogik, fün\uselig{ffi}ngrig $\to$ fünffingrig; Brie\uselig{ft}aube $\to$ Brieftaube, Sto\uselig{fft}eil $\to$ Stoffteil, el\uselig{ft}eilig $\to$ elfteilig, etc. -\item Case 2: Joining of a prefix (whether a free or a derivational morpheme) ending in~|f| and a main word (free morpheme). Ligatures are suppressed in this case as well. In German, by far the most common prefix that gives rise to the need to suppress various f-ligatures is the word \enquote{auf}, as in aufbrechen, auffassen, Aufführung, auffliegen, auffischen, aufhören, aufisst, aufjaulen, aufklingen, Auflage, Auftrag, auftreten, etc. +\item Case 2: Joining of a prefix (whether a free or a derivational morpheme) ending in~|f| and a main word (free morpheme) starting with~|b|, |f|, |h|, |i|, |j|, |k|, |l|, or~|t|. Ligatures are suppressed in this case as well. In German, by far the most common prefix that gives rise to the need to suppress various f-ligatures is the word \enquote{auf}, as in aufbrechen, auffassen, Aufführung, auffliegen, auffischen, aufhören, aufisst, aufjaulen, aufklingen, Auflage, Auftrag, auftreten, etc. \item Case 3: Joining of a main word (free morpheme) ending in \enquote{f} or \enquote{ff} and a suffix (either a derivational or an inflectional morpheme) starting with \enquote{f}, \enquote{i}, \enquote{l}, or~\enquote{t}. \begin{itemize} -\item Case 3a: Suffixes that start with an \enquote{f}, e.g., |-fach| and |-faltig|; these are generally derivational morphemes. Examples: fünffach and zwölffaltig. The ff-ligature should be suppressed. +\item Case 3a: Suffixes that start with an \enquote{f}, e.g., |-fach| and |-faltig|. Examples: fünffach and zwölffaltig. The ff-ligature should be suppressed. \item Case 3b: Suffixes that start with an \enquote{i}, such |-ig|, |-in|, and |-isch|; these suffixes can be either derivational or inflectional morphemes. Examples: streifig, äffisch, Chefin, Chefinnen. The fi and ffi ligatures should \emph{not} be suppressed. -I haven't found a clear justification for this rule so far. I assume it is there because unligated f\breaklig i pairs may be sufficiently unsightly as to constitute an infraction against good typography that's even more grievous than having fi and ffi ligatures span the boundary between a main word and a suffix. +I haven't found a clear justification for this rule so far. I assume it is there because unligated f\breaklig i character pairs may be sufficiently unsightly as to constitute an infraction against good typography that's even more grievous than having fi and ffi ligatures span the boundary between a main word and a suffix. \item Case 3c: Suffixes (free or bound morphemes) that start with an \enquote{l}, e.g., |-lich|, |-ling|, |-lein| and |-los|. Example words: trefflich, höflich, Prüfling, Köpflein, and s\breaklig traflos. The fl-ligature is suppressed in all of these instances. -\item Interlude I: In ambiguous cases that could give rise to fl-ligatures that involve certain suffixes, preference should be given\textemdash according to \emph{Duden}\textemdash to \enquote{how the syllables are pronounced and how a word would be hyphenated}, leading to a suppression of the fl-ligature. For instance, the fl-ligature is suppressed in Verzweif\-lung, Bezweifler, schweflig, and würflig; note that the \enquote{true} suffixes in these words are |-ung|, |-er|, and |-ig|, respectively, rather than |-lung|, |-ler|, and |-lig|.\footnote{% +\item Interlude I: In ambiguous cases that could give rise to fl-ligatures that involve certain suffixes, preference should be given\textemdash according to \emph{Duden}\textemdash to \enquote{how the syllables are pronounced and how a word would be hyphenated}, leading to a suppression of the fl-ligature. For instance, the fl-ligature is suppressed in Verzweif\-lung, Bezweifler, schweflig, and würflig; note that the real suffixes in these words are |ung|, |er|, and |ig|, respectively, rather than |lung|, |ler|, and |lig|.\footnote{% In my opinion, the rationale given for the suppression of the fl-ligature in these cases\textemdash reliance on how the syllables are divided and how the composite words are hyphenated\textemdash is not entirely satisfactory because, morphologically speaking, the words Schwefel, Würfel, Zweifel, etc.\ contain two morphemes: a stem and the \emph{derivational} morpheme~|el|: \Verb+Schwef|el+, \Verb+Würf|el+, and \Verb+Zweif|el+, etc. It is therefore not necessary, in my opinion, to create a separate rule to justify the (non-)use of the fl-ligature in these cases. One could, instead, rely on the presence of two morphemes to motivate the suppression of the fl-ligature for words such as schweflig, teuflisch, würfle, and Verzweiflung, as their components are \Verb+schwef|[e]l|ig+, etc. However, I believe it's fair to say that most modern German speakers would barely be aware of the fact that the |el| particle constitutes a separate morpheme in words such as Würfel and Griffel, and that they would be entirely unaware of its presence in words such as Schwefel and Zweifel. At any rate, the typographical convention \emph{not} to use the fl-ligature in words such as schweflig, Verzweiflung, and würflig does \emph{not} appear to be based on the fact that letters~f and~l in these words belong to different morphemes.} This convention may also be applied to justify the non-use of the fl-ligature in words such as knifflig and mufflig as well as in the present-tense/first-person-singular forms of verbs such as büffeln, löffeln, schaufeln, stiefeln, verteufeln, and zweifeln: they are typeset \emph{without} the fl-ligature, i.e., as büffle, löffle, schaufle, stiefle, verteufle, and zweifle, respectively. @@ -352,13 +359,13 @@ This convention further suggests (implies?) that it's permissible (a)~to use the \item Case 3d: Word stem (free morpheme) ending in~|f| and derivational or inflectional morphemes starting with~|t|. Unfortunately, not much official wisdom seems to exist to guide this case, possibly because in German ft and~fft ligatures are not (yet?) used as widely as are the other f-ligatures. The following rules should thus be understood to be somewhat provisional. \begin{itemize} -\item The convention mentioned in \enquote{Interlude II} above, about not breaking up an fl-ligature if it occurs at the very end of a word, may be adapted to the case of~ft and~fft ligatures: these ligatures are allowed \emph{if} they occur at the very ends of words (and at the ends syllables), as in verschärft, gestreift, gerafft, Dahingerafftsein, unbedarft, and Unbedarftheit. Note that in these cases, the ft and fft ligatures do span a morpheme boundary: the letter~|t| is an \emph{inflectional} morpheme that indicates a form of conjugation of the associated verb (viz., past tense and/or past participle). +\item The convention mentioned in \enquote{Interlude II} above, about not breaking up an fl-ligature if it occurs at the very end of a word, may be adapted to the case of~ft and~fft ligatures: these ligatures are allowed \emph{if} they occur at the very ends of words (and at the ends syllables), as in verschärft, gestreift, gerafft, Dahingerafftsein, unbedarft, and Unbedarftheit. Note that in these cases, the ft and fft ligatures \emph{do} span a morpheme boundary: the letter~|t| is an \emph{inflectional} morpheme that indicates a form of conjugation of the associated verb (viz., past tense and/or past participle). \item Should ft and fft ligatures be broken up in the past-tense and past-participle forms of verbs that do not end in~ft but, rather, in -fte, -ften, -ftes, -ftest, etc? Example words: |streifte|, |schlürftest|, and |rafften|. Because these suffixes are merely \emph{inflectional} rather than derivational morphemes, the \pkg{selnolig} package takes the approach of \emph{not} breaking up the~ft and~fft ligatures in these cases. Thus, the words will be typset as streifte, schlürftes\kern0pt t, and rafften rather than as streif\breaklig te, schlürf\breaklig tes\kern0pt t, and raff\breaklig ten.\footnote{I will concede, again, that I haven't yet come across any kind of authoritative discussion of this issue. Should someone be able to furnish a good counterargument to the setting proposed here, I would be happy to change it.} -\item It would also seem OK to use the ft-ligature in expressions such as \enquote{zu fünft} and \enquote{die zwölftschnells\kern0pt te Sprinterin Bayerns}: even though the |t| character now represents a derivational morpheme, the ligature occurs at end of the word or word fragment. In the case of the word \enquote{zwölftschnells\breaklig te}, the argument for keeping the ft ligature is based on the observation that the entire fragment \enquote{zwölft} serves a prefix to \enquote{schnells\kern0pt te}. +\item It would also seem OK to use the ft-ligature in expressions such as \enquote{zu fünft} and \enquote{die zwölftschnells\kern0pt te Sprinterin Bayerns}: even though the |t| character represents a derivational morpheme, the ligature occurs at \emph{end} of the word or word fragment. In the case of the word \enquote{zwölftschnells\breaklig te}, the argument for keeping the ft ligature is based on the observation that the entire fragment \enquote{zwölft} serves a prefix to \enquote{schnells\kern0pt te}. -In contrast, the ft-ligature should \emph{not} be used in \enquote{Beethoven's Fünfte Synphonie} and \enquote{zum elften Mal}. Observe that the argument in favor of breaking up the ft-ligature in the words \enquote{Fünfte} and \enquote{elften} is \emph{not} related to the fact that the words happen to have two syllables and that the syllables are divided between the letters~|f| and~|t|. +In contrast, the ft-ligature should \emph{not} be used in \enquote{Beethoven's Fünfte Sinfonie} and \enquote{zum elften Mal}. Observe that the argument in favor of breaking up the ft-ligature in the words \enquote{Fünfte} and \enquote{elften} is \emph{not} related to the fact that the words happen to have two syllables and that the syllables are divided between the letters~|f| and~|t|. \end{itemize} @@ -379,7 +386,8 @@ The \pkg{selnolig} package has the following components: \item The ligature suppression rules for English and German language documents are contained in the files \pkg{selnolig-english-patterns.sty} and \pkg{selnolig-english-patterns.sty}. \item Supplemental hyphenation exception patterns, mostly for composite words that involve ligatures that are suppressed by the package's \cmmd{nolig} rules, are contained in the files \pkg{selnolig-english-hyphex.sty} and \pkg{selnolig-english-hyphex.sty}. \item The user guide\textemdash the document you're reading right now\textemdash is provided in the file \pkg{selnolig.pdf}; the associated source code is in the file \pkg{selnolig.tex}. -\item Ancillary files: the files \pkg{selnolig-english-test.tex} and \pkg{selnolig-german-test.tex} load the \pkg{selnolig} package as well as either \pkg{selnolig-english-wordlist.tex} or \pkg{selnolig-german-wordlist.tex}. They serve to demonstrate the output of the \pkg{selnolig} package when run on lists of English or German words that are candidates for non-use of ligatures. The files \pkg{selnolig-english-test.pdf} and \pkg{selnolig-german-test.pdf} contain the results of compiling the test programs.\footnote{The two \enquote{test} files also load the package \pkg{showhyphens} to indicate automatically all instances where \LuaLaTeX\ might insert hyphenation points.} +\item Ancillary files: the files \pkg{selnolig-english-test.tex} and \pkg{selnolig-german-test.tex} load the \pkg{selnolig} package as well as either \pkg{selnolig-english-wordlist.tex} or \pkg{selnolig-german-wordlist.tex}. They serve to demonstrate the output of the \pkg{selnolig} package when run on lists of English or German words that are candidates for non-use of ligatures. The files \pkg{selnolig-english-test.pdf} and \pkg{selnolig-german-test.pdf} contain the results of compiling the test programs. +Assuming your \TeX\ distribution is either \TeX Live or MiK\TeX, you can access these files by typing \Verb+texdoc selnolig-english-test+ or \Verb+texdoc selnolig-german-test+ at a command prompt. \end{itemize} @@ -388,22 +396,20 @@ The \pkg{selnolig} package has the following components: The file \pkg{selnolig.sty} should be loaded with a \cmmd{usepackage} statement, generally with one or more options; see \cref{sec:options} for a discussion of the available options. -After setting up several Boolean switches to structure the processing of options, the package next loads the file \pkg{selnolig.lua}, which contains the package's lua code. The package then sets up several user macros. The three main user macros are \cmmd{nolig}, \cmmd{keeplig}, and \cmmd{breaklig}. +After setting up several Boolean switches to structure the processing of options, the package loads the file \pkg{selnolig.lua}, which contains the package's lua code. The package then sets up several user macros. The four main user macros are \cmmd{nolig}, \cmmd{keeplig}, \cmmd{uselig}, and \cmmd{breaklig}; the first two are meant to be used on a document-wide basis, while the latter two should be used to meet \emph{ad~hoc} typesetting needs. \subsubsection{The \cmmd{nolig} macro} \label{sec:nolig} -\enlargethispage{0.3\baselineskip} - -The package's main user macro is called \cmmd{nolig}. Each \cmmd{nolig} instruction, or rule, takes two arguments: a search string and a string that indicates the insertion point for the \enquote{non-ligation whatsit}. For example, the rule +The package's main user macro is called \cmmd{nolig}. Each \cmmd{nolig} instruction, or rule, takes two arguments: a search string and a string that indicates where the non-ligation \enquote{whatsit} should be inserted. E.g., the rule \begin{Verbatim} \nolig{lfful}{lf|ful} \end{Verbatim} -instructs \LuaLaTeX\ to suppress automatically the ff-ligature in words such as \enquote{shelfful}, \enquote{bookshelfful}, and \enquote{selffulfilling}. +suppresses the ff-ligature in words such as \enquote{shelfful}, \enquote{bookshelfful}, and \enquote{selffulfilling}. -More than one ligature suppression point may be provided in the second argument of a \cmmd{nolig} rule. For instance, one \emph{could} specify the rule \Verb+\nolig{Auflaufform}{Auf|lauf|form}+ to suppress both the fl- and the ff-ligature in the word Auflaufform (and its plural form, Auflaufformen). For added flexibility, though, the \pkg{selnolig} package actually uses two separate rules to suppress the two ligatures in this word; see also \cref{sec:debugon}. +It is possible to indicate more than one ligature suppression point in the second argument of a \cmmd{nolig} rule. For instance, one \emph{could} specify the rule \Verb+\nolig{Auflaufform}{Auf|lauf|form}+ to suppress both the fl- and the ff-ligature in the word Auflaufform (and its plural form, Auflaufformen). For added flexibility, though, the \pkg{selnolig} package actually uses two separate rules to suppress the two ligatures in this word; see also \cref{sec:debugon}. It is possible to use Lua-style wildcard characters in the search string, as long as these characters occur \emph{after} the non-ligation point. For example, the file \pkg{selnolig-german-patterns.sty} employs the rules @@ -445,33 +451,42 @@ Probably somewhat surprisingly, at least at first glance, it is \emph{not necess \end{Verbatim} Observe that because the string |aufl| is \emph{not} a subset of the string |flicht|, the rule |\keeplig{flicht}| does not undo the action of the rule \Verb+\nolig{aufl}{auf|l}+. Hence, the word |Lauflicht| happily ends up being typeset as Lauflicht, i.e., \emph{without} an fl-ligature. -Interestingly, the rule |\keeplig{flicht}| is a bit too broad as well, as it also catches the word \opt{Sumpf\-licht}, for which the fl-ligature \emph{should} in fact be suppressed. To address this situation, the file \pkg{selnolig-german-patterns.sty} also provides the rule -\Verb+\nolig{Sumpfl}{Sumpf|l}+. This rule suppresses the fl-ligature for Sumpflicht as well as for Sumpflabkraut and Sumpfleiche (and the plural forms of these nouns). +Interestingly, the rule |\keeplig{flicht}| is a bit too broad as well, as it also catches the word \opt{Sumpf\-licht}, for which the fl-ligature \emph{should} in fact be suppressed (since the word is composed of two free morphemes, Sumpf and Licht). To address this situation, the file \pkg{selnolig-german-patterns.sty} also provides the rule \Verb+\nolig{Sumpfl}{Sumpf|l}+. This rule suppresses the fl-ligature for Sumpflicht as well as for Sumpflabkraut and Sumpfleiche (and the plural forms of these nouns). + + +\subsubsection{The \cmmd{uselig} macro} +\label{sec:uselig} + +The \pkg{selnolig} package further provides the user command \cmmd{uselig}. It acts much like the \cmmd{keeplig} command, but serves to override the action of a \cmmd{nolig} rule purely on a one-off basis. E.g., the command \Verb+\uselig{fj}+ will typeset \enquote{\uselig{fj}} even though the rule \Verb+\nolig{fj}{f|j}+ is active; \emph{without} \cmmd{uselig}, you'd get \enquote{fj}. + +You should use \cmmd{uselig} instructions only for words and word fragments, but not for longer stretches of text. If you need to suspend the operation of the ligature suppression macros for longer stretches, including entire paragraphs or more, you should use the macros \cmmd{selnoligoff} and \cmmd{selnoligon}, which are described in more detail in \cref{sec:selnoligon}. \subsubsection{The \cmmd{breaklig} macro} \label{sec:breaklig} -The macro \cmmd{breaklig}, which doesn't take an argument, is provided as a hopefully easy-to-remember version of the lower-level \LaTeX\ command ``\Verb+\-\hspace{0pt}+''. You should insert this macro in places where you want to break up a ligature on an ad-hoc basis and also wish to permit hyphenation to occur at that point. (To suppress a ligature on an ad-hoc basis \emph{without} introducing a hyphenation break point, insert the instruction \enquote{\cmmd{kern0pt}}.) For instance, to suppress the {\ebg\emph{sk}} ligature in the word \Verb+groundskeeper+ on a one-off basis, one might enter it as \enquote{\Verb+grounds\textbackslash breaklig keeper+} to get \emph{\ebg groundskeeper} instead of \emph{\ebg ground\mbox{sk}eeper}.\footnote{To suppress the {\ebg \emph{sk}} ligature for this word, as well as for words such as \emph{\ebg greenskeeper} and \emph{\ebg miskeep}, everywhere in the document, one could issue the directive \Verb+\nolig{skeep}{s|keep}+. The \pkg{selnolig} package provides just such a rule.} +The macro \cmmd{breaklig}, which doesn't take an argument, is provided as a hopefully easy-to-remember version of the lower-level \LaTeX\ command ``\Verb+\-\hspace{0pt}+''. You should insert this macro in places where you want to break up a ligature on an ad-hoc basis and also wish to permit hyphenation. (To suppress a ligature on an ad-hoc basis \emph{without} introducing a potential hyphenation point, insert the instruction \enquote{\cmmd{kern0pt}}.) For instance, to suppress the {\ebg\emph{sk}} ligature in the word \Verb+groundskeeper+ on a one-off basis, one might enter it as \enquote{\Verb+grounds\textbackslash breaklig keeper+} to get \emph{\ebg groundskeeper} instead of \emph{\ebg \uselig{groundskeeper}}.\footnote{To suppress the {\ebg \emph{sk}} ligature for this word as well as for words such as \emph{\ebg greenskeeper} and \emph{\ebg miskeep} everywhere in the document, one could issue the directive \Verb+\nolig{skeep}{s|keep}+; the \pkg{selnolig} package provides just such a rule.} -The \pkg{selnolig} package does not provide a dedicated user command to override the action of a \cmmd{nolig} rule on an ad~hoc basis, i.e., to \emph{require} the use of a typographic ligature on a one-off basis. The \LaTeX\ kernel command \Verb+\mbox{<string>}+ already provides this capability. \subsection{Further steps in the package's startup process} -After the user commands of the \pkg{selnolig} have been set up, the remaining steps in the package's startup process depend on which language-related options are set: +After the user commands of the \pkg{selnolig} package have been set up, the remaining steps in the package's startup process depend on which language-related options, if any, were selected: \begin{itemize} -\item If \emph{no} language-specific options are in effect, the setup process terminates. Users may, of course, still provide their own \cmmd{nolig} and \cmmd{keeplig} rules and insert \cmmd{breaklig} instructions as deemed necessary. +\item If \emph{no} language-specific options are in effect, the setup process terminates. Users may, of course, still provide their own \cmmd{nolig} and \cmmd{keeplig} rules and insert \cmmd{uselig} and \cmmd{breaklig} instructions as needed. \item If the \opt{english} option (or one of its synonymous options) is set, the files \pkg{selnolig-english-patterns.sty} and \pkg{selnolig-english-hyphex.sty} are loaded. The former file contains a detailed list of \cmmd{nolig} and \cmmd{keeplig} rules adapted to English language typographic usage; \Cref{sec:eng-listing} provides a complete listing of these rules. The latter file contains a list of hyphenation exceptions, mainly for words that contain one or more potential non-ligation points and for which \TeX's hypenation algorithm either misses valid hyphenation points or selects invalid hyphenation points; see \cref{sec:addlhyph} below. \item If the \opt{ngerman} option (or one of its synonymous options) is set, the files \pkg{selnolig-german-patterns.sty} and \pkg{selnolig-german-hyphex.sty} are loaded. The former file contains ligature suppression rules appropriate for German typographic usage; \cref{sec:germ-listing} lists its contents. The latter file provides additional hyphenation rules for German-language words. -\item If the user specifies both the \opt{english} and \opt{ngerman} options (or some of their synonymous options), \emph{both} language-specific style files will be loaded. Under normal circumstances, a user will probably want to load only one or the other set of language-specific files, but not both sets. +\item If the user specifies both the \opt{english} and \opt{ngerman} options (or some of their synonymous options), \emph{both} language-specific style files will be loaded. Under normal circumstances, a user will probably want to load only one or the other set of language-specific files, but not both. \end{itemize} +Here's an (admittedly imperfect) indication of just how much more complex the task is of creating a set of ligature suppression rules for German than it is for English: As of the mid-May 2013 version of the \pkg{selnolig} package, the \enquote{basic} set of English language ligature suppression rules for \enquote{common} f-ligatures consists of 32 \cmmd{nolig} and 17 \cmmd{keeplig} directives.\footnote{Including the rules that are activated if the |broadf| and |hdlig| options are both activated, the tally rises to about 420 \cmmd{nolig} and 52 \cmmd{keeplig} instructions.} In contrast, the set of German language ligature suppression rules for the \enquote{common} f-ligatures consists of roughly 700 \cmmd{nolig} and 335 \cmmd{keeplig} directives. + + \section{Additional ligature-related matters} @@ -487,7 +502,12 @@ The \pkg{selnolig} package currently offers two main language-specific options: \end{itemize} These language options may be used either individually or jointly. Indeed, this user guide was compiled with both the \opt{english} and \opt{ngerman} options set. -The ligature suppression rules associated with English and German are listed in \cref{sec:eng-listing,sec:germ-listing}, respectively.\footnote{To give an admittedly imperfect impression of just how much more complex the task is to create ligature suppression rules for German rather than it is for English: As of the mid-May 2013 version of the package, the \enquote{basic} English f-ligature suppression rules consist of 32 \cmmd{nolig} and 17 \cmmd{keeplig} rules. (Including the rules that are activated if the |broadf| and |hdlig| options are both activated, the tally rises to about 420 \cmmd{nolig} and 52 \cmmd{keeplig} instructions.) The file \pkg{selnolig-german-patterns.sty}, in contrast, contains about 700 \cmmd{nolig} and 335 \cmmd{keeplig} directives. Recall that the package currently provides rules only for a set of \enquote{basic} f-ligatures for German words.} +The English and German ligature suppression rules are listed in \cref{sec:eng-listing,sec:germ-listing}, respectively. + + +\subsection{The \opt{noftligs} option} + +By default, the \pkg{selnolig} package will load rules to suppress ft and fft ligatures selectively, for both English and German documents. In case you want to suppress these two ligatures \emph{globally} rather than selectively, you could specify the option \opt{noftligs} when loading the package. Doing so will make the package set up the simple rule \Verb+\nolig{ft}{f|t}+.\footnote{Especially for the German language case, suppressing ft and fft ligatures \emph{globally} will also speed up compilation, as the package will have roughly 180 \cmmd{nolig} and 60 \cmmd{keeplig} instructions fewer to load!} @@ -495,27 +515,28 @@ The ligature suppression rules associated with English and German are listed in The ligature suppression patterns for English language words, contained in the file \pkg{selnolig-english-patterns.sty} and listed in \cref{sec:eng-listing} below, are grouped into four parts. The first two parts concern the suppression of f-ligatures. Part~1 provides a fairly limited, or \enquote{basic}, set of patterns that will always be executed, and Part~2 contains a broader set of ligation suppression rules that will be executed if the \opt{broadf} option is specified. -For English-language documents, only a fairly limited number of f-ligature suppression rules is enabled by default, i.e., if the \opt{broadf} option is not enabled. Eliminating \emph{all} f-ligatures that cross morpheme boundaries simply does not appear to be a major concern in English-language typography. Whereas many (maybe most?) people would agree that it's advisable not to use the ffi-ligature in words such as chaffinch and wolffish, and not to use the ffl-ligature in words such as scofflaw and offload, there appears to be far less of a perceived need to suppress the~fi (ffi) ligature in the far more commonly occurring words that end in~f (ff\,) followed by the particles -ing, -ish, -ier, -iest, -ily, and -iness.\footnote{Examples of such words are sur\mbox{fi}ng, oa\mbox{fi}sh, lea\mbox{fi}er, goo\mbox{fi}est, flu\mbox{ffi}ly, and goo\mbox{fi}ness.} The same goes for the~fl (ffl) ligature in words that end in~f (ff) followed by~-ly.\footnote{Examples are \mbox{aloofly} and \mbox{gruffly}.} That is why only a few f-ligature suppression rules are enabled by default if the \opt{english} option is set. To enable the broader set of f-ligature suppression rules, users must set the \opt{broadf} option explicitly. +For English-language documents, only a fairly limited number of f-ligature suppression rules is enabled by default, i.e., if the \opt{broadf} option is not enabled. Eliminating \emph{all} f-ligatures that cross morpheme boundaries simply does not appear to be a major concern in English-language typography. Whereas many (maybe most?) people would agree that it's advisable not to use the ffi-ligature in words such as chaffinch and wolffish, and not to use the ffl-ligature in words such as scofflaw and offload, there appears to be much less of a perceived need to suppress the~fi (ffi) ligature in the far more commonly occurring words that end in~f (ff\,) followed by the particles -ing, -ish, -ier, -iest, -ily, and -iness.\footnote{Examples of such words are \uselig{surfing}, \uselig{oafish}, \uselig{leafier}, \uselig{goofiest}, \uselig{fluffily}, and \uselig{goofiness}. With the \opt{broadf} option set, these words will be typeset as surfing, oafish, leafier, goofiest, fluffily, and goofiness.} The same goes for the~fl (ffl) ligature in words that end in~f (ff) followed by~-ly.\footnote{Examples are \uselig{aloofly} and \uselig{gruffly}; with the \opt{broadf} option set, these words will be typeset as aloofly and gruffly.} That is why only a few f-ligature suppression rules are enabled by default if the \opt{english} option is set. To enable the broader set of f-ligature suppression rules, users must set the \opt{broadf} option explicitly. My choices regarding which f-ligature suppression rules belong to the \enquote{basic} and \enquote{broadf} groups are almost entirely pragmatic. They are certainly not based on any overriding English-language typographic principles (which, possibly, don't even exist). However, if anyone happens to have a strong view on whether either \emph{fewer} or \emph{more} f-ligature suppression rules should be included in the \enquote{basic} group\textemdash especially if you can provide references to such discussions in learned circles\textemdash I would love to hear from you. -Part 3 of the file \pkg{selnolig-english-patterns.sty}, which is enabled if the \opt{hdlig} option is set, provides ligature suppression patterns involving the \mbox{ct}, \mbox{st}, and \mbox{sp} ligatures. Examples are words such as arctangent (rather than ar\mbox{ct}angent), painstaking (rather than pain\mbox{st}aking), and trespass (worse: tre\mbox{sp}ass). Furthermore, the~st and~sp ligatures are suppressed automatically for words of Greek roots that contain the \opt{sth} and \opt{sph} character triples, such as anaesthesia, isthmus, atmosphere and hemisphere. In such cases, I'd argue that using the distinctive-looking st and sp ligatures unnecessarily obscures the \opt{th} and \opt{ph} character pairs (which derive from the single Greek letters~$\theta$/$\vartheta$ and $\phi$/$\varphi$, respectively). Given that the \opt{ph} character pair is usually pronounced as~\enquote{\opt{f}}, the readability of the words that contain the character triple \opt{sph} would likely suffer if they were typeset \emph{with} an sp ligature, e.g., as atmo\mbox{sp}here and \mbox{sp}herical, say. +Part 3 of the file \pkg{selnolig-english-patterns.sty}, which is enabled if the \opt{hdlig} option is set, provides ligature suppression rules for the ct, st, and sp ligatures. Examples are words such as arctangent (rather than \uselig{arctangent}), painstaking (rather than \uselig{painstaking}), and trespass (worse: \uselig{trespass}). The~st and~sp ligatures are also suppressed automatically for words with Greek roots that contain the \opt{sth} and \opt{sph} character triples, such as anaesthesia, isthmus, atmosphere and hemisphere. In such cases, I'd argue that using the distinctive-looking st and sp ligatures unnecessarily obscures the \opt{th} and \opt{ph} character pairs (which derive from the single Greek letters~$\theta$/$\vartheta$ and $\phi$/$\varphi$, respectively). Given that the \opt{ph} character pair is usually pronounced as~\enquote{\opt{f}}, I~contend that the readability of words that contain the character triple \opt{sph} would suffer considerably if they were typeset \emph{with} an~sp ligature, e.g., as \uselig{atmosphere} and \uselig{spherical}. -Setting the \opt{hdlig} option also enables ligature suppression rules for additional discretionary ligatures such as \emph{th}, \emph{at}, and~\emph{et}. These ligatures might be deemed inappropriate for use in words such as \emph{ligh\mbox{th}ouse}, \emph{po\mbox{th}ole}, \emph{arom\mbox{at}herapy}, \emph{alb\mbox{at}ross}, \emph{nin\mbox{et}y}, and \emph{non\mbox{et}heless}; with the \opt{hdlig} option set, these words will be typeset as \emph{lighthouse}, \emph{pothole}, \emph{aromatherapy}, \emph{albatross}, \emph{ninety}, and \emph{nonetheless}. Ligature suppression rules are provided for the following discretionary ligatures, which occur only in the \emph{italic} font shape of the font family used in this document: \emph{th}, \emph{at}, \emph{et}, \emph{as}, \emph{is}, \emph{us}, {\ebg \emph{sk}}, \emph{ll}, and~\emph{fr}. Part~3 of \cref{sec:eng-listing} lists these rules. +Setting the \opt{hdlig} option also enables ligature suppression rules for additional discretionary ligatures such as \emph{th}, \emph{at}, and~\emph{et}. These ligatures might be deemed inappropriate for use in words such as \emph{\uselig{lighthouse}, \uselig{pothole}, \uselig{aromatherapy}, \uselig{albatross}, \uselig{ninety}, \emph{and} \uselig{nonetheless}}. With the \opt{hdlig} option set, these words will be typeset as \emph{lighthouse}, \emph{pothole}, \emph{aromatherapy}, \emph{albatross}, \emph{ninety}, and \emph{nonetheless}. Ligature suppression rules are provided for the following discretionary ligatures, which occur only in the \emph{italic} font shape of the font family used in this document: \emph{th}, \emph{at}, \emph{et}, \emph{as}, \emph{is}, \emph{us}, {\ebg \emph{sk}}, \emph{ll}, and~\emph{fr}. Part~3 of \cref{sec:eng-listing} lists these rules. -Part 4 of the file \pkg{selnolig-english-patterns.sty}, which is also processed if the \opt{hdlig} option is set, deals with cases where one discretionary typographic literature, say \emph{as}, might pre-empt the use of a more appropriate but trailing typographic ligature, say \emph{st} or~\emph{sp}, in words such as \emph{f\mbox{as}t}~$\to$ \emph{fa\mbox{st}} and \emph{cl\mbox{as}p}~$\to$ \emph{cla\mbox{sp}}. Note that the issue being addressed in this part is not that of a ligature improperly spanning a morpheme boundary; instead, it is the possibility that \TeX\ might pre-empt one typographic ligature with another ligature within one and the same morpheme. This issue is discussed in more detail in \cref{sec:preempt} below. +Part 4 of the file \pkg{selnolig-english-patterns.sty}, which is also processed if the \opt{hdlig} option is set, deals with cases where one discretionary typographic literature, say \emph{as}, might pre-empt the use of a more appropriate but trailing typographic ligature, say \emph{st} or~\emph{sp}, in words such as \emph{f\uselig{as}t}~$\to$ \emph{fast} and \emph{cl\uselig{as}p}~$\to$ \emph{clasp}. Note that the issue being addressed in this part is not that of a ligature improperly spanning a morpheme boundary; instead, it is the possibility that \TeX\ might pre-empt one typographic ligature with another ligature within one and the same morpheme. This issue is discussed in more detail in \cref{sec:preempt} below. \subsection{Composite words with ambiguous morphology} There may be pairs of composite words which look alike but are made up of two different pairs of morphemes. For instance, the German words \opt{Saufladen} and \opt{Wachstube} may be constructed as \opt{Sauf-laden}\slash \opt{Sau-fladen} and as \opt{Wachs-tube}\slash \opt{Wach-stube}, respectively. In one case, using the fl and st ligatures would be wrong; in the other, using the ligatures would help greatly in indicating the intended meaning of the composite words. -For words such as these, software isn't smart enough to \enquote{discern} which possible meaning is intended.\footnote{It turns out that if the \opt{ngerman} option is set and the \pkg{babel} package is loaded as well, the \opt{selnolig} package will break up the fl ligature in \opt{Saufladen} but not the st ligature in \opt{Wachstube}, i.e., the words will be typeset as \enquote{Saufladen} and \enquote{Wachstube}, respectively. If that's \emph{not} what you want, you'll need to mark up the words explicitly, say as follows: \Verb+Sau\mbox{fl}aden+ and \Verb+Wachs\breaklig tube+. } Writers, of course, could (and should?) choose to insert explicit hyphen characters to indicate the intended meaning. +For words such as these, software isn't smart enough to \enquote{discern} which possible meaning is intended.\footnote{It turns out that if the \opt{ngerman} option is set and the \pkg{babel} package is loaded as well, the \opt{selnolig} package will break up the fl ligature in \opt{Saufladen} but not the st ligature in \opt{Wachstube}, i.e., the words will be typeset as \enquote{Saufladen} and \enquote{Wachstube}, respectively. If that's \emph{not} what you want, you'll need to mark up the words explicitly as follows: \Verb+\uselig{Saufladen}+ and \Verb+Wachs\breaklig tube+.} +Writers, of course, could (and should?) choose to insert explicit hyphen characters to indicate the intended meaning. The preceding two examples involve pairs of free morphemes in both cases. Here's a composite word where one possible meaning involves a free morpheme and an inflectional morpheme (indicating the past-tense use of the verb), whereas the other meaning involves two free morphemes: \opt{Surftest}. Consider the questions, \enquote{Surftes\kern0pt t Du vergangene Woche in Hawaii?}, and \enquote{Hat die Athletin den Surf\breaklig tes\kern0pt t bes\kern0pt tanden?} Only in the second case is it clearly wrong to use the ft-ligature. An even more complicated example is the word \opt{Chefinnenleben}, which contains three morphemes. This word can be deconstructed either as \opt{Chefinnen-leben} (\enquote{lives of female bosses}) \emph{or} as \opt{Chef-innenleben} (\enquote{inner life, or lives, of a boss}). Thus, the word's middle particle\textemdash\enquote{innen}\textemdash can function both as a suffix (in this case, an inflectional morpheme) to \enquote{Chef} and as a free morpheme that modifies the third morpheme, \enquote{Leben}. Software isn't smart enough yet to discern on its own which usage is intended. -The rules of the \pkg{selnolig} package are set \emph{not} break up the fi-ligature in the shorter words Chefin and Chefinnen, in keeping with the principle that the fi-ligature is permitted for suffixes that start with an~\enquote{i}. In contrast, \pkg{selnolig} will break up the fi-ligature in the longer words Chefinnenleben and Chefinnenräume, because in these cases the working assumption is that \opt{innen} acts as a prefix of sorts to the third morpheme (Leben or Räume). If this is \emph{not} what you want, i.e., if you really do mean to refer to lives or spaces of female bosses, be sure to use \Verb+\mbox{fi}+ instructions to preserve the fi-ligatures. Better yet: write the words in question using explicit hyphens, i.e., as Chefinnen-Leben and Chefinnen-Räume. And, while you're at it, do consider writing the other forms as Chef-Innenleben and Chef-Innenräume. Your readers will thank you. +The rules of the \pkg{selnolig} package are set \emph{not} break up the fi-ligature in the shorter words Chefin and Chefinnen, in keeping with the principle that the fi-ligature is permitted for suffixes that start with an~\enquote{i}. In contrast, \pkg{selnolig} will break up the fi-ligature in the longer words Chefinnenleben and Chefinnenräume, because in these cases the working assumption is that \opt{innen} acts as a prefix of sorts to the third morpheme (Leben or Räume). If this is \emph{not} what you want, i.e., if you really do mean to refer to lives or spaces of female bosses, be sure to use \Verb+\uselig{fi}+ instructions to preserve the fi-ligatures. Better yet: write the words in question using explicit hyphens, i.e., as Chefinnen-Leben and Chefinnen-Räume. And, while you're at it, do consider writing the other forms as Chef-Innenleben and Chef-Innenräume. Your readers will thank you. Summing up: There are words for which it's not possible to decide without knowledge of the context within which the word is used whether or not a given ligature should be enabled or suppressed. The best advice I can give is to stay on the lookout for such words and to take corrective action if you believe \pkg{selnolig}'s choice is the wrong one. @@ -523,7 +544,7 @@ Summing up: There are words for which it's not possible to decide without knowle \subsection{How to provide additional ligature suppression patterns} -As already noted, it's not possible to claim that the non-ligation rules provided in \pkg{selnolig-english-patterns.sty} and \pkg{selnolig-german-patterns.sty} are complete or, for that matter, will \emph{ever} be complete. If you come across words containing ligatures that ought to be suppressed but aren't caught (yet) by the \pkg{selnolig} package, you could insert \cmmd{breaklig} instructions to suppress the ligatures on a case-by-case basis; conversely, if you discover an instance for which \pkg{selnolig} improperly breaks up a ligature, you could override that action by encasing the character pair (or triple) in an \cmmd{mbox} statement. Alternatively, you could create your owb \cmmd{nolig} and \cmmd{keeplig} rules to deal with the cases you've discovered on a document-wide basis.\footnote{A third option, naturally, is to bring this case to the attention of the maintainer of the \pkg{selnolig} package and ask him/her to update the package\dots} +As already noted, it's not possible to claim that the non-ligation rules provided in \pkg{selnolig-english-patterns.sty} and \pkg{selnolig-german-patterns.sty} are complete or, for that matter, will \emph{ever} be complete. If you come across words containing ligatures that ought to be suppressed but aren't caught (yet) by the \pkg{selnolig} package, you could insert \cmmd{breaklig} instructions to suppress the ligatures on a case-by-case basis; conversely, if you discover an instance for which \pkg{selnolig} improperly breaks up a ligature, you could override that action by encasing the character pair (or triple) in an \cmmd{uselig} statement. Alternatively, you could create your owb \cmmd{nolig} and \cmmd{keeplig} rules to deal with the cases you've discovered on a document-wide basis.\footnote{A third option, naturally, is to bring this case to the attention of the maintainer of the \pkg{selnolig} package and ask him/her to update the package\dots} Suppose, say, that you've been tasked with preparing a special edition of Thomas Mann's novel \emph{Der Tod in Venedig}. Suppose further that you have chosen to use an \enquote{Antiqua} (\enquote{Roman}) font\textemdash which, naturally, features a ligature for the ffl character triple\textemdash to typeset the new edition, because fewer and fewer people nowadays can manage to read with ease text set in a {\blackletterfont period-appropriate blackletter font}. During these preparations, you happen to notice (i)~that the novel contains the word \opt{inbegriffleitend}\footnote{This word really does occur in the aforementioned novel! This novel may also be pretty much the only place ever where you'll encounter this word. I performed a Google search for the term \enquote{inbegriffleitend}; the only hits, apart from online editions of the novel itself, were the sites of a couple of French bloggers who agonized over how this word might possibly be translated from German to French\dots} and (ii)~that the \pkg{selnolig} package does not (yet) appear to include a rule that suppresses the ffl-ligature for this word. To address this problem\textemdash while simultaneously creating a search pattern that also catches inappropriate ffl-ligatures in the (hopefully quite a bit more common!) words \opt{Jugendtreffleiter} and \opt{Kunststoffleitung}\textemdash you could add the following \Verb+\nolig+ rule to your document's preamble: \begin{Verbatim} @@ -552,7 +573,7 @@ For instance, suppose that you are typesetting a Turkish text. The Turkish alpha in the document's preamble. -Or, suppose that you have a font that provides ligatures for the {\ebg \mbox{fb}, \mbox{fh}, \mbox{fj},} and {\ebg\mbox{fk}} character pairs (as well as, possibly, the {\ebg \mbox{ffb}, \mbox{ffh}, \mbox{ffj},} and {\ebg\mbox{ffk}} character triples). If you wanted to suppress the four former f-ligatures globally (and also break up the latter ligatures into ff\kern0pt b, ff\kern0pt h, ff\kern0pt j, and~ff\kern0pt k, respectively), you could do so by issuing the following commands: +Or, suppose that you have a font that provides ligatures for the {\ebg \uselig{fb}, \uselig{fh}, \uselig{fj},} and {\ebg\uselig{fk}} character pairs (as well as, possibly, the {\ebg \uselig{ffb}, \uselig{ffh}, \uselig{ffj},} and {\ebg\uselig{ffk}} character triples). If you wanted to suppress the four former f-ligatures globally (and also break up the latter ligatures into ff\kern0pt b, ff\kern0pt h, ff\kern0pt j, and~ff\kern0pt k, respectively), you could do so by issuing the following commands: \begin{Verbatim} \nolig{fb}{f|b} \nolig{fh}{f|h} @@ -561,20 +582,22 @@ Or, suppose that you have a font that provides ligatures for the {\ebg \mbox{fb} \end{Verbatim} In fact, these commands are activated automatically if the package's \opt{ngerman} or \opt{english} options are set. This is done because I was unable to come up with a single instance of a \emph{German} or \emph{English} language word involving these character combinations that doesn't also involve a morpheme boundary collision. -Of course, your document may contain words \emph{not} of German or English origin that contain some of these character pairs and do not involve a morpheme boundary crossing. For such words, it is not desirable to suppress the corresponding ligatures. One such word is \opt{Kafka}: one may not wish to suppress the {\ebg\mbox{fk}}-ligature for this specific word. The \pkg{selnolig} package provides \cmmd{keeplig} rules to preserve the {\ebg\mbox{fk}}-ligature in names such as {\ebg Kafka, Safka, Piefke, Potrafke, Sprafke, Shirafkan,} and {\ebg Tirafkan}.\footnote{Aside: It was Felix Lehmann's desire to preserve the {\ebg\mbox{fk}} ligature in the name \enquote{{\ebg Kafka}} that stimulated the creation of the package's \cmmd{keeplig} macro. Of course, once the \cmmd{keeplig} macro was created, all kinds of further great uses were quickly discovered.} +Of course, your document may contain words \emph{not} of German or English origin that contain some of these character pairs and do not involve a morpheme boundary crossing. For such words, it is not desirable to suppress the corresponding ligatures. One such word is \opt{Kafka}: one may not wish to suppress the {\ebg\uselig{fk}}-ligature for this specific word. The \pkg{selnolig} package provides \cmmd{keeplig} rules to preserve the {\ebg\uselig{fk}}-ligature in names such as {\ebg Kafka, Safka, Piefke, Potrafke, Sprafke, Shirafkan, Tirafkan}, and {\ebg Rifkin}.\footnote{Aside: It was Felix Lehmann's desire to preserve the {\ebg\uselig{fk}} ligature in the name \enquote{{\ebg Kafka}} that stimulated the creation of the package's \cmmd{keeplig} macro. Of course, once the \cmmd{keeplig} macro was created, all kinds of further uses were quickly discovered.} -Your documents may also words of \emph{Nordic} origin that contain the \opt{fj} character pair, such as \opt{Sognefjord} and \opt{Dovrefjell}. Because the \opt{fj} character pair in these words does not span a morpheme boundary, the {\ebg\mbox{fj}}-ligature should not be broken up; i.e., the words should be typeset as {\ebg Sognefjord and Dovrefjell}, respectively. The package therefore provides \cmmd{keeplig} rules to take care of (a)~words that contain the particles {\ebg fjord, fjör, fjell, and fjäll} and (b)~names such as {\ebg Eefje, Sufjan, Prokofjew, and Astafjew}. +Your documents may also feature words of \emph{Nordic} origin that contain the \opt{fj} character pair, such as \opt{Sognefjord} and \opt{Dovrefjell}. Because the \opt{fj} character pair in these words does not span a morpheme boundary, the {\ebg\uselig{fj}}-ligature should not be broken up; i.e., the words should be typeset as {\ebg Sognefjord and Dovrefjell}, respectively. The package therefore provides \cmmd{keeplig} rules to take care of (a)~words that contain the particles {\ebg fjord, fjör, fjell, and fjäll} and (b)~names such as {\ebg Eefje, Sufjan, Prokofjew, and Astafjew}. -A \enquote{rare} typographic ligature that may warrant global suppression, at least for English language documents, is~\mbox{\emph{ij}}.\footnote{In many fonts I'm familiar with, including the one used for this user guide, the |ij| character pair is available in the upright font shape as a \emph{digraph} rather than as a true, i.e., joined-up, ligature.} To the best of my knowledge, a morpheme boundary crossing occurs for all English language words that contain the~\opt{ij} character pair: \emph{antijam}, \emph{bijection}, \emph{demijohns}, and \emph{hijack}. By the logic set forth above, this ligature should therefore be suppressed for all of these words.\footnote{If this ligature weren't suppressed, the preceding words would be typeset as \emph{ant\mbox{ij}am}, \emph{b\mbox{ij}ection}, \emph{dem\mbox{ij}ohns}, and \emph{h\mbox{ij}ack}.} The \mbox{\emph{ij}} ligature also seems inappropriate for most words that came into English from languages such as French, Japanese, and Spanish, including \emph{bijou} (jewel), \emph{gaijin} (foreigner), \emph{jipijapa} (Panama hat), and \emph{marijuana} (Maryjane). (What? Were you maybe thinking of a different meaning of this word? How come?!) The \mbox{\emph{ij}} ligature is therefore suppressed \emph{globally} by the \pkg{selnolig} package if the options \opt{english} and \opt{hdlig} are set. -However, this ligature \emph{does} get used a lot in Dutch. Thus, the \pkg{selnolig} package issues various \cmmd{keeplig} directives so that this ligature isn't suppressed for some names and words of Dutch origin, such as \emph{de~Bruijn} and \emph{rijsttafel}.\footnote{The word \emph{rijsttafel}, incidentally, features three consecutive \enquote{rare} ligatures. Another word that contains three rare ligatures, though not consecutive ones, is \emph{\mbox{is}thmus}. } +A \enquote{rare} typographic ligature that may warrant global suppression, at least for English language documents, is~\uselig{\emph{ij}}.\footnote{For many fonts I'm familiar with, including the one used for this user guide, the |ij| character pair is available in the upright font shape as a \emph{digraph} rather than as a true, i.e., joined-up, ligature.} To the best of my knowledge, a morpheme boundary crossing occurs for all English language words that contain the~\opt{ij} character pair: \emph{antijam}, \emph{bijection}, \emph{demijohns}, and \emph{hijack}. By the logic set forth above, this ligature should therefore be suppressed for all of these words.\footnote{If this ligature weren't suppressed, the preceding words would be typeset as \emph{\uselig{antijam}, \uselig{bijection}, \uselig{demijohns}, \emph{and} \uselig{hijack}}.} The \uselig{\emph{ij}} ligature also seems inappropriate for most words that came into English from languages such as French, Japanese, and Spanish, including \emph{bijou} (jewel), \emph{gaijin} (foreigner), \emph{jipijapa} (Panama hat), and \emph{marijuana} (Maryjane). (What? Were you maybe thinking of a different meaning of this word? How come?!) The \uselig{\emph{ij}} ligature is therefore suppressed \emph{globally} by the \pkg{selnolig} package if the options \opt{english} and \opt{hdlig} are set. +However, this ligature \emph{does} get used a lot in Dutch. Thus, the \pkg{selnolig} package issues various \cmmd{keeplig} directives so that this ligature isn't suppressed for some names and words of Dutch origin, such as \emph{de~Bruijn} and \emph{rijsttafel}.\footnote{The word \emph{rijsttafel}, incidentally, features three consecutive \enquote{rare} ligatures. Another word that contains three rare ligatures, though not consecutive ones, is \emph{\uselig{is}thmus}. } \subsection{What if one ligature pre-empts a trailing, more appropriate ligature?} \label{sec:preempt} -If a font provides many discretionary ligatures, the likelihood is high that words will occur for which the use of a ligature for the first two characters of a character \emph{triple} might pre-empt the use of a more appropriate ligature for the last two characters of that triple. To be sure, the issue of ligature pre-emption is not limited to \enquote{discretionary} ligatures; it can also occur with \enquote{common} f-ligatures.\footnote{Suppose that a certain font provides ff, fi, and fl ligatures but no ffi and ffl ligatures, and consider how \TeX\ would typeset words containing \opt{ffi} and \opt{ffl} character triples. Left to its own devices, \TeX\ would let the leading ff-ligature pre-empt the trailing fi- and fl-ligatures, resulting in typographically incorrect outcomes for words such as wol\mbox{ff}ish (better: wolf\mbox{fi}sh), sa\mbox{ff}lower (safflower), au\mbox{ff}inden (auffinden), and Scha\mbox{ff}leisch (Schaffleisch). \label{fn:triple}} +If a font provides many discretionary ligatures, the likelihood is high that words will occur for which the use of a ligature for the first two characters of a character \emph{triple} might pre-empt the use of a more appropriate ligature for the last two characters of that triple.\footnote{To be sure, the issue of ligature pre-emption is not limited to \enquote{discretionary} ligatures; it can also occur with \enquote{common} f-ligatures. Suppose, for instance, that a certain font provides~ff, fi, and fl ligatures but no ffi and~ffl ligatures, and consider how \TeX\ would typeset words containing \opt{ffi} and \opt{ffl} character triples. Left to its own devices, \TeX\ would let the leading ff-ligature pre-empt the trailing fi- and fl-ligatures, resulting in typographically incorrect outcomes for words such as \uselig{wolffish} (better: wolffish), \uselig{safflower} (safflower), \uselig{auffinden} (auffinden), and \uselig{Schaffleisch} (Schaffleisch). \label{fn:triple}} -In this section, we examine the use of \cmmd{nolig} rules to address this contingency, focusing on cases of~\emph{st}, \emph{sp}, \emph{th}, and~\emph{ta} character pairs being preceded by character pairs (for which the font provides ligatures) that end in~\emph{s} or~\emph{t}, respectively. This focus is dictated largely by the discretionary ligatures provided by the main text font used for this user guide (Garamond Premier Pro). Other ligature-rich fonts may provide further possibilities for one ligature inappropriately pre-empting that for a trailing character pair.\footnote{For the font Garamond Premier Pro, I've discovered the following preculiar exception to the general rule that \TeX\ always gives precedence to a ligature for the first two characters of a character triple: for the character triple \opt{fis} (as in \opt{fist} and \opt{fish}), \TeX\ gives preference to the trailing \emph{is} ligature over the preceding \emph{fi} ligature, causing these words to be typeset as \emph{f\mbox{is}h} and \emph{f\mbox{is}t}, respectively. I can't tell if this outcome is a conscious design feature or a bug. For now, \pkg{selnolig} is set to override this behavior, i.e., to always give preference to the leading \emph{fi} ligature over the trailing \emph{is} ligature for words that contain the strings \opt{fist} and \opt{fish}; hence, they'll be rendered as \emph{fist} and \emph{fish}, respectively. Note that if the \opt{broadf} option is set, as is the case for the document you're reading, a side effect of this setting is that words such as \emph{deafish, dwarfish, elfish, oafish, selfish, unselfish, wolfish, draffish, giraffish, gruffish, offish, raffish, sniffish, standoffish, stiffish, \emph{and} toffish}, as well as the associated adverbs ending in \emph{-ly}, will \emph{not} feature an \emph{is} ligature. This loss is, hopefully, not too serious.} +In this section, we examine the use of \cmmd{nolig} rules to address this contingency, focusing on cases of~\emph{st}, \emph{sp}, \emph{th}, and~\emph{ta} character pairs being preceded by character pairs (for which the font provides ligatures) that end in~\emph{s} or~\emph{t}, respectively. This focus is dictated largely by the discretionary ligatures provided by the main text font used for this user guide (Garamond Premier Pro). Other ligature-rich fonts may provide further possibilities for one ligature inappropriately pre-empting that for a trailing character pair.\footnote{For the font Garamond Premier Pro, I've discovered the following preculiar exception to the general rule that \TeX\ always gives precedence to a ligature for the first two characters of a character triple: for the character triple \opt{fis} (as in \opt{fist} and \opt{fish}), \TeX\ gives preference to the trailing \emph{is} ligature over the preceding\, \emph{fi} ligature, causing these words to be typeset as \emph{\uselig{fish}} and \emph{\uselig{fist}}, respectively. I can't tell if this outcome is a conscious design feature or a bug. For now, \pkg{selnolig} is set to override this behavior, i.e., to always give preference to the leading\, \emph{fi} ligature over the trailing \emph{is} ligature for words that contain the strings \opt{fist} and \opt{fish}; hence, they'll be rendered as \emph{fist} and \emph{fish}, respectively. + +Note that if the \opt{broadf} option is set, as is the case for the document you're reading, a side effect of this setting is that words such as \emph{deafish, dwarfish, elfish, oafish, selfish, unselfish, wolfish, draffish, giraffish, gruffish, offish, raffish, sniffish, standoffish, stiffish, \emph{and} toffish}, as well as the associated adverbs ending in \emph{-ly}, will \emph{not} feature an \emph{is} ligature. This loss is, hopefully, not too serious.} @@ -582,9 +605,9 @@ In this section, we examine the use of \cmmd{nolig} rules to address this contin Suppose that the text font in use provides ligatures for the \emph{as}, \emph{is}, and \emph{us} character pairs as well as for the \emph{st} character pair. By \TeX's rules for forming typographic ligatures, words that contain the character \emph{triples} \opt{ast}, \opt{ist}, or \opt{ust} will see the first two characters ligated, pre-empting the use of a typographic ligature for the trailing \emph{st} character pair. There are at least three distinct reasons why this outcome is not desirable. -First, given the rather distinctive look of the \emph{st}~ligature, the word \opt{stochastic} may look a bit odd if the \emph{st} ligature is used only once\textemdash\emph{stoch\mbox{as}tic}\textemdash simply because the \emph{as} ligature pre-empts the second \emph{st} ligature; readers may prefer the look of \emph{stocha\mbox{st}ic}. Second, non-use of the st/\emph{st} ligature may be undesirable if the same word occurs twice and in close visual proximity, once set in the upright font shape\textemdash for which there are no ligatures for the \opt{as}, \opt{is}, and \opt{us} character pairs, and hence for which the issue of ligature pre-emption doesn't arise\textemdash and once in italics: must and \emph{m\mbox{us}t}; readers may prefer the look of must and \emph{mu\mbox{st}}. Or, consider the words \enquote{historian} and \enquote{history} when typesetting them in italics: I'd say it's much better to typeset them as \emph{historian} and \emph{history} rather than as \emph{h\mbox{is}torian} and \emph{h\mbox{is}tory}. Moreover, I suspect that Austrians\textemdash at least the ones who care about discretionary typographic ligatures\dots\textemdash may prefer to see the name of their country typeset as \emph{Austria} rather than as \emph{A\mbox{us}tria}. Finally, do you prefer the look of \emph{Do f\mbox{as}t festive f\mbox{is}ts foster f\mbox{us}tiness?} or that of \emph{Do fast festive fists foster fustiness?} You prefer the latter look too? Great! +First, given the rather distinctive look of the \emph{st}~ligature, the word \opt{stochastic} may look a bit odd if the \emph{st} ligature is used only once\textemdash\emph{\uselig{stochastic}}\textemdash simply because the \emph{as} ligature pre-empts the second \emph{st} ligature; readers may prefer the look of \emph{stochastic}. Second, non-use of the st/\emph{st} ligature may be undesirable if the same word occurs twice and in close visual proximity, once set in the upright font shape\textemdash for which there are no ligatures for the \opt{as}, \opt{is}, and \opt{us} character pairs, and hence for which the issue of ligature pre-emption doesn't arise\textemdash and once in italics: must and \emph{\uselig{must}}; readers may prefer the look of must and \emph{must}. Or, consider the words \enquote{historian} and \enquote{history} when typesetting them in italics: I'd say it's much better to typeset them as \emph{historian} and \emph{history} rather than as \emph{\uselig{historian}} and \emph{\uselig{history}}. Moreover, I suspect that Austrians\textemdash at least the ones who care about discretionary typographic ligatures\dots\textemdash may prefer to see the name of their country typeset as \emph{Austria} rather than as \emph{\uselig{Austria}}. Finally, do you prefer the look of \emph{Do \uselig{fast} festive \uselig{fists} foster \uselig{fustiness}?} or that of \emph{Do fast festive fists foster fustiness?} You prefer the latter look too? Great! -Third, there may be cases where an \emph{as} ligature not only pre-empts a subsequent \emph{st} ligature but also spans a morpheme boundary, as in the words \emph{infr\mbox{as}tructure} and \emph{se\mbox{as}trand}.\footnote{This case was already noted in \cref{fn:triple}. There, two words (\opt{wolffish} and \opt{Schaffleisch}) are mentioned for which the ff-ligature would improperly pre-empt fi- and fl-ligatures \emph{and} happen to span a morpheme boundary.} For such words, the \emph{as} ligature should probably be suppressed in any case to increase the words' legibility: \emph{infra\mbox{st}ructure} and \emph{sea\mbox{st}rand}. +Third, there may be cases where an \emph{as} ligature not only pre-empts a subsequent \emph{st} ligature but also spans a morpheme boundary, as in the words \emph{\uselig{infrastructure}} and \emph{\uselig{seastrand}}.\footnote{This case was already noted in \cref{fn:triple}. There, two words (\opt{wolffish} and \opt{Schaffleisch}) are mentioned for which the ff-ligature would improperly pre-empt fi- and fl-ligatures \emph{and} happen to span a morpheme boundary.} For such words, the \emph{as} ligature should probably be suppressed in any case to increase the words' legibility: \emph{infrastructure} and \emph{seastrand}. The \pkg{selnolig} package is set to give preference to the distinctive-looking \emph{st} ligature over \emph{as}, \emph{is}, and \emph{us} ligatures. To this end, the following \cmmd{nolig} rules are provided:\footnote{The second of these three commands, while correct for most words that contain the string \opt{ist}, unnecessarily suppresses the \emph{is} ligature for words for which the \emph{st} character pair crosses a morpheme boundary, e.g., words that start with \emph{dis-t\ldots}\textemdash e.g., \emph{distend, distribute, distrust, disturb}\textemdash or with \emph{mis-t\ldots}\textemdash e.g., \emph{mistake, mistranslate, mistype}. (Note that separate \cmmd{nolig} rules already suppress the st/\emph{st} ligature for these words.) At this time there are no plans to address this (overall hopefully minor?) issue.} \begin{Verbatim} @@ -603,7 +626,7 @@ The same three reasons for not letting \emph{as}, \emph{is}, and \emph{us} ligat \subsubsection*{Ligatures for \emph{at} and \emph{et} that pre-empt a \emph{th} ligature} -Suppose that a font provides ligatures for the \emph{at}, \emph{et}, and \emph{th} character pairs. By \TeX's rules for forming ligatures, without special intervention the word \opt{mathematics} will be typeset as \emph{m\mbox{at}hematics} rather than as \emph{mathematics} because the first \emph{at} ligature pre-empts the \emph{th} ligature. The same happens for words such as \emph{b\mbox{at}h}, \emph{K\mbox{at}hryn}, and \emph{p\mbox{at}hology}. +Suppose that a font provides ligatures for the \emph{at}, \emph{et}, and \emph{th} character pairs. By \TeX's rules for forming ligatures, without special intervention the word \opt{mathematics} will be typeset as \emph{\uselig{mathematics}} rather than as \emph{mathematics} because the first \emph{at} ligature pre-empts the \emph{th} ligature. The same happens for words such as \emph{\uselig{bath}}, \emph{\uselig{Kathryn}}, and \emph{\uselig{pathology}}. Given the commonness and the distinctive pronuciation of the \opt{th} character pair in the English language, as well as the high frequency of this character pair in words of Greek origin (for which the Latin-alphabet \opt{th} character pair derives from the single Greek character $\theta$/$\vartheta$), it seems undesirable to let the \emph{at}-ligature pre-empt the \emph{th} ligature for these words. Fixing the \emph{at}--\emph{th} ligature pre-emption issue globally\textemdash e.g., via \Verb+\nolig{ath}{a|th}+\textemdash is not completely innocuous, though, because doing so will also suppress the \emph{at} ligature for words such as \opt{boathook}, for which the \emph{th} ligature would span a morpheme boundary and thus shouldn't be employed anyway. For such words, then, there's no need to suppress the \emph{at} ligature. These cases are dealt with by providing specific \cmmd{keeplig} rules to re-enable the use of the \emph{at} ligature. @@ -616,9 +639,9 @@ I say that it's \emph{almost} universally correct to do so; however, there are s \subsubsection*{Ligatures for \emph{at} and \emph{et} that pre-empt a \emph{ta} ligature} -There seem to be very few English words for which an \emph{at} ligature might inappropriately pre-empt a \emph{ta} ligature. One such word is \opt{atap}, whose readability is enhanced if it's typeset as~\emph{atap} rather than as~\emph{\mbox{at}ap}. +There seem to be very few English words for which an \emph{at} ligature might inappropriately pre-empt a \emph{ta} ligature. One such word is \opt{atap}, whose readability is enhanced if it's typeset as~\emph{atap} rather than as~\emph{\uselig{atap}}. -Virtually all words for which an \emph{et} ligature might inappropriately pre-empt the use of a trailing \emph{ta} ligature appear to be words for which the \emph{et} ligature crosses a morpheme boundary and should be suppressed. Examples are \emph{betake, betatter, bristletail, caretaker, detach, dovetail, foretaste, pretax, retable, retack, retard, retarget, timetable, \emph{and} wiretap}. The \emph{et}-related ligature suppression rules already put in place to deal with morpheme boundary crossing cases should therefore suffice to catch these cases as well. There may also be cases of persons' names which include the string |eta| for which the \emph{ta} ligature should not be pre-empted. For instance, the author of this package prefers to see his surname typeset as \emph{Loretan} rather than as \emph{Lor\mbox{et}an}\dots +Virtually all words for which an \emph{et} ligature might inappropriately pre-empt the use of a trailing \emph{ta} ligature appear to be words for which the \emph{et} ligature crosses a morpheme boundary and should be suppressed. Examples are \emph{betake, betatter, bristletail, caretaker, detach, dovetail, foretaste, pretax, retable, retack, retard, retarget, timetable, \emph{and} wiretap}. The \emph{et}-related ligature suppression rules already put in place to deal with morpheme boundary crossing cases should therefore suffice to catch these cases as well. There may also be cases of persons' names which include the string |eta| for which the \emph{ta} ligature should not be pre-empted. For instance, the author of this package prefers to see his surname typeset as \emph{Loretan} rather than as \emph{\uselig{Loretan}}\dots @@ -627,26 +650,7 @@ Virtually all words for which an \emph{et} ligature might inappropriately pre-em \subsection{Known bugs} -\begin{enumerate} -\item The \cmmd{nolig} directives don't work properly on the \emph{final} word in the argument of certain \TeX\ macros such as |\section{}| and |\subsection{}|. For instance, the ff ligature in |Shelfful| isn't broken up if it's encountered in the instruction |\section{Shelfful}|. - -The simplest remedy I know of consists of inserting either a space character or the instruction \cmmd{kern0pt} between the final word of the command's argument and its closing curly brace. To wit, ligature suppression works as expected if the command given in the preceding paragraph is modified to |\section{Shelfful }|\textemdash observe the presence of whitespace\textemdash or to |\section{Shelfful\kern0pt}|.\footnote{In versions of the \pkg{selnolig} package prior to version~0.215, this bug also occurred at the end of the argument of \cmmd{footnote} instructions. That bug has fortunately been fixed; i.e., it's no longer necessary to insert a \cmmd{kern0pt} directive after the final word of the footnote and the command's closing curly brace.} - -\item The \cmmd{nolig} rules also don't operate correctly on words (including, if present, any trailing punctuation marks) that are followed \emph{immediately} by a |%| (comment) character. - -The best workaround in this case is to insert the instruction \cmmd{kern0pt} between the final word and the comment character. - -\item In \opt{itemize} or \opt{enumerate} environments, if the content of an \cmmd{item} directive \emph{ends} with a word (including an associated punctuation mark) that contains a ligature that should be suppressed \textemdash i.e., if it is followed immediately by either another \cmmd{item} directive or an \Verb+\end{itemize}+ or \Verb+\end{enumerate}+ statement\textemdash ligature suppression fails yet again. - -The remedy I propose for these cases is to leave a blank line between the end of one \cmmd{item}'s content and the next \cmmd{item} instruction or the \Verb+\end{itemize}+ or \Verb+\end{enumerate}+ directive. Inserting the instruction \cmmd{kern0pt} works too. - -\item If the final word (again, possibly, with an associated punctuation character) of a sentence which is followed immediately by an \opt{enumerate}, \opt{itemize}, or other such environment contains a ligature that should be suppressed, ligature suppression again will not work properly. - -I recommend leaving a blank line between that sentence and the start of the \opt{enumerate} or \opt{itemize} environment. Inserting the instruction \cmmd{kern0pt} also works. - -\end{enumerate} - -I'm not sure if the following matter constitutes a bug or \enquote{merely} a case of incompatibility between two \LaTeX\ packages. The \pkg{selnolig} package does not appear to interact well with the \LaTeX\ package \pkg{ngerman}. As was noted earlier, \pkg{selnolig} does interact nicely with the \pkg{babel} package with one of the options \opt{ngerman}, \opt{german}, \opt{austrian}, and \opt{naustrian} set. Thus, unless someone can convince me that using the \pkg{ngerman} package is truly preferable to using the \pkg{babel} package (along with one of the available German language options), I probably won't bother addressing this incompatibility. +I'm not sure if the following matter constitutes a bug or \enquote{merely} a case of incompatibility between two \LaTeX\ packages. The \pkg{selnolig} package does not appear to interact well with the \LaTeX\ package \pkg{ngerman}. The \pkg{selnolig} package does interact nicely with the \pkg{babel} package if one of the options \opt{ngerman}, \opt{german}, \opt{austrian}, and \opt{naustrian} set. Thus, unless someone can convince me that using the \pkg{ngerman} package is truly preferable to using the \pkg{babel} package, I probably won't bother addressing this incompatibility. @@ -709,7 +713,7 @@ To terminate or suspend the writing of the debugging-related information to the -\subsection[Suspending and restarting the operation of selnolig's macros]{Suspending and restarting the operation of \pkg{selnolig}'s macros} +\subsection[Suspending and restarting the operation of selnolig's macros]{Suspending and restarting the operation of \pkg{selnolig}'s macros} \label{sec:selnoligon} By default, \pkg{selnolig}'s macros are switched on (assuming, of course, that your document is compiled under \LuaLaTeX). If you want to suspend their operation, you should issue the command \begin{Verbatim} @@ -734,9 +738,9 @@ It has the status \enquote{maintained}. I owe a huge intellectual and programming debt to Patrick Gundlach and Taco Hoekwater, who responded kindly and generously with detailed computer code to various queries I posted to \href{http://tex.stackexchange.com}{\texttt{tex.stackexchange.com}}.\footnote{See especially the questions \href{http://tex.stackexchange.com/q/37443/5001}{Any suggestions/requests for features for a new package that allows disabling ligatures for (pre)selected words?}, \href{http://tex.stackexchange.com/q/48516/5001}{How to suppress the operation of a luatex-defined macro on a string if the string is part of macro or a label}, and \href{http://tex.stackexchange.com/q/63005/5001}{Ligature suppression algorithm fails if the word in question contains an Umlaut (dieresis) before the ligature}.} Without their expertise in programming in Lua and interfacing the lua code with \LaTeX, this package would not exist. They certainly deserve most of the credit for the lua code used by the \pkg{selnolig} package. -Felix Lehmann (a linguist and expert in morphology, i.e., the study of morphemes) and Steffen Hildebrandt (computer scientist extraordinaire) served as patient and careful testers of several early beta versions of this package, uncovering and fixing bugs, pointing out unclear passages in the user guide, writing scripts to automate the discovery of redundancies and syntax errors in the package's \cmmd{nolig} and \cmmd{keeplig} rules, and providing many excellent suggestions for enhancements and other improvements. Steffen also provided crucial modifications to the package's lua code to make possible the \cmmd{keeplig} macro. +Felix Lehmann (a linguist and expert in morphology, i.e., the study of morphemes) and Steffen Hildebrandt (computer scientist extraordinaire) served as patient and careful testers of several early beta versions of this package, uncovering and fixing bugs, pointing out unclear passages in the user guide, writing scripts to automate the discovery of redundancies and syntax errors in the package's \cmmd{nolig} and \cmmd{keeplig} rules, and providing many excellent suggestions for improving tha package. Steffen also provided crucial modifications to the package's lua code to make possible the \cmmd{keeplig} and \cmmd{uselig} macros. -Even more importantly, Felix and Steffen created scripts to test systematically and comprehensively the package's German \cmmd{nolig} and \cmmd{keeplig} rules for linguistic adequacy and (relative) completeness. +Equally importantly, Felix and Steffen created scripts to test systematically and comprehensively the package's German \cmmd{nolig} and \cmmd{keeplig} rules for linguistic adequacy and (relative) completeness. They began with a corpus of almost 850 million [!!] words, which they marked up with information on the morphological constituents of each word. From this huge word list, they extracted a set of 462,000 unique word forms containing potential f-ligatures. According to their analysis, an early version (ca.\ late October 2012) of the \pkg{selnolig} package already dealt correctly with 85 percent (394,000) of those word forms, while still generating 21,000 Type~I errors and 48,000 Type~II errors!\footnote{In the context of the \pkg{selnolig} package, a Type~I error is the failure to suppress a typographically inappropriate ligature, and a Type~II error is the improper suppression of a typographically valid ligature.}\textsuperscript{,}\footnote{1,000 words contained more than one potential f-ligature, hence the difference.} Fortunately (for me at least), they also discovered that a non-negligible part of the 69,000 errors wasn't real but, rather, the result of typos in the words included in the corpus and/or of incorrect morphological analysis. The detailed Type~I and~II error lists they generated were critical in helping me refine\textemdash and occasionally revise completely\textemdash the package's \cmmd{nolig} and \cmmd{keeplig} rules, rapidly bringing down the number of Type~I and~II errors.\footnote{For instance, after Steffen wrote the lua code that made possible the \cmmd{keeplig} macro, I was able to eliminate, in one fell swoop, more than 10,000~[!!] Type~II errors generated by the package's earlier, incorrect suppression of the fl-ligature in words that contain the morpheme \opt{pflicht}. } All major changes to the German language ligature suppression patterns are still being subjected to their testing algorithms to streamline the tasks of detecting what's left to improve and catching any newly introduced errors. @@ -748,7 +752,7 @@ The \href{http://www.ctan.org/tex-archive/support/rmligs}{\pkg{rmligs}} script l Matthias Vogel very kindly shared with me a set of regular-expression based ligature suppressing macros, named \href{http://www.winedt.org/Macros/LaTeX/Ligatures-German.php}{Ligatures-German}, he wrote for the WinEdt programmer's editor. Matthias's macros work by inserting \pkg{babel}-style (\Verb+"|+) ligature suppressing shortcut directives in the appropriate spots in the |.tex| file (which can then be compiled with pdf\LaTeX). These macros, and a file he sent me containing an extensive list of German words for which one or more f-ligatures should be suppressed, led me to thoroughly refine and extend the scope of the \pkg{selnolig} package's German language ligature suppressing rules. -Barbara Beeton provided careful and incisive comments on an early version of the package's user guide and English language ligature suppression rules. (She also pointed out to me that my surname's readability might be enhanced if it were typeset as \emph{Loretan} rather than as \emph{Lor\mbox{et}an}\dots) A suggestion received from David Bellows led me to extend some of the \cmmd{nolig} rules in Part~2 (activated by setting the option |broadf|) of the file \pkg{selnolig-english-patterns.sty}. Other contributors to \url{tex.stackexchange.com} and \url{comp.text.tex}, too numerous to name individually, also helped guide and influence the genesis of this package. To all of you, I express my sincere thanks. +Barbara Beeton provided careful and incisive comments on an early version of the package's user guide and English language ligature suppression rules.\footnote{She also pointed out to me that the readability of my surname might be enhanced if it were typeset as \emph{Loretan} instead of as \emph{\uselig{Loretan}}\dots} A suggestion received from David Bellows led me to extend some of the \cmmd{nolig} rules in Part~2 (activated by setting the option |broadf|) of the file \pkg{selnolig-english-patterns.sty}. Other contributors to \url{tex.stackexchange.com} and \url{comp.text.tex}, too numerous to name individually, also helped guide and influence the genesis of this package. To all of you, I express my sincere thanks. The website \url{http://www.morewords.com} provides very convenient methods for searching English language words that may contain cases of ligature collisions across morpheme boundaries. For German words, the site \url{http://corpora.informatik.uni-leipzig.de/?dict=de} provides a similar resource. @@ -778,7 +782,7 @@ selnolig-german-patterns.sty]{German-language ligature suppression rules: \\ \pkg{selnolig-german-patterns.sty}} \label{sec:germ-listing} -Introductory note: To accommodate the practice of Swiss-German writers of not using the \enquote{ß} character at akk (and using \enquote{ss} in its place), all search-and-insert strings that contain an \enquote{ß} character are duplicated with equivalent search-and-insert strings containing \enquote{ss}. +Introductory note: To accommodate the practice of Swiss-German writers of not using the \enquote{ß} character and using \enquote{ss} in its place, all search-and-insert strings that contain an \enquote{ß} character are duplicated with equivalent search-and-insert strings containing \enquote{ss}. \bigskip |