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

  • \DeclareRobustCommandetc.と同じ構文で\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マニュアルに記載されているように)。

関連情報