除非三破折号周围有空格,否则 LuaLaTeX 不会插入长破折号。使用 unicode 长破折号或明确使用宏时,它可以正常工作\textemdash
。
以下是 MWE:
\documentclass{article}
\begin{document}
\begin{enumerate}
\item en--dash
\item em---dash
\item em --- dash space
\end{enumerate}
\begin{enumerate}
\item en–dash unicode
\item em—dash unicode
\item em — dash space unicode
\end{enumerate}
\begin{enumerate}
\item en\textendash{}dash macro
\item em\textemdash{}dash macro
\item em \textemdash{} dash space macro
\end{enumerate}
\end{document}
其结果为:
使用 LuaTeX 版本 1.07.0 (TeX Live 2018) 编译
问题是:
我想知道为什么没有周围空格的长破折号连字符在 PDF 输出中不会呈现为长破折号。对我来说这似乎是一个错误。我该如何修复它?
答案1
您可以\automatichyphenmode=1
在序言中添加:
\documentclass{article}
\automatichyphenmode=1
\begin{document}
\begin{enumerate}
\item en--dash
\item em---dash
\item em --- dash space
\end{enumerate}
\begin{enumerate}
\item en–dash unicode
\item em—dash unicode
\item em — dash space unicode
\end{enumerate}
\begin{enumerate}
\item en\textendash{}dash macro
\item em\textemdash{}dash macro
\item em \textemdash{} dash space macro
\end{enumerate}
\end{document}
答案2
更新 3/2019
该错误将在下一次 luaotfload 更新中得到解决
==============================================================
稍微扩展一下艾伦的回答:
在我看来,这显然是从上下文导入的字体加载器中的一个错误(如果你设置了,你会在上下文中看到相同的错误\automatichyphenmode=0
)。只有使用以下方式渲染字体时才会发生这种情况mode=node
:
\documentclass{article}
\begin{document}
\font\test={file:lmroman10-regular.otf:mode=node;+tlig}
\test
A---B
\font\test={file:lmroman10-regular.otf:mode=base;+tlig}
\test
A---B
\end{document}
我认为问题的根源在于\automatichyphenmode=0
,luatex 首先必须将最后一个连字符转换为可自由选择的字符,以允许换行:
A---B ---> A--\discretionary{-}{}{-}B
并且设置好线路后必须将其转换回---
,而这一步似乎失败了。
该问题已被报告,但尚不清楚是否会得到修复。
\automatichyphenmode=1
在许多情况下,通过不将连字符转换为自由字符来避免此问题。因此,您应该意识到,在许多情况下,这会抑制换行:
\documentclass[parskip=half-]{scrartcl}
\begin{document}
\parbox[t]{1pt}{%
\textbf{0}
\automatichyphenmode=0
A-B
A--B
A---B
-begin
A!-B}
\hspace{2cm}
\parbox[t]{1pt}{\automatichyphenmode=1
\textbf{1}
A-B
A--B
A---B
-begin
A!-B}
\end{document}