有选择地禁用 LuaLaTeX 中的破折号连字

有选择地禁用 LuaLaTeX 中的破折号连字

使用 pdfLaTeX,我可以使用 打印两个连字符-{}-。这在 LuaLaTeX 中似乎不起作用。

确实,以下代码片段

\documentclass{minimal}
\begin{document}
    en dash -- two dashes -{}-
\end{document}

印刷

短划线 — 两个短划线 --

使用编译时pdflatex,但是

破折号 — 两个破折号 —

当用 编译时lualatex

--如何在不完全禁用连字的情况下在 LuaLaTeX 中打印?

答案1

我猜你不想在双连字符处引入断点。这里有一种方法。

\documentclass{article}
%\usepackage{fontspec} % works also with fontspec

\newcommand{\texthyphen}{} % ensure \texthyphen is not defined
\protected\def\texthyphen{\mbox{-}}

\begin{document}
en dash -- two dashes \texthyphen\texthyphen

\textit{en dash -- two dashes \texthyphen\texthyphen}

\textbf{en dash -- two dashes \texthyphen\texthyphen}

\strut \vrule-\vrule\ \textit{\vrule-\vrule} \textbf{\vrule-\vrule}
\end{document}

\protected只是为了避免在移动参数时命令被扩展,但实际上这不是必要的。

我添加了连字符相对于其边界框的位置的图形分析。

在此处输入图片描述

答案2

事实上,通过插入空 TeX 组来拆分连字符的方法{}在 LuaTeX 和 LuaLaTeX 中不起作用。为了防止创建 en-dash,您可以插入“零宽度字距”,即

-\kern0pt-

或明确的“斜体更正”,即

-\/-

无论使用哪种方法,LuaTeX 都会不是在两个破折号之间插入换行符。

如果有许多这样的双破折号,您可能需要创建一个专用的宏,例如,\dbldash以简化您的排版:

\newcommand{\dbldash}{-\kern0pt-}

以下是使用结果的说明\dbldash

在此处输入图片描述

\documentclass{article}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{Latin Modern Roman}
\newcommand\dbldash{-\kern0pt-\ }
\begin{document}
dash - endash -- double-dash \dbldash
\end{document}

另外:至少如果使用 Computer Modern(和 Latin Modern)字体系列,-\kern0pt--\/-斜体模式会导致在两个破折号之间插入稍多的空白;无论使用哪种方法,这个量都是相同的。破折号之间空间增加的原因似乎是“侧边距”(与字形相关的空白)在...前面(但不是后面的)斜体字体形状中的破折号字符比直立字体形状中的破折号字符稍微大一些。

附录:@egreg 的平行回答明确表明,当斜体模式下出现破折号字符时,破折号字符前面有非零侧边距,但后面没有,至少对于 Computer Modern 字体系列而言如此。相比之下,在普通直立和粗体直立字体形状中,破折号字符后面有稍小的非零侧边距,但前面没有。这些侧边距差异导致普通直立和斜体字体形状之间的空白不同。

相关内容