如果连字点出现在 TeX 插入连字符的位置,则连字似乎无法正常工作LuaLaTeX
。考虑以下 MWE,它 (i) 为七个选定的单词提供连字点,并且 (ii) 使用非常窄的度量打印它们(以强制 TeX 使用所有可能的连字点):
% !TEX program = lualatex
\documentclass[letterpaper]{article}
\usepackage[hmargin=4.2in]{geometry}
\setlength\parindent{0pt}
\usepackage[no-math]{fontspec}
\setmainfont{EB Garamond}
\hyphenation{white-space Keynes-ian dwarf-ish calf-like wolf-fish ruff-like roof-top}
\begin{document}
whitespace Keynesian dwarfish calflike wolffish rufflike rooftop
\end{document}
我选择了“EB Garamond”字体,因为它提供了ft
连字以及“标准五”个 f 连字(ff
、fi
、fl
、ffi
和ffl
)。MWE 的输出如下所示:
观察列表中的前两个单词whitespace
和Keynesian
,连字符正确。如果您好奇的话:如果没有命令的帮助\hyphenation
,TeX 会将这两个单词连字符为whites-pace
和Key-ne-sian
。哎呀!
然而,另外五个词是根本没有连字符尽管提供了明确的连字符点。[附言:在pdflatex
(显然不加载fontspec
包)或下运行时XeLaTeX
,此 MWE 运行正确,即单词在指定的连字符点处连字符。] 这些单词的共同点是它们都包含跨指定连字符点的连字符。这让我想到用LuaLaTeX
连字符替换各种字符对(或三元组)前它考虑了连字符的可能性。
让我更加相信这个诊断是正确的,如果我使用“Latin Modern”字体(不包含“ft”连字符)而不是“EB Garamond”,单词“rooftop”再次被正确连字符,而其余四个带有 f 连字符的单词(即 dwarfish、calflike、wolffish 和 rufflike)仍然没有连字符。同样,当我加载字体“Aldus LT Std”时(它只有“fi”和“fl”连字符,但没有“ff”、“ffi”、“ffl”或“ft”连字符),单词“wolffish”也被连字符,而“dwarfish”、“calflike”和“rufflike”仍然没有连字符。
有点令人惊讶的是,我发现如果我注释掉指令\usepackage{fontspec}
,连字符做再次工作LuaLaTeX
。但是,如果fontspec
没有明确加载包,则无法访问除“Computer Modern”之外的其他字体。
问题:LuaLaTeX 的连字算法最近是否发生了变化,以及/或者fontspec
最近是否发生了变化?(我忍不住想说,这绝对是变糟了……)或者,该\hyphenation
命令是否已经过时了?如果是后者,哪个命令应该我可以使用 来指定连字点吗?
答案1
详细阐述我上面的评论,这似乎是luaotfload
在node
模式(默认字体渲染模式,它更忠实于 OpenType 处理)中的一个错误,切换到base
模式可以修复它(一种更有限的渲染模式,它尝试将 OpenType 字体功能尽可能映射到传统的 TeX 连字机制),例如:
% !TEX program = lualatex
\documentclass[letterpaper]{article}
\usepackage[hmargin=4.2in]{geometry}
\setlength\parindent{0pt}
\usepackage[no-math]{fontspec}
\setmainfont[Renderer=Basic]{EB Garamond}
\hyphenation{white-space Keynes-ian dwarf-ish calf-like wolf-fish ruff-like roof-top}
\begin{document}
whitespace Keynesian dwarfish calflike wolffish rufflike rooftop
\end{document}
Renderer=Basic
告诉 fontspec 使用base
模式。
这可能是从luaotfload
为 LaTeX 和 Plain 重新打包的 ConTeXt 字体代码继承的一个错误,但尚未得到证实。
如果您只需要基本的连字(并且可能需要字距调整,不确定),那么basic
模式应该足够了,直到这个错误被解决。
我打开了luaotfload
问题来追踪这个错误。