\section Feinjustierungen

\vskip-1ex
\subsection {\sl baretopadjust}

Die Grundlinie einer von |\jtree...\endjtree| erstellen Box, ist f\"ur gew\"ohnlich die Grundlinie ihres Wurzellabels (root labels). Falls allerdings das root label leer ist, senkt es die Grundlinie zu tief ab, zumindest f\"ur meinen Geschmack. Ein Vergleich:

\bigskip
\qquad a.\quad \jtree \start {A} :{B} {C}.\endjtree
\hfil b.\quad \jtree[baretopadjust=0] \start :{B} {C}.\endjtree
\bigskip
\jTree\ nimmt die richtige Entscheidung wahr und erh\"oht das Baumdiagramm, wenn das root label leer ist, durch die Anzahl, die mit dem Parameter \index*{baretopadjust}|baretopadjust| spezifiziert wird. Die Standardeinstellung ist 1.4ex, aber man kann es einstellen, wie man will. So sieht die Standardeinstellung aus:
\bigskip
\qquad a.\quad \jtree \start {A} :{B} {C}.\endjtree
\hfil b.\quad \jtree[baretopadjust=1.4ex] \start :{B} {C}.\endjtree

\subsection {\sl treevshift}

\jTree\ bietet zudem den Parameter \index*{treevshift}|treevshift|, welcher standardm\"a\ss\/ig auf 0 gestellt ist. Er ist unabh\"angig von |baretopadjust| und kann dazu benutzt werden, das Diagramm hinauf- und hinunterzubewegen, falls gew\"unscht.

\excentered
\leavevmode\raise1.2em\hbox{\CLboxed
$\to$\qquad
\jtree[treevshift=1.2em]
\! = {A} :{B} {C}.
\endjtree
|endCLboxed}\hfil
$\to$\qquad
\jtree[treevshift=1.2em]
\! = {A} :{B} {C}.\endjtree
\xe

\subsection {\sl everytree}


Wenn man sagt, z.B., |\psset{everytree=\psset{style=treestyle}}|\index*{everytree}, und man hat |treestyle| mithilfe einer PSTricks-Styledefinition definiert, dann werden diese B\"aume in eben diesem Style erstellt. |\psset{everytree=«x\/»}| steckt {\sl x\/} in die Token-Liste |\jteverytree|, welche zu Beginn jeder |\jtree|\dots|\endjtree|-Konstruktion eingef\"ugt wird. Sie ist gruppiert, soda\ss\/ ihr Augenmerk eingeschr\"ankt auf die Baumerstellung liegt. Eingef\"ugt wird sie, bevor die |\jtree|-Parameter in Kraft treten, soda\ss\/ sie ggf. durch Parametereinstellungen \"uberschrieben wird.


\medskip
Wenn man will, kann man |\jteverytree| direkt bestimmen. Dasselbe gilt im \"ubrigen auch f\"ur 
|everylabel|, welches die Tokenliste |\jteverylabel| verwendet.

\subsection Eigene Zweige

\ftag{\the\secno.\the\subsecno}[customsec]

\jTree\ zeichnet Zweige mithilfe des PSTricks-Makros |\psline|, aber es tut dies in einer indirekten Art und Weise. Eigentlich ruft sie das Makro |\branch@type| zum Zeichnen auf; und \jTree\ enth\"alt die Zeile |\let\branch@type=\psline|. Wenn der Benutzer sagt, da\ss\/ |\psset{branch=\customline}| sein soll, dann wird |\branch@type| durch eine |\customline|, anstatt einer |\psline| erstellt. Falls eine |\customline| hinzureichend definiert wurde, dann wird sie verwendet, um Zweige zu zeichnen. Ein paar alternative Makros zum Zeichnen von Zweigen sind bereits in \jTree\ bereitgestellt. Damit der unternehmungslustige Benutzer z.B. Zickzack-Zweige zeichnen kann, mu\ss\/ er die |\customline| nur entsprechend dem PSTricks-Modell definieren. \jTree\ bietet zudem |\blank| (siehe Beispiel \gettag[Zubi] in Abschnitt 14 f\"ur eine nutzbringende Darstellung), |\brokenbranch| (siehe Beispiel \gettag[Frampton2] in Abschnitt 14), und |\etcbranch| (siehe Beispiel \gettag[Frampton1] in Abschnitt 14).%
\index*{branch}\index*{+blank}\index*{+brokenbranch}%,
\index*{+etcbranch}

