\def Wiki .:. goLaTeX - Mein LaTeX-Forum


goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum

goLaTeX.de - Wiki
 


\def

Low-Level-TeX-Anweisung zur nicht expandierenden Definition eines Makros. LaTeX-Anwender sollten stattdessen in der Regel unbedingt \newcommand oder \renewcommand verwenden.

Inhaltsverzeichnis

[bearbeiten] Verwendung

Syntax:

\def\MAKRONAME{DEFINITION}
\def\MAKRONAME#1#2#3#4#5#6#7#8#9{DEFINITION}
\def\MAKRONAME#1BEGRENZUNG{DEFINITION}

In allen drei Fällen wird ein Makro \MAKRONAME definiert. Die DEFINITION wird zunächst nicht expandiert, sondern nur gelesen, in Token umgewandelt und gespeichert. Daher kann die DEFINITION auch undefinierte Makros enthalten. Die Tokenisierung ist jedoch ein entscheidender Punkt, wie das erste Beispiel zu \makeatletter zeigt.

Im ersten Fall wird das Makro ohne Argumente definiert.

Im zweiten Fall werden neun Argumente erwartet. Beim Lesen des Arguments wird ein einzelnes Token als einzelnes Argument gelesen, außer es handelt sich dabei um eine öffnende geschweifte Klammer. In diesem Fall endet das Argument bei der schließenden geschweiften Klammer gleicher Ebene. Innerhalb der DEFINITION werden die Argumente ebenfalls durch #1 bis #9 referenziert. An Stelle von neun Argumenten können auch weniger angegeben werden. Es sind jedoch maximal neun möglich.

Der dritte Fall arbeitet mit einem begrenzten Argument. Dabei besteht ein Argument nicht nur aus einem Token oder einer Gruppe. sondern endet, wenn bei Einlesen BEGRENZUNG auf der gleichen Gruppenebene wie \MARKONAME gelesen wurde. Begrenzungen vor dem Argument sind ebenfalls möglich, werden aber nur als Begrenzungen erkannt, wenn sie mit einem Nicht-Letter-Zeichen beginnen, also mit einem Zeichen, dessen \catcode nicht 11 ist.

Der zweite und dritte Fall können kombiniert werden.

Eine Besonderheit ist, wenn innerhalb einer Definition ein # benötigt wird. Innerhalb einer Definition expandiert ## zu #. Das nützt man auch, wenn man innerhalb einer Definition ein Makro mit Argument definieren will. In diesem Fall werden die Argument des inneren Makros mit ##1 bis ##9 angegeben. Expandiert dann das äußere Makro expandieren die doppelten Hash zu einfachen, wie im Beispiel unten angegeben.

[bearbeiten] Optionen

Die Anweisung \def kennt keine Optionen.

[bearbeiten] Beispiele

\def\NIX{nichts}

Definition des Makros \NIX, das schlicht zu nichts expandiert.

\def\ErstesVonZwei#1#2{#1}

Definition des Makros \ErstesVonZwei. Dieses Makro erwartet zwei Argumente und expandiert zum ersten Argument. Man könnte also sagen, dass das zweite Argument vernichtet wird.

\def\PflichtVonOptionalUndPflicht[#1]#2{#2}

Definition des Makros \PflichtVonOptionalUndPflicht. Dieses Makro erwartet zwei Argumente. Dabei muss das erste Argument in eckigen Klammern stehen. Das erste Argument endet bei der ersten schließenden eckige Klammer auf gleicher Gruppenebene. Es ist also ein begrenztes Argument. Das zweite Argument ist hingegen ein normales Argument. Das Makro expandiert zu diesem zweiten Argument. Wir können die Definition so erweitern, dass das erste Argument tatsächlich nicht mehr zwingend, sondern optional ist:

\def\PflichtVonOptionalUndPflicht{%
  \@ifnextchar [{\@PflichtVonOptionlUndPflich}{\ErstesVonEins}%
}
\def\PflichtVonOptionalUndPflicht[#1]#2{#2}
\def\ErstesVonEins#1{#1}

Es ist zu beachten, dass hier mit @ im Makroname gearbeitet wurde und deshalb ggf. besondere Maßnahmen erforderlich sind.

\def\DefiniereSetzeInFarbe#1#2{%
  \def#1##1{{\color{#2}##1}}%
}

Definition eines Makros \DefiniereSetzeInFarbe. Diese Makro erwartet als erstes Argument ein Makro und als zweites Argument eine Farbangabe. Das als erstes Argument übergebene Makro wird dann selbst so definiert, dass es ein Argument erwartet. Das von \DefiniereSetzeInFarbe definierte Makro setzt dann das ihm übergebene Argument in der Farbe, die \DefiniereSetzeInFarbe als zweites Argument übergeben wurde. So würde

\DefiniereSetzeInFarbe\Blau{blue]

Die Anweisung \Blau definieren. Diese Anweisung hätte ein Argument und bei der Expansion würde dieses Argument in der Farbe blue gesetzt.

[bearbeiten] Verwandte Befehle

  • \edef - expandierende Definition eines Makros
  • \let - Übernahme einer Makrodefinition

[bearbeiten] Links




Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2015 goLaTeX.de