
\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
etc.と同じ構文で\newcommand
、コマンドが堅牢になります (つまり、保護されている/拡張できない)。
さらに、(hidden)\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
マニュアルに記載されているように)。