diff options
author | Karl Berry <karl@freefriends.org> | 2013-05-28 22:16:29 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-05-28 22:16:29 +0000 |
commit | 797980e75204d1b67d217a40e2cf981721e90d79 (patch) | |
tree | a6cc79bde8d8d28364d76b775cbf4e2d29e7d983 /Master | |
parent | 4fb72bd444427c82b80f3bada18ea00ff9f8be57 (diff) |
selnolig (28may13)
git-svn-id: svn://tug.org/texlive/trunk@30789 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
15 files changed, 99 insertions, 98 deletions
diff --git a/Master/texmf-dist/doc/lualatex/selnolig/selnolig-bugreport.tex b/Master/texmf-dist/doc/lualatex/selnolig/selnolig-bugreport.tex index e274b179de8..97aed1156fe 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/25 +% selnolig-bugreport.tex, 2013/05/28 \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 b138d314f6a..59d3958ab83 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 a057a0e6fe3..5ff136520a6 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/25 +% Date: 2013/05/28 % Check first that we're running Lua(La)TeX. \usepackage{ifluatex} 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 fef41e9583b..ea1f7b1f9c4 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/25 +% Last updated: 2013/05/28 % For use with the 'selnolig' package and the % driver program 'selnolig-english-test.tex'. 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 d36f872fbaf..7717b1c3f33 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 da4027136ae..ef4f9e8a080 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/25 +% Date: 2013/05/28 % 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 1b42f5d21a0..bbd638ecf47 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/25 +% Last updated: 2013/05/28 % For use with the 'selnolig' package and the % driver program 'selnolig-german-test.tex'. diff --git a/Master/texmf-dist/doc/lualatex/selnolig/selnolig.pdf b/Master/texmf-dist/doc/lualatex/selnolig/selnolig.pdf Binary files differindex 7f8bad5dbb4..52137fba1a5 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 c346f6875c6..ea6bb1f43dd 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/25 +% Date: 2013/05/28 % Check first that we're running lua(la)tex. \usepackage{ifluatex} @@ -65,13 +65,18 @@ \nolig{Kunststo}{Kuns|ts|to} % Kunststoff \nolig{Bausto}{Baus|to} % Baustoff \nolig{streif}{s|treif} % streifte -\nolig{instru}{ins|tru} % Zupfinstrument +\nolig{instrum}{ins|trum} % Zupfinstrument \nolig{justiz}{jus|tiz} % Strafjustiz \nolig{Konstanz}{Kons|tanz} \nolig{Institut}{Ins|titut} \nolig{Wasserstoff}{Wassers|toff} \nolig{stiefl}{s|tiefl} % stiefle \nolig{straff}{s|traff} +\nolig{aufisst}{auf|iss|t} % suppress st liga as well. +% undo English/broadf \nolig{ffing}{ff|ing} rule: + \keeplig{ffingrig} + \keeplig{ffinger} +\hyphenation{fünf-fing-rig} % Load still more packages... @@ -142,7 +147,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 \pkg{selnolig}'s macros.}} +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.}} \author{Mico Loretan\thanks{ \href{mailto:loretan.mico@gmail.com}{loretan dot mico at gmail dot com}.}} @@ -162,7 +167,7 @@ The \pkg{selnolig} package suppresses typographic ligatures selectively, i.e., b \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}. \newline\hspace*{\parindent} -For English language documents, the package further provides ligature suppression macros for a number of so-called \enquote{discretionary} or \enquote{rare} ligatures such as~ct, st, and~sp. +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} The \pkg{selnolig} package requires use of the \LuaLaTeX\ format provided by a recent \TeX\ distribution such as \TeX Live\,2012 or~2013 and MiK\TeX\,2.9. \end{abstract} @@ -177,15 +182,15 @@ 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 automated yet selective (rather than global) suppression of typographic ligatures that span 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{\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. -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.\ across 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 these ligatures have the potential to impair seriously the intelligibility of 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.} +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.} \TeX\ and Friends offer several methods for suppressing ligatures on a case-by-case basis.\footnote{In \LaTeX, there are three basic methods for suppressing ligature within a character pair: (i)~insertion of an \enquote{empty atom}, |{}| between the characters, (ii)~insertion of an explicit italic correction, |\/|, and (iii)~insertion of an explicit \enquote{kern}, e.g., |\kern0pt| or \Verb/\hspace{0pt}/. The \pkg{babel} package, when used with the \opt{ngerman} option, offers the \enquote{shortcut} macro \Verb/"|/ for this purpose. Note, though, that the first ligature suppression method, \Verb/{}/, does \emph{not} work if the document is compiled with \LuaLaTeX.} However, these methods must be applied separately to each and every occurrence of all words that contain unwanted ligatures. As such, these case-by-case methods are both time-intensive and tedious. Moreover, there's always a residual risk that some words for which certain ligatures should be suppressed will be overlooked in the editing process. 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 macros 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 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 {\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}. @@ -223,7 +228,7 @@ Synonymous options: \opt{german}, \opt{austrian}, \opt{naustrian}, \opt{swissger \end{Verbatim} but if one or more of the language options noted above are specified as options in the \cmmd{documentclass} instruction, \LaTeX\ will pass these options on to the \pkg{selnolig} package. -\item If no language options are set, either when the package is loaded or as options in the \cmmd{documentclass} instruction, you will need to specify various \cmmd{nolig} macros yourself in order to suppress typographic ligatures. This approach may be called for if you write in a language other than German or English. +\item If no language options are set, either when the package is loaded or as options in the \cmmd{documentclass} instruction, you will need to provide your own ligature suppression rules. This approach may be called for if you write in a language other than German or English. \end{itemize} @@ -235,7 +240,7 @@ 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. Two required 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 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. @@ -248,20 +253,20 @@ Depending on your \TeX\ distribution, the default font family used by \LuaLaTeX\ You will also need to use a \TeX\ distribution that features a fairly recent version of \LuaLaTeX. \TeX Live 2013, \TeX Live\,2012, and MiK\TeX\,2.9 satisfy this requirement; versions of \TeX Live before 2011 probably do not. If you use a command-line interface to compile a document named, say, |myfile.tex|, type \begin{Verbatim} - lualatex myfile + lualatex myfile \end{Verbatim} rather than either |latex myfile| or |pdflatex myfile|. If you use a text editing program with pull-down menus or buttons to invoke a suitable compiler, be sure to select |LuaLaTeX|. -The 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 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 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 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 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. 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. 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|. @@ -285,11 +290,11 @@ Bound morphemes can be divided further into derivational and inflectional morphe 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. -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 the 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 \emph{merely} serves to change the noun's state from singular to plural. Hence, \enquote{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. +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 suppressed. Second, ligatures that 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 distinction is particularly relevant for decisions related to the suppression (and non-suppression) of ft and fft ligatures in German texts. +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. -Finally, observe 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 it might get hyphenated. +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. @@ -307,22 +312,19 @@ Typographic ligatures are suppressed selectively in the following cases: \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. \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. Setting the \opt{broadf} option also instructs \pkg{selnolig} to split up ffi ligatures in words such as fluffiness and fluffily. Note that the option \opt{broadf} is \emph{not} enabled by default. This is because I believe that any slight gain in readability that could result from breaking up the fi and ffi ligatures between word stems and suffixes of this type would be more than outweighed by the visual clashes created between the unligated~f (ff) and~i glyphs. Finally, setting the \opt{broadf} option also instructs \pkg{selnolig} to suppress fl ligatures in words such as chiefly, briefly, and gruffly and ft ligatures in words such as fifty and fiftieth. +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. + +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. \subsection{Ligature suppression rules: German language case} -For German words, the following principles (with various exceptions and adjustments) apply when it comes to decide which ligatures to break up and which ones to allow. 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. +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ünf\mbox{fi}ngrig; Brie\mbox{ft}aube $\to$ Brieftaube, Sto\mbox{fft}eil $\to$ Stoffteil, el\mbox{ft}eilig $\to$ elfteilig, etc. - -% in preceding item, we need to use an \mbox in -% fünf\mbox{fi}ngrig -% to suppress application of the English-language -% rule \nolig{ffing}{ff|ing} +\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 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, auf\breaklig iss\breaklig t, 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). 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}. @@ -334,33 +336,33 @@ For German words, the following principles (with various exceptions and adjustme 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. -\item Case 3c: Suffixes (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 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{% -In my opinion, the rationale given for the suppression of the fl-ligature in these cases\textemdash relyiance 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 for 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.} +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. \item Interlude II: If a word \emph{ends} with an |fl| character pair because an abbreviation is in effect, \emph{Duden} says it's OK to use the fl ligature even if the~f and~l characters belong to different morphemes. E.g., in the abbreviation \enquote{Aufl.}, the fl-ligature \emph{is} employed even though the ligature should not be used for the full, unabbreviated form of the word (\emph{viz.}, Auflage). -Although not mentioned explicitly by \emph{Duden}, I believe this convention may be extended to justify the use of the ff-ligature at the end of the abbreviation \enquote{Auff.} (full form: Aufführung\textemdash no ff ligature) and of the ft-ligature at the end of the abbreviated form \enquote{Auft.} (full form: Auftrag\textemdash no ft ligature either). +Although not mentioned explicitly by \emph{Duden}, I believe this convention may be extended to justify the use of the ff-ligature in the abbreviated word \enquote{Auff.} (full form: Aufführung\textemdash no ff ligature) and of the ft-ligature in \enquote{Auft.} (full form: Auftrag\textemdash no ft ligature either). -This convention further suggests (implies?!) that it's permissible (a) to use the ff ligature in surnames that end in ff, such as Orff and Hausdorff, and (b) to use the ffi- and ffl-ligatures in abbreviated names such as Steffi and Steffl. +This convention further suggests (implies?) that it's permissible (a)~to use the ff ligature in surnames that end in ff, such as Orff and Hausdorff, and (b)~to use the ffi- and ffl-ligatures in abbreviated names such as Steffi and Steffl. \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 particple). +\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 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 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 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 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}. -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~\enquote{f} and~\enquote{t}. +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|. \end{itemize} -\item Case 4: A free morpheme ends in~\enquote{ft} (e.g., Saft, Duft, Luft, Kraft, Haft, and Vernunft) and is joined either to another free morpheme or to a suffix (representing either a derivational or an inflectional morpheme). Example words: \opt{Saftladen}, \opt{duftend}, \opt{luftig}, \opt{Kraftfahrzeug}, \opt{verkraften}, \opt{bekräftigen}, \opt{Haftung}, and \opt{ver\-nünftig}. The \pkg{selnolig} package does \emph{not} break up the ft-ligatures in these cases as they don't cross morpheme boundaries. Thus, these words are typeset as Saftladen, duftend, luftig, Kraftfahrzeug, verkraften, bekräftigen, Haftung, and ver\-nünftig, respectively. Given that no morpheme boundary crossings occur, the fact that there's a syllable boundary between |f| and~|t| in some cases should be irrelevant to the question of whether not to employ the ft and fft ligatures. +\item Case 4: A free morpheme ends in~\enquote{ft} (e.g., Saft, Kraft, Luft, Duft, Haft, and Vernunft) and is joined either to another free morpheme or to a suffix representing either a derivational or an inflectional morpheme. Example words: \opt{Saftladen}, \opt{Säfte}, \opt{Kraftfahrzeug}, \opt{Luftagentur}, \opt{duftend}, \opt{bekräftigen}, \opt{Haftung}, and \opt{ver\-nünftig}. Because the |ft| character pair doesn't cross a morpheme boundary, the \pkg{selnolig} package does \emph{not} break up the ft ligature. Thus, the words are typeset as Saftladen, Säfte, Kraftfahrzeug, Luftagentur, duftend, bekräftigen, Haftung, and ver\-nünftig. The fact that a syllable boundary occurs between the letters~|f| and~|t| in some of these words should not affect the decision whether or not to employ the ligature. \end{itemize} \end{itemize} @@ -372,12 +374,11 @@ In contrast, the ft-ligature should \emph{not} be used in \enquote{Beethoven's F The \pkg{selnolig} package has the following components: \begin{itemize} -\item The main \enquote{driver} file is called \pkg{selnolig.sty}. It loads several other files and sets up the the package's main user macros, \cmmd{nolig}, \cmmd{keeplig}, and \cmmd{breaklig}. These macros are explained in more detail in the following subsection. -\item The package's user macros rely on lua code contained in the file \pkg{selnolig.lua}. +\item The main \enquote{driver} file is called \pkg{selnolig.sty}. It loads several other files and sets up the package's main user macros, \cmmd{nolig}, \cmmd{keeplig}, and \cmmd{breaklig}. These macros are explained in more detail in the following subsection. +\item The package's lua code is in the file \pkg{selnolig.lua}. \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 one or more ligatures that are to be suppressed, are contained in the files \pkg{selnolig-english-hyphex.sty} and \pkg{selnolig-english-hyphex.sty}. -\item A user guide (the document you're reading right now); the source code of the user guide is available in the file \pkg{selnolig.tex}. - +\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.} \end{itemize} @@ -396,13 +397,13 @@ After setting up several Boolean switches to structure the processing of options \enlargethispage{0.3\baselineskip} -The package's main user macro is called \cmmd{nolig}. Each \cmmd{nolig} instruction takes two arguments: a search string and a string that indicates the insertion point for the non-ligation \enquote{whatsit}. For example, the macro +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 \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}. -More than one ligature suppression point may be provided in the second argument of a \cmmd{nolig} instruction. For instance, one \emph{could} specify \Verb+\nolig{Auflaufform}{Auf|lauf|form}+ to suppress both the fl- and the ff-ligatures in the words Auflaufform and Auflaufformen. For added flexibility, the \pkg{selnolig} package actually uses two separate \cmmd{nolig} commands to suppress the two ligatures in this word; see also \cref{sec:debugon}. +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 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 @@ -410,41 +411,41 @@ It is possible to use Lua-style wildcard characters in the search string, as lon \nolig{Dorff[aäeiloöruü]}{Dorf|f} \nolig{dorff[aäeiloöruü]}{dorf|f} \end{Verbatim} -to search for words that contain the strings \opt{Dorff} and \opt{dorff} followed by a letter in the set |aäeiloöruü|.\footnote{These particular search strings are used so as not to suppress the ff-ligatures in words that \emph{end} in either \opt{Dorff} or \opt{dorff}, such as is the case with the surnames Dorff and Hausdorff.} Incidentally, it is not absolutely necessary, in the second argument of the \cmmd{nolig} command, to provide any material \emph{after} the vertical bar that indicates the non-ligation point. However, the readability of your \cmmd{nolig} instructions may suffer if you suppress that material. +to search for words that contain the strings \opt{Dorff} and \opt{dorff} followed by a letter in the set |aäeiloöruü|.\footnote{These particular search strings are used so as not to suppress the ff-ligatures in words that \emph{end} in either \opt{Dorff} or \opt{dorff}, such as is the case with the surnames Dorff and Hausdorff.} Incidentally, it is not absolutely necessary, in the second argument of the \cmmd{nolig} command, to provide any material \emph{after} the vertical bar that indicates the non-ligation point. However, the readability of your \cmmd{nolig} rules may suffer if you suppress that material. -If you examine the \cmmd{nolig} instructions provided in the files \pkg{selnolig-german-patterns.sty} and \pkg{selnolig-english-patterns.sty}, you'll notice quickly that there's some redundancy built into the package's ligature suppression rules. For instance, the need to suppress the ff-ligature in the word \enquote{auffallen} is catered to both by \Verb+\nolig{auff}{auf|f}+ and by \Verb+\nolig{ffall}{f|fall}+. This redundancy is there by design, because not all words that might fit one pattern will also fit the other. Providing some redundancy of this type seems like a reasonable way to proceed. +If you examine the \cmmd{nolig} rules provided in the files \pkg{selnolig-german-patterns.sty} and \pkg{selnolig-english-patterns.sty}, you'll notice quickly that there's some redundancy built into the package's ligature suppression rules. For instance, the need to suppress the ff-ligature in the word \enquote{auffallen} is catered to both by \Verb+\nolig{auff}{auf|f}+ and by \Verb+\nolig{ffall}{f|fall}+. This redundancy is there by design, because not all words that might fit one pattern will also fit the other. Providing some redundancy of this type seems like a reasonable way to proceed. -The arguments of the \cmmd{nolig} and \cmmd{keeplig} command are case-sensitive. +The arguments of the \cmmd{nolig} and \cmmd{keeplig} commands are case-sensitive. \subsubsection{The \cmmd{keeplig} macro} \label{sec:keeplig} -The instruction |\keeplig{<string>}| lets users override \cmmd{nolig} instructions selectively, i.e., words that contain fragment |<string>| will not see the corresponding \cmmd{nolig} instruction enforced. For a \cmmd{keeplig} macro to work properly, its argument must be a string that includes \emph{as a subset} a string treated by one or more \cmmd{nolig} instructions. +The instruction |\keeplig{<string>}| lets users override a \cmmd{nolig} rule selectively, i.e., words that contain fragment |<string>| will not see the corresponding \cmmd{nolig} rule enforced. For a \cmmd{keeplig} rule to work properly, its argument must be a string that includes \emph{as a subset} a string treated by one or more \cmmd{nolig} rules. -Having the \cmmd{keeplig} macro is very useful because it permits the specification of simpler, i.e., less restrictive, \cmmd{nolig} instructions; any Type-II errors that may arise from having \cmmd{nolig} macros whose scope may be insufficiently restrictive can be fixed by providing judiciously chosen \cmmd{keeplig} macros.\footnote{In the present context, a Type-II error is the suppression of a ligature that is, in fact, valid for the word at hand.} +Having the macro \cmmd{keeplig} is very useful because it permits the specification of more general, i.e., less restrictive, \cmmd{nolig} rules; any Type-II errors that may arise from having \cmmd{nolig} rules whose scope may be insufficiently restrictive can be fixed by providing judiciously chosen \cmmd{keeplig} rules.\footnote{In the present context, a Type-II error is the suppression of a ligature that is, in fact, valid for the word at hand.} -Consider the following example: If the \opt{ngerman} option is set, the package uses the macro +Consider the following example: If the \opt{ngerman} option is set, the package uses the rule \begin{Verbatim} \nolig{flich}{f|lich} \end{Verbatim} -to break up the fl-ligature in words such as begrifflich, beruflich, brieflich, glimpflich, hilflich, höflich, käuflich, sträflich, tariflich, trefflich, unerschöpflich, and verwerflich (and quite a few more such words), which all contain the suffix |-lich| (a derivational morpheme). This particular \cmmd{nolig} instruction also catches the word \enquote{Lauflicht}, which contains the free morphemes |Lauf| and |licht|. +to break up the fl-ligature in words such as begrifflich, beruflich, brieflich, glimpflich, hilflich, höflich, käuflich, sträflich, tariflich, trefflich, unerschöpflich, and verwerflich (and quite a few more such words), which all contain the suffix |-lich| (a derivational morpheme). This particular \cmmd{nolig} rule also catches the word \enquote{Lauflicht}, which contains the free morphemes |Lauf| and |licht|. -It turns out that the scope of this \cmmd{nolig} rule is a bit too broad since it also catches certain words, such as \opt{Pflicht} and \opt{verpflichten}, for which the fl-ligature should \emph{not} be suppressed. However, rather than provide a large number of slightly more restrictive \cmmd{nolig} macros just to avoid including the Pflicht- and pflicht-words, the package provides the command +It turns out to be the case that the scope of this \cmmd{nolig} rule is too broad (or, if you will, insufficiently restrictive): it also catches words\textemdash such as \opt{Pflicht} and \opt{verpflichten}\textemdash for which the fl-ligature should \emph{not} be suppressed. However, rather than provide a large number of slightly more restrictive \cmmd{nolig} rule just to avoid including the Pflicht- and pflicht-words, the package provides the command \begin{Verbatim} \keeplig{flicht} \end{Verbatim} -This instruction tells \pkg{selnolig} to override the action of the \Verb+\nolig{flich}{f|lich}+ instruction for all words that contain the string \opt{flicht}. Most words affected by this \cmmd{keeplig} instruction happen to contain the strings \enquote{Pflicht} and \enquote{pflicht}. Interestingly, this instruction also serves to preserve the fl-ligature in words such as \enquote{flicht} and \enquote{anflicht} (the third-person-singular forms of the verbs flechten and anflechten). +This rule tells \pkg{selnolig} to override the action of the \Verb+\nolig{flich}{f|lich}+ rule for all words that contain the string \opt{flicht}. Most words affected by this \cmmd{keeplig} rule happen to contain the strings \enquote{Pflicht} and \enquote{pflicht}. Interestingly, this instruction also serves to preserve the fl-ligature in words such as \enquote{flicht} and \enquote{anflicht} (the third-person-singular forms of the verbs flechten and anflechten). -Probably somewhat surprisingly, at least at first glance, it is \emph{not necessarily} the case that ligatures contained in the argument of a \cmmd{keeplig} instruction will, in fact, be used in words that contain this search string. Why? It is because, as was noted above, \emph{more than one} \cmmd{nolig} instruction can apply to a given word. Consider, for instance, the aforementioned word \opt{Lauflicht}; it turns out to be the case that this word is caught by two \cmmd{nolig} rules and one \cmmd{keeplig} rule provided in the file \pkg{selnolig-german-patterns.sty}: +Probably somewhat surprisingly, at least at first glance, it is \emph{not necessarily} the case that ligatures contained in the argument of a \cmmd{keeplig} rule will, in fact, be used in words that contain this search string. Why? It is because, as was noted above, \emph{more than one} \cmmd{nolig} rule can apply to a given word. Consider, for instance, the aforementioned word \opt{Lauflicht}: this word happens to be caught by two \cmmd{nolig} rules and one \cmmd{keeplig} rule (provided in the file \pkg{selnolig-german-patterns.sty}): \begin{Verbatim} \nolig{aufl}{auf|l} \nolig{flich}{f|lich} \keeplig{flicht} \end{Verbatim} -Observe that because the string |aufl| is \emph{not} a subset of the string |flicht|, the instruction |\keeplig{flicht}| does not undo the action of \Verb+\nolig{aufl}{auf|l}+. Hence, the word |Lauflicht| happily ends up being typeset as Lauflicht, i.e., \emph{without} an fl-ligature. +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 itself a bit too broad since 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 +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). @@ -452,17 +453,17 @@ Interestingly, the rule |\keeplig{flicht}| is itself a bit too broad since it a \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}+. As its name suggests, 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). 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 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 \pkg{selnolig} package does not provide a dedicated macro to override the action of a \cmmd{nolig} instruction 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. +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: \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 they deem to be 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{breaklig} instructions as deemed necessary. \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. @@ -486,7 +487,7 @@ 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} instructions. (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 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.} @@ -494,9 +495,9 @@ 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 macros 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 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. -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 macros 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. +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. @@ -510,11 +511,11 @@ Part 4 of the file \pkg{selnolig-english-patterns.sty}, which is also processed 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. -The preceding two examples involve pairs of free morphemes in both cases. Here's a composite word where one case involves a free morpheme and an inflectional morpheme, whereas the other 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; in the first case, one could argue that the use of the ft-ligature actually helps establish the composite word's intended meaning\dots +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 macros 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+\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. 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. @@ -522,19 +523,19 @@ 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 search-and-insert patterns set up 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{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} -Suppose, say, that you've been tasked with preparing a special edition of Thomas Mann's novel \enquote{Der Tod in Venedig}. Suppose further that you have chosen to use an \enquote{Antiqua} (Roman) font to typeset the new edition, as fewer and fewer people nowadays can manage to read with ease text set in a {\blackletterfont period-appropriate blackletter font}. Moreover, the font you've chosen features a ligature for the ffl character triple. 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 \emph{only} place where the word inbegriffleitend is used. I performed a Google search for this word; the only occurrences of this word, apart from online editions of Thomas Mann's novel, are on sites of a couple of French bloggers who agonize 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: +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} \nolig{ffleit}{ff|leit} \end{Verbatim} With this rule in place, the words will be typeset as inbegriffleitend, Jugendtreffleiter, and Kunststoffleitung, respectively. Just in case this discussion has made you curious: the file \pkg{selnolig-german-patterns.sty} actually provides the even more general (i.e., less restrictive) rule \Verb+\nolig{fleit}{f|leit}+. -When designing your own \cmmd{nolig} and \cmmd{keeplig} rules, you would ideally create them in such a way that they're neither too specific and hence only apply to a very small set of words, nor too general and hence end up applying to words for which the rule isn't meant to apply at all. Consider, say, what would happen if you had come up with the rule +When designing your own \cmmd{nolig} and \cmmd{keeplig} rules, you would ideally create them in such a way that they're neither too specific and hence only apply to a very small set of words, nor too general and hence end up applying to words for which the rule isn't meant to apply at all. Of course, this may be easier said than done. Consider, say, what would happen if you came up with the rule \begin{Verbatim} \nolig{flei}{f|lei} \end{Verbatim} -This rule would certainly succeed in (correctly) breaking up the fl ligature in the words inbegriffleitend, Jugendtreffleiter, and Kunststoffleitung as well as in Laufleis\breaklig tung, Häuflein, Kreislaufleiden, Scherflein, and many more. However, this rule would also incorrectly break up the fl ligature in many other words as well, including f\kern0pt leissig\slash f\kern0pt leißig, f\kern0pt leischig, Hackf\kern0pt leisch, and Diplomf\kern0pt leißarbeit. When in doubt, try to err on the side of making the rules a bit too restrictive. +This rule would certainly succeed in breaking up the fl ligature in the words inbegriffleitend, Jugendtreffleiter, and Kunststoffleitung as well as in Laufleis\breaklig tung, Häuflein, Kreislaufleiden, Scherflein, and many more. However, this rule would also \emph{incorrectly} break up the fl ligature in many other words as well, including f\kern0pt leissig\slash f\kern0pt leißig, f\kern0pt leischig, Hackf\kern0pt leisch, and Diplomf\kern0pt leißarbeit; I believe most readers would prefer to see these words typeset \emph{with} the fl-ligature, i.e., as fleissig\slash fleißig, fleischig,~etc. When in doubt, try to err on the side of making your \cmmd{nolig} rules a bit too restrictive. @@ -546,7 +547,7 @@ The main purpose of the \pkg{selnolig} package is, obviously, to disable certain For instance, suppose that you are typesetting a Turkish text. The Turkish alphabet features both a dotted~i and a dotless~\char"0131\ character. I understand that in Turkish typesetting practice, the fi and ffi ligatures should \emph{never} be employed, so as to avoid creating any doubts as to whether it's an~i or an~\char"0131\ character that follows the~\enquote{f} character. To satisfy the need of Turkish typography for global suppression of the fi and ffi ligatures, one could issue the command \begin{Verbatim} - \nolig{fi}{f|i}+ + \nolig{fi}{f|i} \end{Verbatim} in the document's preamble. @@ -560,22 +561,20 @@ 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} macros 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 when typesetting \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 for this macro 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\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.} 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}. -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? Why would you?!) 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. +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}. } \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 whichthe 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. 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}} -In this section, we examine the use of \cmmd{nolig} instructions 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), this setting implies 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 not feature an \emph{is} ligature.} +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.} @@ -629,17 +628,17 @@ 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 final word in the argument of certain \TeX\ macros, such as |\section{}|. For instance, the ff ligature in |Shelfful| isn't broken up if it's encountered in the instruction |\section{Shelfful}|. +\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 proposed remedy is to insert either one or more space characters 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.\footnote{In versions of \pkg{selnolig} prior to version 0.216, 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.} +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} macros also don't operate correctly on words (including, if present, any trailing punctuation marks) that are followed \emph{immediately} by a |%| (comment) character. +\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. +\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}+ instruction. Inserting the instruction \cmmd{kern0pt} works too. +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. @@ -647,7 +646,7 @@ I recommend leaving a blank line between that sentence and the start of the \opt \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}. However, as was noted earlier, \pkg{selnolig} interacts nicely with the \pkg{babel} package with one of the options \opt{ngerman}, \opt{german}, \opt{austrian}, and \opt{naustrian} set. 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}. 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. @@ -695,7 +694,7 @@ If \emph{both} a \cmmd{nolig} and a \cmmd{keeplig} command apply to a word\texte pattern match nolig and keeplig: fjord - fj - fjord p\end{Verbatim} -If more than one \cmmd{nolig} directive \emph{as well as} a \cmmd{keeplig} instruction apply to a given word, as is the case for the word \enquote{Streiflicht}, the following information is written to the \opt{.log} file: +If more than one \cmmd{nolig} rule \emph{as well as} a \cmmd{keeplig} rule apply to a given word, as is the case for the word \enquote{Streiflicht}, the following information is written to the \opt{.log} file: \begin{Verbatim} pattern match nolig and keeplig: Streiflicht - flich - flicht pattern match: Streiflicht - reifl @@ -703,6 +702,7 @@ If more than one \cmmd{nolig} directive \emph{as well as} a \cmmd{keeplig} instr Inserting nolig whatsit before glyph: l Last char: t \end{Verbatim} + Observe that the first nolig rule's pattern, |flich|, is overridden by the keeplig rule's pattern |flicht|. The second nolig rule's pattern, |reifl|, is \emph{not} overridden, and it is the debugging-related information associated with the second \cmmd{nolig} pattern that ends up being written to the |.log| file. To terminate or suspend the writing of the debugging-related information to the \opt{.log} file, one may execute the command \cmmd{debugoff}. To restart the logging of this information, issue the command \cmmd{debugon}. @@ -734,10 +734,10 @@ 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} instructions, 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 enhancements and other improvements. Steffen also provided crucial modifications to the package's lua code to make possible the \cmmd{keeplig} macro. -Even more importantly, Felix and Steffen created scripts to test systematically and comprehensively the package's German \cmmd{nolig} and \cmmd{keeplig} search patterns 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. +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. +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. @@ -746,9 +746,9 @@ Felix and Steffen started the automated testing of the package's |\nolig| and |\ The \href{http://www.ctan.org/tex-archive/support/rmligs}{\pkg{rmligs}} script lists hundreds of German language words for which various f\nobreak-liga\-tures should be suppressed. I created many of the initial German language ligature suppression rules of the \pkg{selnolig} package to treat the words listed in the \pkg{rmligs} package.\footnote{All versions of the \pkg{rmligs} package are archived at \url{http://www.j3e.de/ispell/igerman98/dict/}.} -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' 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. +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 macros. (She also pointed out to me that my surname looks better if it's typeset as \emph{Loretan} rather than as \emph{Lor\mbox{et}an}!) 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. (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. 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. diff --git a/Master/texmf-dist/tex/lualatex/selnolig/selnolig-english-hyphex.sty b/Master/texmf-dist/tex/lualatex/selnolig/selnolig-english-hyphex.sty index 9d708ff7555..a9fa077d00f 100644 --- a/Master/texmf-dist/tex/lualatex/selnolig/selnolig-english-hyphex.sty +++ b/Master/texmf-dist/tex/lualatex/selnolig/selnolig-english-hyphex.sty @@ -2,7 +2,7 @@ % !TEX TS-program = lualatex \ProvidesPackage{selnolig-english-hyphex}% -[2013/05/25] +[2013/05/28] % This entire package is placed under the % terms of the LaTeX Project Public License, diff --git a/Master/texmf-dist/tex/lualatex/selnolig/selnolig-english-patterns.sty b/Master/texmf-dist/tex/lualatex/selnolig/selnolig-english-patterns.sty index 6d1ae6ebe50..3aebeb8270f 100644 --- a/Master/texmf-dist/tex/lualatex/selnolig/selnolig-english-patterns.sty +++ b/Master/texmf-dist/tex/lualatex/selnolig/selnolig-english-patterns.sty @@ -2,7 +2,7 @@ % !TEX TS-program = lualatex \ProvidesPackage{selnolig-english-patterns}% -[2013/05/25] +[2013/05/28] % This entire package is placed under the % terms of the LaTeX Project Public License, diff --git a/Master/texmf-dist/tex/lualatex/selnolig/selnolig-german-hyphex.sty b/Master/texmf-dist/tex/lualatex/selnolig/selnolig-german-hyphex.sty index c09e58b614b..57f2f451a71 100644 --- a/Master/texmf-dist/tex/lualatex/selnolig/selnolig-german-hyphex.sty +++ b/Master/texmf-dist/tex/lualatex/selnolig/selnolig-german-hyphex.sty @@ -3,7 +3,7 @@ \RequirePackage{ifluatex} \ProvidesPackage{selnolig-german-hyphex}% -[2013/05/25] +[2013/05/28] % This entire package is placed under the % terms of the LaTeX Project Public License, diff --git a/Master/texmf-dist/tex/lualatex/selnolig/selnolig-german-patterns.sty b/Master/texmf-dist/tex/lualatex/selnolig/selnolig-german-patterns.sty index f27a54ca6fe..c5076f2fa2d 100644 --- a/Master/texmf-dist/tex/lualatex/selnolig/selnolig-german-patterns.sty +++ b/Master/texmf-dist/tex/lualatex/selnolig/selnolig-german-patterns.sty @@ -2,7 +2,7 @@ % !TEX TS-program = lualatex \ProvidesPackage{selnolig-german-patterns}% -[2013/05/25] +[2013/05/28] % This entire package is placed under the % terms of the LaTeX Project Public License, @@ -1577,6 +1577,7 @@ % Pfeiftafel \nolig{ftag}{f|tag} % Tauftag Fünftagewoche + \keeplig{ftagent} % Luftagentur \nolig{ftäg}{f|täg} % fünftägig elfftägig zwölftägig \nolig{ftalsg}{f|talsg} diff --git a/Master/texmf-dist/tex/lualatex/selnolig/selnolig.lua b/Master/texmf-dist/tex/lualatex/selnolig/selnolig.lua index 0b48951cc7e..02a265b4e62 100644 --- a/Master/texmf-dist/tex/lualatex/selnolig/selnolig.lua +++ b/Master/texmf-dist/tex/lualatex/selnolig/selnolig.lua @@ -15,8 +15,8 @@ selnolig = { } selnolig.module = { name = "selnolig", - version = "0.216", - date = "2013/05/25", + version = "0.218", + date = "2013/05/28", description = "Selective suppression of typographic ligatures", author = "Mico Loretan", copyright = "Mico Loretan", @@ -136,7 +136,7 @@ function process_ligatures(nodes,tail) for t in node.traverse(nodes) do if t.id==glyph then s[#s+1]=unicode.utf8.char(t.char) - -- Prior to version 0.216, the next instruction was + -- Up until version 0.215, the next instruction was -- coded simply as "elseif (t.id==glue) then" elseif ( t.id==glue or t.id==rule or t.id==kern ) then local f=string.gsub(table.concat(s,""),"[\\?!,\\.]+","") diff --git a/Master/texmf-dist/tex/lualatex/selnolig/selnolig.sty b/Master/texmf-dist/tex/lualatex/selnolig/selnolig.sty index 7d56624a157..8a81edc28bc 100644 --- a/Master/texmf-dist/tex/lualatex/selnolig/selnolig.sty +++ b/Master/texmf-dist/tex/lualatex/selnolig/selnolig.sty @@ -13,8 +13,8 @@ % --------------------- \def\selnoligpackagename{selnolig} -\def\selnoligpackageversion{0.216} -\def\selnoligpackagedate{2013/05/25} +\def\selnoligpackageversion{0.218} +\def\selnoligpackagedate{2013/05/28} % Announce who we are. Issue warning message if we're % not running under LuaLaTeX. |