<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\vfil\break

\section Label

Bei Beschreibungen der B\"aume wird der Schriftzug in der hbox |{|\dots|}| als {\it label box} bezeichnet. Nachdem die label box einer Struktur mit einem bestimmten Punkt $\cal P$ hinzugef\"ugt wurde, wird ein neuer Punkt $\cal P'$ der gegenw\"artige. Die Sachverhalte in diesem Abschnitt betreffen die Positionen von $\cal P$, der label box und $\cal
P'$ im Verh\"altnis zueinander. Die Position der label box wird durch die Positionsbestimmung des Mittelpunktes ihrer Grundlinie, hier bezeichnet als $\cal Q$, angegeben. Die jeweilige Position h\"angt von der H\"ohe $h$ und der Tiefe $d$ der label box, sowie f\"unf weiteren Parametern ab: {\tt
\index{labelgapt}}, {\tt \index{labelgapb}}, {\tt
\index{labelstrutt}}, {\tt \index{labelstrutb}}, und {\tt
\index{labeloffset}}. Einsteiger sollten sich vor der scheinbaren Komplexit\"at nicht abschrecken lassen. Verschiedene Voreinstellungen sind in \pstjtree\/ bereits gesetzt und der Sachverhalt kann gr\"o\ss tenteils ignoriert werden, bis ein bestimmter Effekt erw\"unscht wird. Wenn es soweit ist und ein komplexes Positionsproblem auftaucht, wird die Anpassungsf\"ahigkeit klar verst\"andlich und angenehm zu handhaben sein. Die Positionsregeln sind unten angegeben, mit \value{parameter} kann der Wert bestimmt werden.

\ex \psset{unit=1em}
\quad
\pspicture[shift=-9](0,1.8)(10.2,12)%\psgrid
\pspolygon(0,6)(8,6)(8,9)(0,9)
\psline[linestyle=dashed](0,7)(8,7)
\qdisk(4,7){2pt}
\rput[lb](4.3,7.3){$\cal Q$}
\qdisk(2,11){2pt}
\rput[lb](2.3,11.3){$\cal P$}
\qdisk(2,4){2pt}
\rput[lb](2.3,4.3){$\cal P'$}
\psset{nodesep=0}
%
\pcline{|&lt;-|}(9,7)(9,4)
\lput(.5){\rput(2ex,0){$y_2$}}
\pcline{|&lt;-}(9,11)(9,7)   %|
\lput(.5){\rput(2ex,0){$y_1$}}
%
\pcline{|-&gt;|}(2,3)(4,3)
\lput(.5){\rput(0,-2ex){$x_1$}}
\endpspicture
\hfil
\vtop{\hsize=3in \openup.5ex
$x_1=\vert|labeloffset|\vert$\smallskip
$y_1=\mathop{\rm
Max}(h,\vert|labelstrutt|\vert)$\par
\hfill $+\vert|labelgapt|\vert$\smallskip
$y_2=\mathop{\rm
Max}(d,\vert|labelstrutb|\vert)$\par
\hfill $+\vert|labelgapb|\vert$\smallskip
}
\xe

Die Folge dieser Regeln ist die, dass der Kopfteil der label box einen Abstand von mindestens $\vert|labelgapt|\vert$ unterhalb des Terminusâ€˜ der folgenden Abzweigung oder des labels haben wird, und die Grundlinie der label box wird den Abstand $\vert|labelstrutt|\vert+\vert|labelgapt|\vert$ unterhalb des Terminusâ€˜ haben, au\ss er die label box ist ungew\"ohnlich hoch (z.B. $h&gt;\vert|labelstrutt|\vert$). Das bedeutet, dass label boxen niemals zu nah an die Abzweigungen oder Label, denen sie folgen, kommen und die Grundlinie der label boxen wird an unterschiedlichen Abzweigungen mit der gleichen H\"ohe angepasst werden, au\ss er die label box ist au\ss ergew\"ohnlich hoch. Die gleichen \"Uberlegungen betreffen auch die abh\"angigen Positonen der label box und des Punktes $\cal P'$.

\medskip
Es gibt noch den Parameter |normallabelstrut|, den man auf wahr oder falsch setzen kann: {\sl true\/} oder {\sl false}. Steht er auf wahr, so wird jedes Mal, wenn \jTree\ die Ma\ss angaben von label strut ausf\"uhren soll, es auf die Angaben der gegenw\"artigen Tex strut gesetzt. Speziell wird
\medskip
\hfil |\psset{labelstrut={\the\ht\strutbox} {\the\dp\strutbox}}|
\medskip
ausgef\"uhrt, wenn \jTree\ aufgerufen wird. |\psset{labelstrut=x y}| ist \"aquivalent zu |\psset{labelstrutt=x, labelstrutb= y}|. Benutzer m\"ussen sich nicht mit den Einstellungen zu label strut befassen, bis sie spezielle Effekte erw\"unschen, da \pstjtree\/ |normallabelstrut| auf {\sl true} setzt. Die vorgegebenen Einstellungen f\"ur die oberen und die unteren Labell\"ucke betr\"agt $\rm .35\,ex$. |\psset{labelgap=x}| ist \"aquivalent zu |\psset{labelgapt=x, labegagpb= x}|. 

\medskip

Der Effekt dieses Schemas ist unten dargestellt, mit |normallabelstrut| auf wahr und 
|labelgapt| sowie |labelgapb| auf $\rm .6\,ex$ gesetzt.
Die Gr\"o\ss e des gezeigten labels wird durch die Darstellung der Grundlinie verdeutlicht. Wenn die H\"ohe des labels \value{labelstrutt} nicht \"uberschreitet, dann werden die Grundlinien der labels einander angepasst, ansonsten ist die Spitze der label box entsprechend der Angabe in \value{labelgapt} unterhalb des Terminus' der Abzweigung, der es zugeordnet ist, entfernt.

\bigskip
\dimpuba=.8ex
\dimpubb=.5ex
\dimpubc=.5ex
\def\foop{\vrule width0pt height\dimpubb depth\dimpubc%
   \pspolygon(-\dimpuba,-\dimpubc)(\dimpuba,-\dimpubc)%
      (\dimpuba,\dimpubb)(-\dimpuba,\dimpubb)%
   \psline(-\dimpuba,0)(\dimpuba,0)%
   \global\advance\dimpubb by .68ex}%
\hfil\jtree[xunit=2cm,yunit=1cm,labelgap=.6ex]
\! =    &lt;wideleft&gt;{\foop}@A
   ^&lt;left&gt;{\foop}
   ^&lt;vert&gt;{\foop}
   ^&lt;right&gt;{\foop}
   ^&lt;wideright&gt;{\foop}.
\SpecialCoor
\pcline[style=dotted](-2.2,0|A)(2.2,0|A)
\endjtree
\bigskip

Manchmal ist es n\"utzlich, |labelstrutt| auf 0 zu setzen. In diesem Fall sieht das Resultat so aus:

\bigskip
\hfil\jtree[xunit=2cm,yunit=1cm,labelgap=.6ex,normallabelstrut=false,
   labelstrut=0pt 0pt]
\dimpubb=.5ex
\! =    &lt;wideleft&gt;{\foop}@A
   ^&lt;left&gt;{\foop}
   ^&lt;vert&gt;{\foop}
   ^&lt;right&gt;{\foop}
   ^&lt;wideright&gt;{\foop}.
\SpecialCoor
\endjtree


\bigskip
Viele Benutzer werden wahrscheinlich |normallabelstrut| auf {\sl wahr\/} setzen und nicht mehr weiter dran denken. Aber die meisten Benutzer werden die label gaps von Zeit zu Zeit \"andern wollen. Als Vergleich dienen die folgenden Beispiele. In einigen Anwendungen k\"onnte das zweite Beispiel zu bevorzugen sein. 

\excentered
\CLboxed
\jtree
\! = {A}
   &lt;vert&gt;{\psframebox{B}}
   :{C}{D}.
\endjtree
|endCLboxed \hfill
\jtree
\! = {A}
   &lt;vert&gt;{\psframebox{B}}
   :{C}{D}.
\endjtree
\kern3em

\bigskip
\CLboxed
\jtree
\! = {A}
   &lt;vert&gt;{\psframebox{B}}[labelgap=0]
   :{C}{D}.
\endjtree
|endCLboxed \hfill
\jtree
\! = {A}
   &lt;vert&gt;{\psframebox{B}}[labelgap=0]
   :{C}{D}.
\endjtree
\kern3em
\xe

Das wird beim Setzen mit (\gettag[qtree]) in Abschnitt 11 verwendet.
\medskip
Der folgende Vergleich ist ebenfalls interessant, da teilweise negative label gaps angegeben werden.\par

\excentered
\CLboxed
\jtree
\! = :({the}{(article)}) {dog}{(noun)}.
\endjtree
|endCLboxed \hfill
\jtree
\! = :({the}{(article)}) {dog}{(noun)}.
\endjtree
\kern3em
\bigskip
\CLboxed
\jtree
\! = :({the}{(article)}[labelgapt=-3pt])
   {dog}{(noun)}[labelgapt=-3pt].
\endjtree
|endCLboxed \hfill
\jtree
\! = :({the}{(article)}[labelgapt=-3pt])
   {dog}{(noun)}[labelgapt=-3pt].
\endjtree
\kern3em
\xe

Betrachten Sie die Beispiele 3 und 4 in Abschnitt 14 f\"ur Anwendungen des folgenden Tricks, der den Gebrauch an mehrzeiligen Labeln oft \"uberfl\"ussig macht. 
\medskip
Die label box kann horizontal durch die Benutzung von |labeloffset| platziert werden.

\excentered
\CLboxed
\jtree
\! = {musketeer}
   &lt;vert&gt;{musketeer}[labeloffset=1ex]
   &lt;vert&gt;{musketeer}[labeloffset=2ex].
\endjtree
|endCLboxed \hfil
\jtree
\! = {musketeer}
   &lt;vert&gt;{musketeer}[labeloffset=1ex]
   &lt;vert&gt;{musketeer}[labeloffset=2ex].
\endjtree
\xe

Betrachten Sie Beispiel \gettag[Dowty] in Abschnitt 14 f\"ur eine Illustration dessen, wie man mit dem \"Andern von |labeloffset| bestimmte Abstandsprobleme zwischen den labels l\"ost.

Es gibt noch einen weiteren Parameter, der f\"ur Label von Bedeutung ist. Der Inhalt, festgelegt durch |everylabel|\index*{everylabel}, wird in eine token-Liste aufgenommen, welche wiederum zu Beginn jedes Labels eingef\"ugt wird.

\excentered
\CLboxed
\jtree[everylabel=\sl]
\! = {a}
   :{a} {p}
   :{a} {(e)}.
\endjtree
|endCLboxed
\hfil
\jtree[everylabel=\sl]
\! = {a}
   :{a} {p}
   :{a} {(e)}.
\endjtree
\xe

\medskip

Wenn ein label mit |{\omit|\dots|}|\index*{+omit} oder |{\pnode|\dots|}| beginnt, ist der oben genannte vertikale Algorithmus umgangen und das label wird mit der Oberkante gem\"a\ss\ des Levels von $\cal P$ positioniert. $\cal P'$ wird dann direkt unter $\cal P$ gem\"a\ss\ des Levels der Unterkante der label box platziert. |labeloffset| arbeitet auch weiterhin. Vergleichen Sie folgendes:

\excentered
\CLboxed
\jtree[everylabel=\strut,labelgap=3pt]
\! = :{a} {\omit\psframebox{dog\strut}}
   :{a} {\pnode{A1}}
   :{a} {a}.
\endjtree
|endCLboxed
\hfil
\jtree[everylabel=\strut,labelgap=3pt]
\! = :{a} {\omit\psframebox{dog\strut}}
   :{a} {\pnode{A1}}
   :{a} {a}.
\endjtree

\bigskip
\CLboxed
\jtree[everylabel=\strut,labelgap=3pt]
\! = :{a} {\psframebox{dog\strut}}
   :{a} {}
   :{a} {a}.
\endjtree
|endCLboxed
\hfil
\jtree[everylabel=\strut,labelgap=3pt]
\! = :{a} {\psframebox{dog\strut}}
   :{a} {}
   :{a} {a}.
\endjtree
\xe


</pre></body></html>