如何使用 LaTeX 的编程可能性

如何使用 LaTeX 的编程可能性

\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\DeclareExpandableDocumentCommandxparse

相关内容