我们现在已经更新了我们的 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
命令时,布局看起来不错,即没有引入额外的行。老实说,我没有足够的技能来查明这个问题的根源——无论是xltabular
LaTeX 还是……我猜这是一个错误,而不是一个功能 ;-)
无论如何,有没有办法修复当前版本?仅使用\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
你得到
更新在此示例中,使用\leavevmode
before\selectlanguage
可防止在 之前添加额外的行Ein Vergleich mit der alten Version
。