如何使用 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

相關內容