summaryrefslogtreecommitdiff
path: root/info/translations/pst-jtree/de/03-labels.tex
blob: 047718fa73424690ba75135925d9f3b2e3feca04 (plain)
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
\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{|<-|}(9,7)(9,4)
\lput(.5){\rput(2ex,0){$y_2$}}
\pcline{|<-}(9,11)(9,7)   %|
\lput(.5){\rput(2ex,0){$y_1$}}
%
\pcline{|->|}(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>\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]
\! =    <wideleft>{\foop}@A
   ^<left>{\foop}
   ^<vert>{\foop}
   ^<right>{\foop}
   ^<wideright>{\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
\! =    <wideleft>{\foop}@A
   ^<left>{\foop}
   ^<vert>{\foop}
   ^<right>{\foop}
   ^<wideright>{\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}
   <vert>{\psframebox{B}}
   :{C}{D}.
\endjtree
|endCLboxed \hfill
\jtree
\! = {A}
   <vert>{\psframebox{B}}
   :{C}{D}.
\endjtree
\kern3em

\bigskip
\CLboxed
\jtree
\! = {A}
   <vert>{\psframebox{B}}[labelgap=0]
   :{C}{D}.
\endjtree
|endCLboxed \hfill
\jtree
\! = {A}
   <vert>{\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}
   <vert>{musketeer}[labeloffset=1ex]
   <vert>{musketeer}[labeloffset=2ex].
\endjtree
|endCLboxed \hfil
\jtree
\! = {musketeer}
   <vert>{musketeer}[labeloffset=1ex]
   <vert>{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