Definitionen sind (wie Makros) benutzerdefinierte Platzhalter. Sie können dazu dienen, im entgültigen Text spezielle Kommandos einzubauen.
Die Syntax für eine Definition lautet !define <wort> <text>. Im Gegensatz zu den Makros wird <text> nicht speziell angepaßt, d.h. es werden keine Umlaute und andere Sonderzeichen angepaßt.
Im folgenden Beispiel benutzen wir eine Definition, um nur im HTML-Format ein Wort als Überschrift auszugeben:
!ifdest [html] !define H1 <H1> !define h1 </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 UDO4 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, muß man 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 hifreich sein.
Benutzt werden Definitionen, die Parameter enthalten sollen, wie Makros mit Parametern. Text, der beim Aufruf einer Definition anstelle eines der durchnumerierten Parameter ausgegeben werden soll, ist in eckige Klammern einzufassen.
Im obigen Beispiel habe ich Ihnen gezeigt, wie man eine Überschrift für HTML erzeugen könnte. Benutzt man Parameter, könnte man Überschriften wesentlich eleganter erzeugen:
!ifdest [html] !define head <H1>(!1)</H1> !else !define head (!1) !endif [...] (!head [Eine Überschrift])
Sie sehen, daß 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 is nicht vorhanden, demnach leer, und somit wird `lb (!2)' zu nichts expandiert. Dieser Umweg ist leider nötig.
Hinweise: