关于使用或避免使用“内部” TeX 或 LaTeX 命令有哪些做法?

关于使用或避免使用“内部” TeX 或 LaTeX 命令有哪些做法?

关于使用或避免使用“内部” TeX 或 LaTeX 命令有哪些做法?(关于“命令”与“宏”,这里有一些讨论TeX.SX 答案,虽然我不知道这是否是最后一句话。)

LaTeX 指南(第 4 版)写道(D.1.3,第 429-430 页):

[应该] 避免使用 [原始] TeX 命令[。] [...] [原始] TeX 命令可能会从未来的 LaTeX 版本中删除 [...] 这并不是真正的重点。 [...] 尽管只使用官方 LaTeX 命令是可取的,但在许多情况下,内部 LaTeX 命令或 TeX 基元命令必须使用。为了现在拥有一个可行的软件包,必须承担未来不兼容的风险。然而,如果有高级等效程序可用,则不应轻视这种风险。

在 D.1.2(第 427-429 页)中写道

LaTeX 程序员面临的一个问题是,内部 LaTeX 命令可以在多大程度上用于类和包文件。此类命令在后续版本中消失的风险始终存在,因为它们从未在官方书籍中记录过 [...]。

并且还区分了不同“级别”的命令:用户命令、类和包命令、内部 LaTeX 命令、低级 TeX 命令、内部私有命令。(同样,这可能不是此事的最后结论。)

  • 应避免使用哪些内部 TeX 命令?例如,人们普遍同意\over和分别被和\choose取代,并且和也应该同样避免使用(使用)。\frac\binom\atop\above\genfrac
  • 应避免使用哪些内部 LaTeX 命令?
  • 哪些内部 TeX 命令可以被认为是广泛使用的并且对于非普通用户来说是不可避免的?
  • 哪些内部 LaTeX 命令可以被认为是广泛使用的并且对于非普通用户来说是不可避免的?

David Bausum 的优秀文章对 TeX 命令进行了很好的描述TeX 参考texdoc source2e. LaTeX2e 在以下领域有详尽的文档:latex2e-help-texinfo/latex2e.pdf

那么“内部”命令到底是什么?对于 (La)TeX 来说,这个概念似乎有些粗糙,尤其是一些软件包文档鼓励程序员为某些目的重新定义“内部”命令。我认为避免使用“内部”命令也是编程风格的问题(以及一个人想要达到的纯粹和原则性)。一个视图内部命令是那些以 标记的命令@,尽管《LaTeX 命令类型指南》(如上所述)的详细说明更为细致。

例如,经验丰富的用户分类

就在 2013 年 7 月 11 日 UTC 这一天,TeX.SX 的粉丝数量突破了 20 万大关:-)

写道应该避免使用“在文档中”,\nobreak\allowbreak\break在低级编程中”则没问题。但并不是每个命令定义都是低级编程。哪些内部结构使用得更广泛,哪些是禁忌?如果人们使用\patchcmd(这尽可能地违反了封装/抽象的编程原则),似乎没有什么是禁止的。

答案1

在文档中,规则应该很简单,不要使用任何内部命令(带有@)或 tex 原语(除非它们明确记录为可用于 LaTeX)。(例如\noindent,尽管有些人会合理地争辩说你也不应该在文档中使用它)。

序言中的任何代码(尤其是使用 的代码\makeatletter)都应被视为您尚未构建的软件包的软件包代码。一开始使用 来添加小扩展很方便,\makeatletter但您始终可以将它们放入 中mylocalstuff.sty,只需\usepackage{mylocalstuff}在序言中加上 即可。如果这样做,您的文档将看起来更简洁,并且更容易重用代码。

因此,剩下的问题就是您应该在包代码中使用多少 TeX 基元和 LaTeX 内部函数。在理想世界中,答案是永远不要,但如果您查看或多或少任何分布式包的代码,您可能会发现世界并不总是理想的。LaTeX2e 没有记录的接口来执行人们在包中需要做的所有事情。您只需要小心谨慎并做出判断。

相关内容