哪些命令可以用来在 (La)TeX 中定义新命令?
有:\let
,\def
,\[re]newcommand[*]
,\DeclareRobustCommand[*]
,和...?
(我还见过类似的事情\DeclareMathOperator
。)
答案1
LaTeX“官方”界面提供
\newcommand
\renewcommand
\providecommand
\newlength
\newsavebox
\newenvironment
\renewenvironment
\newtheorem
\newcounter
所有这些命令都定义了一个或多个命令(有些仅供内部使用)并提供测试以避免破坏现有命令。还有\newfont
,但已弃用。
内核有许多其他命令定义宏:
\DeclareRobustCommand
\DeclareTextCommand
\DeclareTextCommandDefault
\DeclareTextSymbol
\DeclareTextSymbolDefault
\DeclareTextAccent
\DeclareTextComposite
\DeclareTextCompositeCommand
\DeclareMathSymbol
\DeclareMathAccent
\DeclareMathDelimiter
\protected@edef
其中,只有第一个在 LaTeX 编程中常用(\newcommand
但不应将其作为 的替代品随意使用)。最后一个在核心 LaTeX 编程中非常有用。
一些附加软件包提供了新功能:
\DeclareMathOperator (amsmath)
\DeclarePairedDelimiter (mathtools)
很常见,但是在数百个包中还有许多其他命令定义函数。
另一个常用的定义命令的实用程序是原语\let
,它将标记的当前含义“复制”到控制序列中,从而允许“根据自身重新定义宏”。但是,对于非专家(以及专家)程序员来说,
\LetLtxMacro
letltxmacro
由 H.Oberdiek提供的包是推荐的替代品。
该etoolbox
套装提供另一套
\newrobustcmd
\renewrobustcmd
\providerobustcmd
(查看文档了解描述)。
最终,所有这些命令定义功能都归结为原始命令
\def
\gdef
\edef
\xdef
\let
\futurelet
\chardef
\mathchardef
\countdef
\dimendef
\skipdef
\muskipdef
\toksdef
\font
\read
但对这些的描述需要写一本书的章节;请参阅 TeXbook 或TeX 按主题分类