Bei Verwendung derforest
Paket zum Zeichnen linguistischer Syntaxbäume: Wie kann man verhindern, dass zwischen bestimmten Endknoten und ihren übergeordneten Knoten Linien gezeichnet werden, diese aber dennoch aus der Sicht von forest
/ als separate „Knoten“ beibehalten TikZ
, um die programmgesteuerte Formatierung zu erleichtern?
Hier ist ein Beispiel für die gewünschte Ausgabe (erstellt mit meiner aktuellen Problemumgehung, wie im MWE unten angegeben):
Meine aktuelle Problemumgehung umfasst Folgendes und erfordert zu viele manuelle Eingriffe:
- Ich entferne Zeilen zwischen einem „Endknoten“ und seinem „übergeordneten Knoten“, indem ich einen einzelnen Knoten erstelle und dann einen Zeilenumbruch zwischen der syntaktischen Kategorie (falls vorhanden) und ihrer lexikalischen Realisierung (falls vorhanden) erzwinge, z. B.
[DP\\the apple]
. - Bei Endknoten mit lexikalischen Elementen werden diese Elemente manuell dekoriert, indem sie mit dem
xcolor
Paket eingefärbt werden (z. B. )[DP\\\textcolor{blue}{the apple}]
.
Idealerweise möchte ich in der Lage sein, etwa den folgenden Code programmgesteuert innerhalb der forest
Umgebung anzuwenden:
for tree={
if n children=0{
text=blue
}{},
}
Das Hinzufügen des obigen Snippets führt jedoch zu der folgenden unerwünschten Ausgabe:
Ich denke, die Lösung könnte etwas damit zu tun haben, eine Art „lexikalischen Endknoten“ einzurichten (also Endknoten, die von einem lexikalischen Typ sind, statt leer oder einer syntaktischen Kategorie) und dann die Textdekoration nur auf Knoten dieses Typs anzuwenden. Ich bin mir jedoch nicht sicher, wie ich das in machen soll forest
oder ob es eine gute/optimale Lösung ist.
Minimales funktionierendes Beispiel (aktuelle Problemumgehung)
\documentclass[a4paper]{article}
% ----- Package Imports -----
\usepackage{amsmath, amssymb, amsthm, mathtools} % Math enhancements
\usepackage{newpxtext, newpxmath} % Palatino fonts (load after amssymb)
\usepackage[svgnames]{xcolor} % Custom colours
%\usepackage[style=ieee]{biblatex} % Bibliography
\usepackage[linguistics]{forest} % Linguistic syntax trees
\begin{document}
\begin{forest}
[CP
[\phantom{X}]
[C'
[C]
[TP
[\phantom{X},name=TP-spec]
[T'
[T\\\textcolor{blue}{$\varnothing_{\text{past}}$},name=TP-head]
[VoiceP
[DP\\\textcolor{blue}{Bill}]
{\draw[->] () to[out=south west,in=west,distance=2cm] (TP-spec);}
[Voice'
[Voice\\\textcolor{blue}{$\varnothing_{\text{active}}$}]
[VP
[DP]
[V'
[V\\{[}FORM preterite{]}\\\textcolor{blue}{ate}]
[DP\\\textcolor{blue}{the apple}]
]
]
]
]
]
]
]
]
\end{forest}
\end{document}
Antwort1
Durch die Anwendung no edge
auf einen Knoten wird verhindert, dass die Kante zu seinem übergeordneten Knoten gezeichnet wird.
Die Kombination von l sep=0
auf dem übergeordneten Knoten und l=0
auf dem untergeordneten Knoten bringt sie vertikal näher zueinander.
Das Ergebnis gefällt mir am besten, wenn ich zusätzlich inner ysep=0
auf das untergeordnete Element setze (dadurch kommen sich Kategorie und lexikalischer Inhalt noch etwas näher) und Forests align
(das den Knoteninhalt in eine tabular
Umgebung stellt und dadurch zusätzlichen vertikalen Raum schafft) durch TikZs überschreibe align
: \forestset{align/.style={/tikz/align={#1}}}
.
\documentclass[a4paper]{article}
% ----- Package Imports -----
\usepackage[svgnames]{xcolor} % Custom colours
\usepackage{amsmath, amssymb, amsthm, mathtools} % Math enhancements
\usepackage{newpxtext, newpxmath} % Palatino fonts (load after amssymb)
%\usepackage[style=ieee]{biblatex} % Bibliography
\usepackage[linguistics]{forest} % Linguistic syntax trees
\forestset{align/.style={/tikz/align={#1}}}
\begin{document}
\begin{forest}
for tree={
if n children=1{
l sep=0,
for 1={no edge, l=0, inner ysep=0, blue}
}{},
}
[CP
[\phantom{X}]
[C'
[C]
[TP
[\phantom{X},name=TP-spec]
[T'
[T[$\varnothing_{\text{past}}$,name=TP-head]]
[VoiceP
[DP[Bill]
{\draw[->] () to[out=south west,in=west,distance=2cm] (TP-spec);}
]
[Voice'
[Voice[$\varnothing_{\text{active}}$]]
[VP
[DP]
[V'
[V\\{[}FORM preterite{]}[ate]]
[DP[the apple]]
]
]
]
]
]
]
]
]
\end{forest}
\end{document}