Definitionen sind (wie Makros) benutzerdefinierte Platzhalter. Sie können dazu dienen, im endgültigen Text spezielle Kommandos einzubauen.
Die Syntax für eine Definition lautet !define [<wort>] [<text>]. Im Gegensatz zu den Makros wird [<wort>] nicht speziell angepasst, d.h., es werden keine Umlaute und andere Sonderzeichen angepasst.
Im folgenden Beispiel benutzen wir eine Definition, um nur im HTML-Format ein Wort als Überschrift auszugeben:
!ifdest [html] !define H1!define h1
!else !define H1 !define h1 !endif [...] (!H1)Eine Überschrift(!h1)
Wie Sie sehen, können Sie mit diesen Definitionen spezielle Befehle des Ausgabeformates einbauen, die UDO standardmäßig nicht anbietet. In UDO 4 gab es mal einen Satz Spezialplatzhalter, die nur für LaTeX vorhanden waren. Da diese Platzhalter selten gebraucht wurden, die Umwandlung eines Quelltextes daher zumeist unnötig bremste, müssen Sie diese Platzhalter nun mit geeigneten Definitionen nachahmen:
!ifdest [tex] !define ff "ff !define lb2 \linebreak[2] !define nolb3 \nolinebreak[3] !else !define ff ff !define lb2 !define nolb3 !endif [...] Die Schi(!ff)ahrt LaTeX einen Umbruchstelle (!lb2) vorschlagen.
Auch bei den Definitionen können Sie Parameter benutzen. Gerade wenn es darum geht, Befehle einiger Formate direkt einzubauen, kann diese Möglichkeit der hilfreich sein.
Benutzt werden Definitionen, die Parameter enthalten sollen, wie Makros mit Parametern. Text, der beim Aufruf einer Definition anstelle eines der durchnummerierten Parameter ausgegeben werden soll, ist in eckige Klammern einzufassen.
Im obigen Beispiel haben wir Ihnen gezeigt, wie Sie eine Überschrift für HTML erzeugen könnten. Benutzen Sie Parameter, könnten Sie Überschriften wesentlich eleganter erzeugen:
Sie sehen, dass Sie mit diesem Befehl einige Möglichkeiten haben, spezielle Funktionen eines Formates nachzubilden, die UDO standardmäßig nicht zur Verfügung stellt.
Das obige Beispiel für LaTeX ließe sich mit einer parametrischen Definition übrigens viel eleganter lösen:
!ifdest [tex] !define lb \linebreak[(!1)] !else !define lb (!2) !endif [...] LaTeX einen Umbruchstelle (!lb [2]) vorschlagen.
In diesem Beispiel wird nur ein Parameter an die Definition
übergeben. Trotzdem soll für Nicht-LaTeX-Formate der 2. Parameter
ausgegeben werden. Sie werden sich vielleicht fragen, warum dies so
ist. Nun, bei Nicht-LaTeX-Formaten soll nichts ausgegeben werden. Ein
zweiter Parameter ist nicht vorhanden, demnach leer, und somit wird
lb (!2)
zu nichts expandiert. Dieser Umweg ist
leider nötig.
Hinweise: