############################################################
# @(#) Definitionen, Dirk Hagedorn, 31.12.1995
############################################################

!subsubnode Definitionen

Definitionen sind (wie Makros) benutzerdefinierte Platzhalter. Sie können
dazu dienen, im entgültigen Text spezielle Kommandos einzubauen.

!index !/define

Die Syntax für eine Definition lautet (!T)!/define <wort> <text>(!t). Im
Gegensatz zu den Makros wird (!T)<text>(!t) 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:

!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, 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:

!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 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:

!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 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:

!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 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 ''(!T)lb (!/2)(!t)'' zu
nichts expandiert. Dieser Umweg ist leider nötig.

!smallskip

(!HINTS)

!begin_enumerate

!item	Der Text, der zusammen mit (!I)!/define(!i) angegeben wird,
wird nicht an das Ausgabeformat angepaßt.

!item	Text, der als Parameter an eine Definition übergeben wird,
wird an das Ausgabeformat angepaßt.

!index !/heading

!item	UDO kann natürlich Ü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

