有哪些命令可以定义新命令?

有哪些命令可以定义新命令?

哪些命令可以用来在 (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 按主题分类

相关内容