
Wie funktionieren \newcommand
, \newcommand*
, \renewcommand
, \renewcommand*
, \newenvironment
, \newenvironment*
, \renewenvironment
, \newenvironment*
und was ist der Unterschied zwischen ihnen?
Antwort1
Um dies zu beantworten und den OP zufriedenzustellen ...
Die zahlreichen Befehle zur Makrodefinition hängen eng zusammen:
\newcommand{\foo}[num_of_args][opt first arg value]{% definition}
definiert\foo
\newcommand*{\foo}[num_of_args][opt first arg value]{% definition}
definiert\foo
, lässt aber keine Parbreaks in den Argumenten zu.\renewcommand{\foo}
definiert einen bereits vorhandenen Befehl neu\foo
\renewcommand*{\foo}
definiert neu\foo
, mit derno-parbreak
Einschränkung.\DeclareRobustCommand
mit der gleichen Syntax wie\newcommand
usw., was den Befehl robust macht (d. h. geschützt/nicht erweiterbar).
Darüber hinaus \newcommand
definieren (hidden) und seine Verwandten automatisch \endfoo
, sodass es nicht möglich ist, \newcommand{\endfoo}
sich selbst zu sagen. Weitere Informationen hierzu finden Sie in meiner FrageSind \end...-Makronamen in LaTeX2e reserviert?
Die Umgebungsbefehle: – \newenvironment{fooenv}[num_of_args]{first opt arg]{% startcode}{endcode}
definieren eine Umgebung mit dem Namen fooenv
, d. h. sie kann mit verwendet werden \begin{fooenv}...\end{fooenv}
. Der Inhalt zwischen diesem Paar wird gruppiert, d. h. \(re)newcommand
usw. Längenänderungen werden nur innerhalb dieses Paares angewendet und sind außerhalb nicht sichtbar, d. h. sicher (es sei denn, \global
es wird nicht verwendet – \renewenvironment
definiert eine vorhandene Umgebung neu – \newenvironment*
und werden mit der Begrenzung \renewenvironment*
angewendet .no-parbreak
Darüber hinaus gibt es \providecommand
(dieselbe Syntax wie \newcommand
), mit dem sichergestellt werden kann, dass ein Befehl wirklich definiert ist. Wenn er bereits definiert ist, geschieht \providecommand
nichts.
Die Maschine hinter allem ist der grundlegende TeX- \def
Befehl.
Siehe auchUnterschied zwischen \newcommand und \newcommand*
Alternativen von etoolbox
undxparse
Das
etoolbox
Paket stellt die Grundlage\(re)newrobustcmd*
für die Erstellung robuster Befehle dar.xparse
Paket:\NewDocumentCommand
,\RenewDocumentCommand
,\ProvideDocumentCommand
,\NewDocumentEnvironment
und\ProvideDocumentEnvironment
und\DeclareDocumentEnvironment
sind robuste Versionen mit einer besseren Argumentbehandlung als\newcommand
usw. Es gibt\DeclareExpandableDocumentCommand
auch ein erweiterbares Paket, das mit Vorsicht verwendet werden sollte (wie imxparse
Handbuch angegeben).