简短回答

简短回答

\penalty-10000和之间有什么实际区别\linebreak?两者都是多余的吗\allowbreak

\documentclass{article}

\begin{document}

Text text text text text. This is a paragraph containing a formula,
\(a + b + c + d \times e\).
% breaks before "c"

Text text text text text. This is a paragraph containing a formula,
\(a + b + c \linebreak + d \times e\).
% breaks after "c"

Text text text text text. This is a paragraph containing a formula,
\(a + b + c \penalty-10000 + d \times e\).
% breaks after "c"

\end{document}

请注意,此示例并非试图说明公式中的良好断点。欢迎随意编辑更好的示例。

顺便说一句,本例中早期的代码有\allowbreak\penalty-10000,这实际上是多余的废话(参见例如用户 egreg 的回答)。

答案1

简短回答

\penalty-10000\linebreak非常彼此不同。并且\allowbreak与两者都有很大不同。

长答案

\nobreak和分别\allowbreak表示\break

\penalty 10000
\penalty 0
\penalty -10000

它们之所以在 LaTeX 中,是因为它们在 Plain TeX 中,而原始的 LaTeX 加载了 ,lplain.tex它是 的稍微编辑过的副本plain.tex。它们既没有记录在 LaTeX 手册中,也没有记录在 LaTeX Companion 中。实际上,\nobreak出现在后者的索引中,并引用了第 234 页,但 可能是 的拼写错误\nopagebreak)。

包含这些宏是为了向后兼容:许多旧版 LaTeX 文档使用了 Plain TeX 编程。然而,它们不应该在新文档中使用,因为它们违反了 LaTeX 区分水平和垂直模式下的命令的准则。

问题\break

abc\break def

abc\par\break def

有两个截然不同的含义:第一个是换行(如\linebreak),第二个是引入休息。

使用 LaTeX 的命令,\linebreak在第一种情况下您会得到换行符,在第二种情况下您会得到错误。

在宏中,程序员可以精确控制时间,这些快捷方式非常方便。然而

  • \allowbreak在 LaTeX 内核中只出现一次,其定义\pmod是从 复制而来的plain.tex

  • \break出现两次,一次是在 的定义中\eject(再次从 复制plain.tex),一次是在 的定义中\@gnewline( 的部分代码\\,但在宏中\ifvmode进行了测试,因此这\break只能出现在水平或数学模式下);

  • \nobreak出现的频率更高,但总是在受控的情况下,模式是可以预测的;典型的外观是\if@nobreak\ifvmode\nobreak\fi\fi

结论很简单:不要在文档中使用这些宏。你可以在低级编程中使用它们,但你应该知道自己在做什么。如果你使用的某个宏\break发出了分页符而不是换行符,请不要责怪 LaTeX。

相关内容