Makro Expansion

Das Interessanteste an der TeXmacs-Stil-Definitions-Sprache ist die Möglichkeit, Makros selbst zu definieren. Dabei gibt es drei verschiedene Makro-Typen: gewöhnliche Makros, Makros mir einer unbestimmten Anzahl von Argumenten und externe Makros, die durch Scheme oder ein Plug-In ausgewertet werden. Die Makro-bezogenen Konstrukte sind über das SourceMacro-Menü erreichbar. Anschließend werden wir nur die gewöhnlichen Makros beschreiben. Weitere Details finden Sie hier.

Gewöhnliche Makros werden üblicherweise mit einer Zuweisung (assign) definiert:

<assign|mein-makro|<macro|x1||xn|Rumpf>>

Nach solch einer Zuweisung wird mein-makro ein neues Konstrukt mit n Argumenten, das mit:

<mein-makro|y1|...|yn>

aufgerufen werden kann.

Innerhalb des Rumpfes kann das arg-Konstrukt benutzt werden, um auf die Werte von Argumenten zuzugreifen, z.B.:

<assign|hello|<macro|name|Hello name, Sie sehen heute aber gut aus!>>

Man kann ein Makro mit mehr oder weniger Argumenten aufrufen als eigentlich vorgeshen sind. Überflüssige Argumente werden einfach ignoriert. Fehlende Argumente werden durch eine Nullgröße, das uninit-Konstrukt ersetzt:

< assign | hallo-hallo | < macro | erster | zweiter |

<\if|

<equal|zweiter|?>

|

Hallo erster, Sie sehen heute einsam aus...

|

Hallo erster und zweiter, Sie sind ein hübsches Paar!

>

> >

Angemerkt sei, dass Sie mit Makros ähnlich wie beim funktionalen Programmieren rechnen können, nur sind TeXmacs-Makros keine Closures, noch nicht. Beispielsweise:

<assign|meine-makro-kopie|mein-makro>

Das compound-Konstrukt kann zur Anwendung von Makros dienen, die das Resultat einer Berechnung sind:

< assign | overloaded-hi | < macro | name |

<\compound|

<if|<gutes-wetter>|fröhliches-hi|trauriges-hi>

|

name

>

> >

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".