So nutzen Sie die Programmiermöglichkeiten von LaTeX

So nutzen Sie die Programmiermöglichkeiten von LaTeX

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 der no-parbreakEinschränkung.

  • \DeclareRobustCommandmit der gleichen Syntax wie \newcommandusw., was den Befehl robust macht (d. h. geschützt/nicht erweiterbar).

Darüber hinaus \newcommanddefinieren (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)newcommandusw. Längenänderungen werden nur innerhalb dieses Paares angewendet und sind außerhalb nicht sichtbar, d. h. sicher (es sei denn, \globales wird nicht verwendet – \renewenvironmentdefiniert 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 \providecommandnichts.

Die Maschine hinter allem ist der grundlegende TeX- \defBefehl.
Siehe auchUnterschied zwischen \newcommand und \newcommand*

Alternativen von etoolboxundxparse

  • Das etoolboxPaket stellt die Grundlage \(re)newrobustcmd*für die Erstellung robuster Befehle dar.

  • xparsePaket: \NewDocumentCommand, \RenewDocumentCommand, \ProvideDocumentCommand, \NewDocumentEnvironmentund \ProvideDocumentEnvironmentund \DeclareDocumentEnvironmentsind robuste Versionen mit einer besseren Argumentbehandlung als \newcommandusw. Es gibt \DeclareExpandableDocumentCommandauch ein erweiterbares Paket, das mit Vorsicht verwendet werden sollte (wie im xparseHandbuch angegeben).

verwandte Informationen