何时使用 \par 比 \endgraf 更好?

何时使用 \par 比 \endgraf 更好?

就在昨天,我不得不修补一个包文件(更改描述以表明文件已更改)以替换一些文件,\par因为\endgraf代码与非\long宏的交互很糟糕。

当编写包时,有哪些情况使用\par比更好\endgraf

答案1

这取决于你定义的命令是否会在\par不意味着的地方执行\endgraf。例如latex.ltx

  \let\tabularnewline\\%
    \let\par\@empty

因此,如果您希望在这些定义的范围内进行评估,您必须决定是否想要的当前定义\par或的\endgraf

答案2

我会以稍微不同的方式来回答这个问题(尽管它基本上相当于大卫所说的):

  • \par在 LaTeX 中相当于用户文档中的空行!LaTeX 在特定上下文中赋予“空行”的任何含义都会产生相应的\par结果。David 给出的示例:在表格中,空行会被忽略。但其他用法也是可能的。
  • \endgraf与之相反的是“结束水平模式并根据当前参数将材料分成几行(或者在某些地方产生错误,或者如果已经处于垂直模式则不执行任何操作...)”的原语。在这里添加原始行为的剩余子类...)”。

在大多数情况下,\par它会在后面运行原语\endgraf,但并非全部;有时它会执行额外的事情或其他事情。

因此,\endgraf当您想要运行原语时以及\par当您想要用户获得的操作(在当前上下文中)时使用它,该操作被记录为空行的行为。

答案3

在很多地方,latex 定义\par(通常通过\everypar)做很多不明显的事情,大多数普通用户(甚至一些“专家”)没有调查过并且不知道的事情。\endgraf在这些情况下使用可能会导致意想不到的结果。

\par有些地方很多更安全

  • \item列表中的多个段落

  • 位于段落末尾,用括号分隔(分组)

请注意,在这些情况下,空行相当于\par,而不是\endgraf

在某些情况下,例如在清楚的tex,\par不被接受,\endgraf必须改用。但是,latex.ltx包含行,\let\endgraf=\par所以我不确定\endgraf在哪里需要乳胶。(由于多年使用纯文本,我已经被腐蚀了,有时我会混淆这些事情。)

相关内容