Formatieren Sie bestimmte Endknoten und entfernen Sie Linien zwischen ihnen und ihren Eltern mit Hilfe von forest

Formatieren Sie bestimmte Endknoten und entfernen Sie Linien zwischen ihnen und ihren Eltern mit Hilfe von forest

Bei Verwendung derforestPaket 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):

Beispiel-gewünschter-Ausgabebaum

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 xcolorPaket 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 forestUmgebung anzuwenden:

for tree={
    if n children=0{
        text=blue
    }{},
}

Das Hinzufügen des obigen Snippets führt jedoch zu der folgenden unerwünschten Ausgabe:

Beispiel-unerwünschter-Ausgabebaum

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 forestoder 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 edgeauf einen Knoten wird verhindert, dass die Kante zu seinem übergeordneten Knoten gezeichnet wird.

Die Kombination von l sep=0auf dem übergeordneten Knoten und l=0auf dem untergeordneten Knoten bringt sie vertikal näher zueinander.

Das Ergebnis gefällt mir am besten, wenn ich zusätzlich inner ysep=0auf das untergeordnete Element setze (dadurch kommen sich Kategorie und lexikalischer Inhalt noch etwas näher) und Forests align(das den Knoteninhalt in eine tabularUmgebung 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}

Auswirkungen von Änderungen auf den Schriftsatzbaum

verwandte Informationen