升级到 TexLive2024 后 nobreak 的定义发生了变化

升级到 TexLive2024 后 nobreak 的定义发生了变化

我们现在已经更新了我们的 Linux 系统,因此也升级到了lualatex 1.18.0。不知何故,的定义nobreak似乎已经改变 - 或者至少是它的句柄。由于我们正在运行单元测试,我可以看到在使用该命令时引入了一个额外的空格nobreak。MWE

\documentclass[a4paper,11pt,british]{article}
\usepackage[margin=2.5cm]{geometry}
\usepackage[shorthands=off]{babel}
\newcommand{\nbsp}{\nobreak%
    \hspace{.16667em plus .08333em}
}
\usepackage{xltabular}
\usepackage{booktabs} % for rules within a table
\begin{document}
\begin{xltabular}{\textwidth}{ X X}
    \midrule[1pt]
    \bfseries Lorem ipsum test &\nbsp{}\\
    \midrule[1pt]
    {\selectlanguage{naustrian}Ein Vergleich mit der alten Version}
    &\nbsp{}\\
    \midrule[1pt]
    \addlinespace[1pt]\midrule[1pt]
\end{xltabular}
\end{document}

该命令nbsp应该只引入一个空格,不允许打断前后内容。给定的定义在 1.17 中运行良好,但在 1.18 中运行时,我引入了一条额外的行(用红色标记)。 在此处输入图片描述

当我注释该nobreak命令时,布局看起来不错,即没有引入额外的行。老实说,我没有足够的技能来查明这个问题的根源——无论是xltabularLaTeX 还是……我猜这是一个错误,而不是一个功能 ;-)

无论如何,有没有办法修复当前版本?仅使用\penalty 10000不会改变任何东西。

答案1

\nobreak(不应该在 latex 中使用,它只是从纯 tex 中继承下来的,没有改变。改变的是,在p列的开头,tex 更经常处于垂直模式。在 vmode 中\break防止分页而不是换行,所以在这里没有任何用处。您可以在前缀中添加,\leavevmode以便惩罚总是发生在 hmode 中并防止换行,或者(更好)使用标准\nobreakspace命令而不是定义替代。

\documentclass[a4paper,11pt,british]{article}
\usepackage[margin=2.5cm]{geometry}
\usepackage[shorthands=off]{babel}
\newcommand{\nbsp}{\leavevmode\nobreak%
    \hspace{.16667em plus .08333em}%<<<<<<<
}
\usepackage{xltabular}
\usepackage{booktabs} % for rules within a table
\begin{document}
\begin{xltabular}{\textwidth}{ X X}
    \midrule[1pt]
    \bfseries Lorem ipsum test &\nbsp{}\\
    \midrule[1pt]
    {\leavevmode\selectlanguage{naustrian}Ein Vergleich mit der alten Version}
    &\nbsp{}\\
    \midrule[1pt]
    \addlinespace[1pt]\midrule[1pt]
\end{xltabular}
\end{document}

生产

在此处输入图片描述

没有\leavevmode你得到

在此处输入图片描述

更新在此示例中,使用\leavevmodebefore\selectlanguage可防止在 之前添加额外的行Ein Vergleich mit der alten Version

相关内容