
\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