\excentered
\CLboxed
\jtree[xunit=3em,yunit=2em]
\! = :{normal}()
        [branch=\brokenbranch]{broken}
   :[branch=\blank]{blank}()
      [branch=\etcbranch]{etc}.
\endjtree
|endCLboxed
\hfill
\jtree[xunit=3em,yunit=2em]
\! = :{normal}()
        [branch=\brokenbranch]{broken}
   :[branch=\blank]{blank}()
      [branch=\etcbranch]{etc}.
\endjtree
\kern1ex
\xe

Die Proportion von ``etc branch'', die gepunktet (dotted) ist, wird kontrolliert durch den Parameter \index*{etcratio}|etcratio|. \pstjtree\ enth\"alt |\psset{etcratio=.75}|, aber der Benutzer kann falls n\"otig selbst Hand anlegen. Der Style vor dem gepunkteten Teil wird definiert durch


\CLframed \newpsstyle{etc}{nodesepB=0,nodesepA=1pt,linestyle=dotted,
   linewidth=1.2pt,dotsep=2pt}
|endCLframed

Der Benutzer kann die Spezifikation dieses Styles mit einer neuen Spezifikation \"uberschreiben.

\medskip
\pstjtree\/ enth\"alt die Makrodefinition:

\CLframed \def\etc{[branch=\etcbranch,scaleby=.7]}|endCLframed
\index*{+etc}\ftagpage[etcpage]

Also k\"onnte man schreiben:

\excentered
\CLboxed
\jtree
\! = :{A} :{B} :{C}() \etc.
\endjtree
|endCLboxed
\hfil
\jtree
\! = :{A} :{B} :{C}() \etc.
\endjtree
\xe

\subsection Die Pseudo-Parameter {\sl dirA\/} und {\sl dirB}

\index*{dirA}\index*{dirB}%
%
Nehmen wir an, da\ss\/ man w\"unscht |\nccurve| zu benutzen, um eine Kurve zu zeichnen, die einen Knoten A in der selben Richtung hinterl\"asst, in der ein standardisierter linker Zweig A hinterlassen w\"urde. Dazu stellst man |angleA| auf den entsprechenden Wert. Der richtige Winkel kann errechnet werden durch einfache Trigonometrie, aber die Kalkulation h\"angt vom Verh\"altnis der psxunits zu den psyunits ab. Es ist w\"unschenswert, eine trigonometrische Kalkulation an der Seite zu vermeiden und einen Baum so zu kodieren, da\ss\/ Ver\"anderungen an einer Einheit nicht die Geometrie im Ganzen ver\"andert. |dirA| und |dirB| wurden zur L\"osung dieses Problems eingef\"uhrt. \hbox{|\psset{dirA=(-1:-1)}|} wird den Winkel |angleA| so setzen, da\ss\/ ein durch |\nccurve| gezeichneter Pfad den Anfangsknoten in der Richtung des Vektors $(-1,-1)$ bel\"asst. Als Pseudoparameter genannt (meine Terminologie), wird er, weil  |\psset{dirA=«x\/»}| ausgef\"uhrt wird, um einen Effekt an |angleA|, und nicht an |dirA| zu erzielen. Es sei zu bemerken, da\ss\/ ein Doppelpunkt benutzt wird, damit der |\psset|-Parser nicht verwirrt wird. |dirB| arbeitet fast auf die gleiche Weise wie |angleB|, aber der Vektor, welcher |dirB| bestimmt, deutet r\"uckw\"arts entlang der Kurve, welche die Richtung ist, die |angleB| mi\ss\/t.


\medskip
Die Benutzung von dirA unten bewirkt, da\ss\/ der ``kurvige Zweig'' (curved branch) sich zu den geraden Zweigen einreiht. Zu beachten ist, da\ss\/ die Kurve ziemlich steif (ein hoher Wert von |ncurv|) eingestellt ist, soda\ss\/ sie sich gen\"ugend hinaus beugt.

\excentered
\CLboxed
\jtree
\! = @A1
   <right>
   :{B}
   :{C} {D}@A2 .
\nccurve[dirA=(-1:-1),angleB=200,
   ncurv=2,nodesepA=0]{A1}{A2}
\endjtree\kern1em
|endCLboxed
\hfill
\jtree \! = @A1
   <right>
   :{B}
   :{C} {D}@A2 .
\nccurve[dirA=(-1:-1),angleB=200,
   ncurv=2,nodesepA=0]{A1}{A2}
\endjtree\kern1em
\xe

Das Beispiel in \gettag[Frampton2] ist eine gute Darstellung des Nutzens dieses Parameters.


\endinput
\def\andthen{\kern1pt:\enspace}

\subsection Complete list of \jTree\ parameters

|labelgapt|, |labelgapb|, |labelgap|\andthen The center of the
top of the label box is placed a distance |labelgapt| below the
previous termination point.  The termination point of the label
box is placed a distance |labelgapb| below the bottom edge of the
label box. |labelgap| is a pseudo-parameter, used for its effect.
|\psset{labelgap=�\sl x\/�}| has the effect
|\psset{labelgapt=�\sl x\/�,labelgapb=�\sl x\/�}|.

\medskip
|scaleby|\andthen |\psset{scaleby=�\sl x\enspace y\/�}| has the effect
of scaling all branches, triangles, and vartriangles by {\sl x\/}
horizontally and {\sl y\/} vertically.  If {\sl y\/} is omitted,
scaling by {\sl x\/} in both directions is carried out.

\medskip
|everytree|\andthen
The effect of
|\psset{everytree=�$\alpha$�}| is
|\jteverytree={�$\alpha$�}|.  This token list is inserted every
time that |\jtree| is invoked.

\medskip
|everylabel|\andthen
The effect of
|\psset{everylabel=�$\alpha$�}| is
|\jteverylabel={�$\alpha$�}|.  This token list is inserted every
time that a label box is created, unless cancelled by |\omit|.

\medskip
|treevshift|, |baretopadjust|\thinspace:\enspace These parameters
control the relation between the baseline of the assembled tree
and the baseline of the root label.  The baseline of the root
label is a distance $\sl d=v+b\mskip2mu$ above the baseline of
the tree, where $\sl v$ is |treevshift|; and $\sl b$ is
|baretopadjust| if the root label has 0 height, otherwise is~0.

\medskip
|triratio|\andthen This determines the termination point of
triangles, and the skew of vartriangles.  See Chapter~5 for
discussion.

\medskip
|branch|\andthen The control sequence |\branch@type| is used to
draw the connections in branches.  \pstjtree\/ contains
|\let\branch@type=\psline|.  The effect of
|\psset{branch=\usermacro}| is |\let\branch@type=\usermacro|. It
is assumed that |\usermacro| has the argument structure\smallskip
\hfil|\def\usermacro(#1,#2)(#3,#4){|\dots
\smallskip

\medskip
|etcratio|\andthen \pstjtree\/ provides the macro
|\etcbranch| as an alternative to |\psline|.  It draws a line
which begins as a solid line but ends as a dotted line.  Its use
is to indicate an elided tree tail.  |etcratio| determines what
fraction of the line is dotted.

\medskip
|dirA|, |dirB|\andthen These are pseudo-parameters, used to set
the parameters |angleA| and |angleB|, respectively.
|\psset{dirA=(�\sl a\/�:�\sl b\/�)}| sets angleA so that
the direction corresponding to angleA is the same as the
direction corresponding to the vector $\sl\langle a,b\rangle$.
Setting |dirB| has a similar effect on |angleB|.




