\newcommand
、、、、、、、如何工作以及它们之间有什么\newcommand*
区别?\renewcommand
\renewcommand*
\newenvironment
\newenvironment*
\renewenvironment
\newenvironment*
答案1
回答这个问题是为了让 OP 满意...
整个宏定义命令都是相互关联的:
\newcommand{\foo}[num_of_args][opt first arg value]{% definition}
定义\foo
\newcommand*{\foo}[num_of_args][opt first arg value]{% definition}
定义\foo
但不允许参数中的 parbreak。\renewcommand{\foo}
重新定义已经存在的命令\foo
\renewcommand*{\foo}
重新定义\foo
,但有no-parbreak
限制。\DeclareRobustCommand
与等具有相同的语法,\newcommand
这使得命令变得健壮(即受保护/不可扩展)。
此外,(隐藏)\newcommand
及其亲属会自动定义\endfoo
,因此无法\newcommand{\endfoo}
自行说明。有关更多信息,请参阅我的问题\end.... 宏名称在 LaTeX2e 中保留吗?
环境命令: -\newenvironment{fooenv}[num_of_args]{first opt arg]{% startcode}{endcode}
定义一个名为 的环境fooenv
,即它可以与 一起使用\begin{fooenv}...\end{fooenv}
。此对之间的内容是分组的,即\(re)newcommand
等,长度更改仅适用于此对内,而不可见于外部,即安全(除非\global
不使用 -\renewenvironment
重新定义现有环境 -\newenvironment*
并\renewenvironment*
与限制一起应用no-parbreak
。
此外,还有\providecommand
(与 语法相同\newcommand
) 可用于确保某些命令确实已定义。如果已定义,则不\providecommand
执行任何操作。
这一切背后的机器是基本的 TeX\def
命令。
此外,请参阅\newcommand 和 \newcommand* 之间的区别
etoolbox
和的替代方案xparse
该
etoolbox
软件包建立了\(re)newrobustcmd*
用于制定强大命令的功能。xparse
包:\NewDocumentCommand
、、和和是健壮的版本\RenewDocumentCommand
,具有比等更好的参数处理能力。还有一个可扩展的版本,应小心使用(如手册中所述)\ProvideDocumentCommand
\NewDocumentEnvironment
\ProvideDocumentEnvironment
\DeclareDocumentEnvironment
\newcommand
\DeclareExpandableDocumentCommand
xparse