1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
############################################################
# @(#) Definitionen, Dirk Hagedorn, 31.12.1995
############################################################
!subsubnode Definitionen
Definitionen sind (wie Makros) benutzerdefinierte Platzhalter. Sie knnen
dazu dienen, im entgltigen Text spezielle Kommandos einzubauen.
!index !/define
Die Syntax fr eine Definition lautet (!T)!/define <wort> <text>(!t). Im
Gegensatz zu den Makros wird (!T)<text>(!t) nicht speziell angepat, d.h. es
werden keine Umlaute und andere Sonderzeichen angepat.
Im folgenden Beispiel benutzen wir eine Definition, um nur im HTML-Format
ein Wort als berschrift auszugeben:
!begin_quote
!begin_verbatim
!ifdest [html]
!define H1 <H1>
!define h1 </H1>
!else
!define H1
!define h1
!endif
[...]
(!H1)Eine berschrift(!h1)
!end_verbatim
!end_quote
!smallskip
Wie Sie sehen, knnen Sie mit diesen Definitionen spezielle Befehle des
Ausgabeformates einbauen, die UDO standardmig nicht anbietet. In UDO4 gab
es mal einen Satz Spezialplatzhalter, die nur fr (!LaTeX) vorhanden
waren. Da diese Platzhalter selten gebraucht wurden, die Umwandlung
eines Quelltextes daher zumeist unntig bremste, mu man diese
Platzhalter nun mit geeigneten Definitionen nachahmen:
!index \linebreak
!index \nolinebreak
!begin_quote
!begin_verbatim
!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.
!end_verbatim
!end_quote
!smallskip
!index Parameter !! Definitionen
!index Definitionen !! Parameter
Auch bei den Definitionen knnen Sie Parameter benutzen. Gerade wenn
es darum geht, Befehle einiger Formate direkt einzubauen, kann diese
Mglichkeit 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
fr HTML erzeugen knnte. Benutzt man Parameter, knnte man
berschriften wesentlich eleganter erzeugen:
!begin_quote
!begin_verbatim
!ifdest [html]
!define head <H1>(!1)</H1>
!else
!define head (!1)
!endif
[...]
(!head [Eine berschrift])
!end_verbatim
!end_quote
Sie sehen, da Sie mit diesem Befehl einige Mglichkeiten haben,
spezielle Funktionen eines Formates nachzubilden, die UDO
standardmig nicht zur Verfgung stellt.
Das obige Beispiel fr (!LaTeX) liee sich mit einer parametrischen
Definition brigens viel eleganter lsen:
!begin_quote
!begin_verbatim
!ifdest [tex]
!define lb \linebreak[(!1)]
!else
!define lb (!2)
!endif
[...]
LaTeX einen Umbruchstelle (!lb [2]) vorschlagen.
!end_verbatim
!end_quote
In diesem Beispiel wird nur ein Parameter an die Definition bergeben.
Trotzdem soll fr 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 ''(!T)lb (!/2)(!t)'' zu
nichts expandiert. Dieser Umweg ist leider ntig.
!smallskip
(!HINTS)
!begin_enumerate
!item Der Text, der zusammen mit (!I)!/define(!i) angegeben wird,
wird nicht an das Ausgabeformat angepat.
!item Text, der als Parameter an eine Definition bergeben wird,
wird an das Ausgabeformat angepat.
!index !/heading
!item UDO kann natrlich berschriften mit (!I)!/heading(!i) direkt
erzeugen. Die obigen Beispiele eigneten sich halt gut zur Darstellung
des Problems.
!item Wie bei den Makros sollten Sie aufpassen, da sie keine von UDO benutzten
Platzhalter wie (!/B), (!/v), (!/TeX) etc. verwenden. Auch gibt es hier
eine maximale Anzahl von benutzbaren Definitionen. Sie liegt momenatan bei
maximal (!MAXMACRO) pro Quelltext.
!end_enumerate
|