重新定义命令:安全性和最佳实践

重新定义命令:安全性和最佳实践

该网站上有很多关于重新定义特定命令的问题,但我找不到关于在 LaTeX 中重新定义命令的安全性和最佳实践的更普遍、更全面的问题。

欢迎对这个问题的具体部分进行回答,但很可能已经在本网站的某个地方进行了阐述;当然,也欢迎提供这些答案的链接。

我们也欢迎进一步阅读的具体推荐(书籍章节、其他网站上的具体内容等)。


  1. 重新定义命令:这对我正在加载使用该命令的软件包,对于使用该命令的较低级别的地方(例如documentclass,或对于较高级别的地方(主要意味着仅调用直接或间接依赖于旧命令的包中的命令),以及它们如何依赖于:

    1. 原始命令在哪里定义?

      • 在我正在加载的包中、在documentclass我正在使用的包中、在我使用的 TeX 引擎中、在我自己的序言中等等定义。
    2. 重新定义的命令在哪里定义?

      • 之前还是之后\begin{document}
      • 之前还是之后\usepackage{ <package that depends on the old command> }
      • 在随附文档中的一小块空间内\bgroup,并且\egroup没有使用受影响软件包的部分/任何功能。
    3. 原始命令是如何定义的?

      • \newcommand\def\edef\protected\def\NewDocumentCommand\DeclareExpandableDocumentCommand\DeclareRobustCommand, ETC。
      • 原始命令的内容(即原文中的\newcommand{\cmd}{ <old content> }
    4. 重新定义的命令是如何定义的?

      • \renewcommand\patchcmd\xpatchcmd\RenewDocumentCommand\RenewExpandableDocumentCommand\renewrobustcmd, ETC。
      • 重新定义命令的内容(ieeg \renewcommand{\cmd}{ <new content> }
    5. 旧命令是否被重命名例如\let\oldcmd=\cmd

      • 如何它改名了?
    6. 旧命令是如何被使用的?

  2. 重新定义 TeX 基元例如\neq\par)...

    1. 它总是不行吗,还是取决于特定的原语或其“类型”?
    2. 与上述相同的问题

促使我提出这个问题的原因是我打算重新定义TeX 原语 ,它之前已经多次出现在我的脑海里\d,其原始定义是(电子书第356页):

\def\d#1{\oalign{#1\crcr\hidewidth.\hidewidth}}

我想将它重新定义为一个通用的导数运算符,例如,\frac{\mathop{}\!\mathrm{d}f}{\mathop{}\!\mathrm{d}x}当给定两个参数时,它变成;\mathop{}\!\mathrm{d}当给定一个参数时,它使用\partial星号;当给定一个可选参数时,它使用更高的导数,等等。如何实现这种特殊的行为当然不是这个问题。


相关资源

相关内容