为什么没有 \provideenvironment?

为什么没有 \provideenvironment?

LaTeX2e 提供了一个\providecommand但是没有\provideenvironment仅当环境(或同名宏)之前未定义时才定义环境。缺少环境的具体原因是什么?

答案1

这个问题在 20 年后很难回答。但主要是因为它被认为不那么重要。必须记住,2e 的实现受到空间和速度限制的指导,因此最初我们花费了大量时间来优化内核的速度和空间。

2e 引入了许多新代码(如 NFSS、包加载机制、amsmath 等),但可用的主内存与 LaTeX2.09 相同。因此必须做出妥协。事实上,很长一段时间以来,我们甚至维护了一个“自动加载”版本的内核,其中许多功能并未预编译到其中,而只是按需加载。

Now\providecommand之所以可用,是因为您经常会使用简单的用户命令,而包可能会提供“更好的”实现,并且您不希望代码覆盖所有内容。环境通常更复杂,因此不太可能具有这种性质,我们只是没有看到在那里提供相同机制并浪费空间的巨大好处。

判断错误?也许吧。另一方面,我个人从未觉得\providecommand,除非在非常有限的情况下,你真的应该使用,因为最好知道某些东西是否会覆盖其他东西,然后再有意识地决定使用哪个版本。

相关内容