LuaTeX 不会以 Unicode emdash 结束一行

LuaTeX 不会以 Unicode emdash 结束一行

我在我的书中使用 LuaLaTeX 而不是 XeLaTeX,主要是因为它支持 microtype 的expansion功能,可以产生最佳的单词间距和换行符,从而实现最统一的文本空间覆盖,同时最大限度地减少连字符。我发现的一个问题是,LaTeX 似乎无法理解没有空格的破折号(我将其作为 Unicode 字符 — 直接插入 .tex 文档中)提供了与空格一样好的结束行的位置,并且它会尽一切努力避免在破折号之前或之后立即结束行,即使那是最佳位置。我尝试用 替换 Unicode \textemdash,但这没有效果。XeTeX 没有这个问题。有没有办法向 LuaTeX 解释 XeTeX 似乎理解的内容?举例来说:

\documentclass[letterpaper,12pt,onecolumn,final]{memoir}
\usepackage{luatextra}
% fontspec is loaded by luatextra in LuaLaTex             
\usepackage{xparse}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\usepackage[final=true]{microtype}
\usepackage[showframe]{geometry}

\setmainfont{Linux Libertine O}

\begin{document}

So, with dash and verve, he sang: “I am the very model of a modern major general

Now, adding a little more more \emph{dash} to his verve\ldots

So, with dash and verve, he sang: “I am the very model of a modern major general—

This brings the paragraph to just a hair shy of the end of the line. No font expansion has been done by 
microtype, because it fits perfectly. This would then be an optimal position for a line break, were the 
paragraph to continue onto the next line. Does it do that? Let’s see.

So, with dash and verve, he sang: “I am the very model of a modern major general—I’ve information 
vegetable animal and mineral.”

As you can see, microtype negatively expands (in other words, compresses) the first line to avoid the 
optimal break point, if only it knew!

\end{document}

答案1

自从发布这个问题以来,我发现另一个问题在非微类型上下文中处理此问题的各个方面。topskip 在那里接受的答案(他或她根据 egreg 的评论建议修改了代码)建议使用以下 TeX“黑客”:

\catcode`\—=13
\protected\def—{\unskip\nobreak\thinspace\textemdash\allowbreak\thinspace\ignorespaces}

当添加到序言中时,我发现这确实有效,允许在破折号后面(而不是前面)换行。它确实有副作用,将所有的破折号都用(细)空格“结尾”,这可能是不希望的。在这种情况下,我发现在\negthinspace每个破折号后面添加\thinspace会使这些空格无效,从而产生一个看起来正常的无空格可断开的破折号:

\catcode`\—=13
\protected\def—{\unskip\nobreak\thinspace\negthinspace\textemdash\allowbreak\thinspace\negthinspace\ignorespaces}

我突然想到应该使第一对变得多余,但我发现删除\nobreak\thinspace\negthinspace那里的会导致破折号向后移动到它实际上与在......的最后一般的-我不知道为什么。

更新:在这个答案的评论中开发了一种更简单的代码形式。

答案2

我最终想出了一个替代方案Stonefeather Grubbs 的回答,利用 LaTeX 的默认行为---已经处理了这个问题允许在破折号后换行,但通常不允许在破折号前换行

\catcode`\—=13
\protected\def—{---}

相关内容