该网站上有很多关于重新定义特定命令的问题,但我找不到关于在 LaTeX 中重新定义命令的安全性和最佳实践的更普遍、更全面的问题。
欢迎对这个问题的具体部分进行回答,但很可能已经在本网站的某个地方进行了阐述;当然,也欢迎提供这些答案的链接。
我们也欢迎进一步阅读的具体推荐(书籍章节、其他网站上的具体内容等)。
重新定义命令:这对我正在加载使用该命令的软件包,对于使用该命令的较低级别的地方(例如
documentclass
,或对于较高级别的地方(主要意味着仅调用直接或间接依赖于旧命令的包中的命令),以及它们如何依赖于:原始命令在哪里定义?
- 在我正在加载的包中、在
documentclass
我正在使用的包中、在我使用的 TeX 引擎中、在我自己的序言中等等定义。
- 在我正在加载的包中、在
重新定义的命令在哪里定义?
- 之前还是之后
\begin{document}
? - 之前还是之后
\usepackage{ <package that depends on the old command> }
? - 在随附文档中的一小块空间内
\bgroup
,并且\egroup
没有使用受影响软件包的部分/任何功能。
- 之前还是之后
原始命令是如何定义的?
\newcommand
,\def
,\edef
,\protected\def
,\NewDocumentCommand
,\DeclareExpandableDocumentCommand
,\DeclareRobustCommand
, ETC。- 原始命令的内容(即原文中的
\newcommand{\cmd}{ <old content> }
)
重新定义的命令是如何定义的?
\renewcommand
,\patchcmd
,\xpatchcmd
,\RenewDocumentCommand
,\RenewExpandableDocumentCommand
,\renewrobustcmd
, ETC。- 重新定义命令的内容(ieeg
\renewcommand{\cmd}{ <new content> }
)
旧命令是否被重命名例如
\let\oldcmd=\cmd
- 如何它改名了?
旧命令是如何被使用的?
重新定义 TeX 基元(
例如)...\neq
或\par
- 它总是不行吗,还是取决于特定的原语或其“类型”?
- 与上述相同的问题
促使我提出这个问题的原因是我打算重新定义TeX 原语 ,它之前已经多次出现在我的脑海里\d
,其原始定义是(电子书第356页):
\def\d#1{\oalign{#1\crcr\hidewidth.\hidewidth}}
我想将它重新定义为一个通用的导数运算符,例如,\frac{\mathop{}\!\mathrm{d}f}{\mathop{}\!\mathrm{d}x}
当给定两个参数时,它变成;\mathop{}\!\mathrm{d}
当给定一个参数时,它使用\partial
星号;当给定一个可选参数时,它使用更高的导数,等等。如何实现这种特殊的行为当然不是这个问题。
相关资源
- Overleaf 有一个方便的TeX 基元列表
- 显示命令的来源
- LaTeX 内部命令的文档参考?
- 预先添加和附加代码或修补命令的明确方法?
- 宏的简称