我们什么时候应该使用 \cs_new...nopar?

我们什么时候应该使用 \cs_new...nopar?

我询问了一些编程代码的最佳实践expl3

第 4 节interface3.pdf描述了定义新控制序列的函数,这些控制序列禁止\par其函数参数(#1#2等)。这些函数的_nopar名称中包含 (例如\cs_new_nopar:Npn\cs_new_protected_nopar:Npn\cs_new_nopar:Nn等) 。

我的问题是:程序员nopar在 LaTeX3 中定义新函数时何时应该使用替代方法?

这里已经讨论了一个相关问题(为什么我们不总是使用 \long\def 而要使用 \def?),但我想要一个与之更相关的答案expl3

答案1

团队通常nopar在非常有限的情况下使用

  • 对于变量的低级实现,特别tl是幕后的“短”宏
  • 对于的实现ltcmd,它在文档级别区分“长”和“短”参数

除此之外,团队的几乎所有代码都是“长”的。原因是“短”宏没有性能优势。同时,\par标记可能会出现在许多编程上下文中,而“短”宏的“错误处理”方面仅在文档级别才真正有用(如前所述)。


也许有趣的是,在 LuaTeX 中\suppresslongerror,有可以完全关闭错误的方法,这就是 ConTeXt 中采用的方法。

相关内容