LaTeX2e 提供了一个\providecommand
但是没有\provideenvironment
仅当环境(或同名宏)之前未定义时才定义环境。缺少环境的具体原因是什么?
答案1
这个问题在 20 年后很难回答。但主要是因为它被认为不那么重要。必须记住,2e 的实现受到空间和速度限制的指导,因此最初我们花费了大量时间来优化内核的速度和空间。
2e 引入了许多新代码(如 NFSS、包加载机制、amsmath 等),但可用的主内存与 LaTeX2.09 相同。因此必须做出妥协。事实上,很长一段时间以来,我们甚至维护了一个“自动加载”版本的内核,其中许多功能并未预编译到其中,而只是按需加载。
Now\providecommand
之所以可用,是因为您经常会使用简单的用户命令,而包可能会提供“更好的”实现,并且您不希望代码覆盖所有内容。环境通常更复杂,因此不太可能具有这种性质,我们只是没有看到在那里提供相同机制并浪费空间的巨大好处。
判断错误?也许吧。另一方面,我个人从未觉得\providecommand
,除非在非常有限的情况下,你真的应该使用,因为最好知道某些东西是否会覆盖其他东西,然后再有意识地决定使用哪个版本。