在 lualatex 中,连字符似乎不适用于包含某些连字符的单词

在 lualatex 中,连字符似乎不适用于包含某些连字符的单词

如果连字点出现在 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 连字(fffiflffiffl)。MWE 的输出如下所示:

在此处输入图片描述

观察列表中的前两个单词whitespaceKeynesian,连字符正确。如果您好奇的话:如果没有命令的帮助\hyphenation,TeX 会将这两个单词连字符为whites-paceKey-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

详细阐述我上面的评论,这似乎是luaotfloadnode模式(默认字体渲染模式,它更忠实于 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 问题来追踪这个错误。

相关内容