有没有办法选择性地禁用 XeLaTex 中的特定连字符?我不知道怎么做。selnolig 包似乎可以满足我的需要,但我甚至不知道如何在 Mac 上将 Lualatex 与我的 Texshop 设置一起使用。
具体来说:我正在使用 XeLaTex,刚开始使用它,并试图弄清楚如何设置一些标准模板供我自己使用,例如学术论文。我主要使用 Linux Libertine O。我在使用 Adobe Caslon Pro 时遇到了同样的问题。
原因:我讨厌“Th”连字,尤其是在标题中。我从未在印刷品中看到过它。例如,《纽约客》杂志使用 Caslon,大多数连字都设置了,但从来没有 Th。我也从未在书中看到过它。(我知道这很挑剔)。
答案1
假设你能弄清楚如何在 TeXshop 中使用 LuaLaTeX 而不是 XeLaTeX(其实这并不是一个困难的转变),你确实可以使用该selnolig
包来抑制Th
连字全球贯穿整个文档。请考虑以下示例(在 TeXshop 下编译,从下拉菜单中选择“LuaLaTeX”):
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Adobe Caslon Pro}
\usepackage{selnolig}
\nolig{Th}{T|h} % suppress "Th" ligature globally
\begin{document}
The There They Then (Th-ligature disabled)
vs.
\selnoligoff %% suspend operation of selnolig's rules
The There They Then (Th-ligature re-enabled)
\end{document}
答案2
据我所知,没有官方方法可以禁用特定连字符。有两种解决方法:定义新映射(如 egreg 建议的那样)或使用该XeTeXinterchartokenstate
机制。
我更喜欢后者。我首先定义两个字符类:FirstClass
forT
和SecondClass
for h
:
\XeTeXinterchartokenstate=1
\newXeTeXintercharclass\FirstClass
\XeTeXcharclass`T\FirstClass
\newXeTeXintercharclass\SecondClass
\XeTeXcharclass`h\SecondClass
T
然后我指示 XeTeX 在和之间插入零尺寸粘连h
:
\XeTeXinterchartoks\FirstClass\SecondClass={\penalty\@M\hskip\z@}
请注意,我使用的是\hskip
,它插入粘连,而不是\kern
,它插入字距,因为后者有禁用连字的副作用。然而,粘连允许换行,我通过插入惩罚来禁用它。
T
和 之间不会应用任何字距调整h
,因此您可能需要调整粘合的宽度。
答案3
这是最不棘手的解决方案,但对我来说,它多次奏效。在编译之前,搜索并替换所有Th
(\Th
带有尾随空格),用
\newcommand*\Th{T\kern0pt h}
这看起来可能不那么有趣,但我认为这已经足够了(它不会真正用大量的宏污染你的源代码,只是\Th
偶尔而已)。
答案4
在 Linux Libertine 中,Th 连字符是基本连字符之一,因此您要么禁用它们全部,要么获得它。
一个解决方法是加载一个特殊的映射。复制tex-text.map
你在 TeX 发行版中找到的文件并重命名tex-text-noth.map
,添加一行底线,使其变成
; TECkit mapping for TeX input conventions <-> Unicode characters
LHSName "TeX-text-noth"
RHSName "UNICODE"
pass(Unicode)
; ligatures from Knuth's original CMR fonts
U+002D U+002D <> U+2013 ; -- -> en dash
U+002D U+002D U+002D <> U+2014 ; --- -> em dash
U+0027 <> U+2019 ; ' -> right single quote
U+0027 U+0027 <> U+201D ; '' -> right double quote
U+0022 > U+201D ; " -> right double quote
U+0060 <> U+2018 ; ` -> left single quote
U+0060 U+0060 <> U+201C ; `` -> left double quote
U+0021 U+0060 <> U+00A1 ; !` -> inverted exclam
U+003F U+0060 <> U+00BF ; ?` -> inverted question
; additions supported in T1 encoding
U+002C U+002C <> U+201E ; ,, -> DOUBLE LOW-9 QUOTATION MARK
U+003C U+003C <> U+00AB ; << -> LEFT POINTING GUILLEMET
U+003E U+003E <> U+00BB ; >> -> RIGHT POINTING GUILLEMET
; disable Th
U+0054 U+0068 <> U+0054 U+200C U+0068
然后运行
teckit_compile tex-text-noth.map
并尝试以下示例
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Mapping=tex-text-noth]{Linux Libertine O}
\begin{document}
The
\end{document}
以下是我得到的结果:
您可以将文件移动到您的个人 TeX 树中(或将它们放在与您的主文件相同的文件夹中);在 Unix 系统上,您应该这样tex-text-noth.map
做tex-text-noth.tex
mkdir -p $(kpsewhich -var-value TEXMFHOME)/fonts/misc/xetex/fontmapping/noth
cp tex-text-noth.* $(kpsewhich -var-value TEXMFHOME)/fonts/misc/xetex/fontmapping/noth/
不知道您是否使用 MiKTeX,抱歉。