如果 mbox 容量不够,则刷新到下一行会出现问题

如果 mbox 容量不够,则刷新到下一行会出现问题

我尝试使用 David Carlisle 在此处概述的命令: 如果 \hfill 后面的内容不够,则将其刷新到下一行

但在这个 MWE 中它不起作用:

\documentclass[fontsize=10pt]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[babel]{microtype}
\usepackage[textwidth=10cm]{geometry}

\def\foo{\hspace{\fill}\mbox{}\linebreak[0]\hspace*{\fill}}

\begin{document}
Schöne Verhältnis herzustellen, in
               welchem sich erst das eigentliche Talent zeigt, bleibt abzuwarten.\foo\mbox{H. B.}      
\end{document}

尽管有足够的空间,作者姓名仍会移动到下一行: 在此处输入图片描述

为什么?

答案1

您可以稍微努力一点来阻止此时的换行:

\documentclass[fontsize=10pt]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[babel]{microtype}
\usepackage[textwidth=10cm]{geometry}

\def\foo{\hspace{\fill}\mbox{}\nolinebreak[3]\hspace*{\fill}}

\begin{document}
Schöne Verhältnis herzustellen, in
               welchem sich erst das eigentliche Talent zeigt, bleibt abzuwarten.\foo\mbox{H. B.}      
\end{document}

TeX 之所以要扣掉三行,是因为它对倒数第二行的连字符扣分。如果你将换行扣分保留为 0,但将最后一个连字符扣分降低到 50,只需添加

\finalhyphendemerits=50

它也只需要两行。

答案2

问题在于上一行的连字符。LaTeX 通常会尝试避免在倒数第二行出现连字符。这样做的代价是\finalhyphendemerits。这就是为什么 TeX-Book 中的代码(参见下面的链接)将其本地设置为 0(并且将 \parfillskip 设置为 0)。如果您将其设置为零,它会按预期进行编译:

\documentclass[fontsize=10pt]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[babel]{microtype}
\usepackage[textwidth=10cm]{geometry}

\def\foo{\hspace{\fill}\mbox{}\linebreak[0]\hspace*{\fill}}

\begin{document}\finalhyphendemerits=0

Schöne Verhältnis herzustellen, in
               welchem sich erst das eigentliche Talent zeigt, bleibt abzuwarten.\foo\mbox{H. B.}
\end{document}

为了更安全的实施请参见此处https://tex.stackexchange.com/a/16333/2388

相关内容