Formaler Begriff für LaTeX-Abkürzung

Formaler Begriff für LaTeX-Abkürzung

In LaTeX ist es möglich, Ausdrücke wie zu schreiben \frac12, die gleichwertig mit Ausdrücken wie sein sollten \frac{1}{2}. Gibt es einen formalen Begriff für die erste Notationsform?

Antwort1

NEIN.


Dies ist nur ein Teil der normalen Art und Weise, wie TeX nicht begrenzte Makroargumente absorbiert. Wenn Sie

\def\foo#1{Something using #1 (or not).}

oder gleichwertig

\newcommand\foo[1]{Something using #1 (or not).}

Wenn \fooerweitert wird, nimmt es das nächste Token oder die nächste ausgeglichene Gruppe im Eingabestrom als Argument auf (das wie #1in der Definition verfügbar ist). Unter der Annahme normaler Kategoriecodes

  • Ein Token ist ein einzelnes Zeichen (außer \, {, }, %oder ein Leerzeichen bzw. ein Zeilenumbruch (da diese ignoriert werden)) oder eine Befehlsfolge (etwas, das mit beginnt \),
  • eine ausgeglichene Gruppe beginnt {und endet mit dem ersten }, das nicht zu einer anderen Gruppe gehört (die später begonnen hat). Die Klammern werden bei der Absorption aus der Gruppe entfernt (d. h. #1sie sind nicht enthalten).

Aus diesem Grund sind \foo xund \foo{x}, \newcommand{\foo}und \newcommand\foooder \frac 12, \frac{1}{2}, \frac{1}2und \frac1 2gleichwertig.

Es ist eine gute Praxis, die Version zu wählen, die am klarsten ist, was normalerweise bedeutet, eine Gruppe zu verwenden. Persönlich verzichte ich explizit auf die Gruppe, wenn ichmüssenGeben Sie ein einzelnes Token ein, etwa \newcommand\foo.

Antwort2

Es könnte erwähnenswert sein, dass die Unterscheidung zwischen Einzeltoken-Argumenten und Argumenten in Klammern in LaTeX3/ expliziter ist expl3. Konventionell expl3sollte jeder Makroname mit enden, :gefolgt von einer Buchstabenfolge, den sogenannten Argumentspezifizierern, die jeweils den Typ des entsprechenden Arguments widerspiegeln.

Neben vielen anderen haben wir

  • nfür geschweifte Gruppen oder einzelne Token-Argumente und
  • Nnur für Einzeltoken-Argumente, normalerweise Makro-/Funktionsnamen oder Variablennamen.

Diese Spezifizierer ändern zwar nicht die Art und Weise, wie (La)TeX die einzelnen Argumente verarbeitet, geben dem Benutzer jedoch einen Hinweis darauf, wie die Argumente innerhalb des Makros verwendet werden.

Beispielsweise l3tlstellt das Paket zwei Funktionen \tl_if_empty:nTFund bereit \tl_if_empty:NTF. Während beide Funktionen prüfen, ob eine Tokenliste leer ist, und Code bedingt ausführen, wird bei ersterer erwartet, dass sie mit einer geschweiften Gruppe von Token aufgerufen wird, während bei letzterer eine Tokenlistenvariable erwartet wird, die zuerst erweitert wird, bevor der Test an ihrem Inhalt ausgeführt wird.

verwandte Informationen