Ich bin gerade in einer Doku auf den Befehl \@nameuse{foo} gestoßen. Macht der das gleiche wie \csname foo\endcsname oder gibt es da Unterschiede? Und was macht der Befehl \@namedef{foo}?

gefragt 07 Jun, 04:52

esdd's gravatar image

esdd
14.2k53251
Akzeptiert: 87%

bearbeitet 07 Jun, 05:12

saputello's gravatar image

saputello
18.4k22352


\@nameuse ist im LaTeX-Kern definiert als:

Open in Online-Editor
\def\@nameuse#1{\csname #1\endcsname}

Das heißt, dass \@nameuse{foo} prinzipiell das gleiche wie \csname foo\endcsname ist. Natürlich hat das Ganze Auswirkungen bei der Expansion, weil \@nameuse nun einmal bereits eine Expansionsstufe benötigt, um überhaupt zu \csname …\endcsname zu kommen. Es hat auch Auswirkungen auf die Anzahl der zu verarbeitenden Token. Aber Speicher und Verarbeitungszeit spielen heutzutage wirklich keine Rolle mehr.

\@namedef ist im LaTeX-Kern als

Open in Online-Editor
\def\@namedef#1{\expandafter\def\csname #1\endcsname}

definiert. Das ist nun in der Tat nur eine Abkürzung, weil

Open in Online-Editor
\@namedef{foo}{bar}

schneller geschrieben ist als

Open in Online-Editor
\expandafter\def\csname foo\endcsname{bar}

und sich auch leichter liest. Man kann damit sogar Befehle mit Argument definieren:

Open in Online-Editor
\@namedef{foo}#1{bar: #1}%

Was dann

Open in Online-Editor
\expandafter\def\csname foo\endcsname#1{bar: #1}

entspricht. Diese Anweisung dürfte vermutlich auch der Hauptgrund für die Existenz von \@nameuse sein.

Permanenter link

beantwortet 07 Jun, 05:10

saputello's gravatar image

saputello
18.4k22352

bearbeitet 07 Jun, 05:11

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×45
×5
×1

Frage gestellt: 07 Jun, 04:52

Frage wurde angeschaut: 2,568 Mal

Zuletzt aktualisiert: 07 Jun, 05:12