就在昨天,我不得不修补一个包文件(更改描述以表明文件已更改)以替换一些文件,\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
在哪里需要乳胶。(由于多年使用纯文本,我已经被腐蚀了,有时我会混淆这些事情。)