Wald: Phantomknoten erstellen, der keinen Platz einnimmt?

Wald: Phantomknoten erstellen, der keinen Platz einnimmt?

Ich möchte einen Phantomknoten erstellen, der oben im Baum keinen Platz einnimmt, um ihn auszurichten, sodass der erste beschriftete Knoten des Baums mit der Beispielnummer übereinstimmt. Das Einstellen l sep=0ptreicht offensichtlich nicht aus. Was muss ich sonst noch einstellen, um dies zu erreichen?

MWE:

\documentclass{article}

\usepackage[linguistics]{forest}
\usepackage{expex}

\begin{document}

\ex\begin{forest}
[, phantom
    [{Jane is ...}, tier=words]
    [AjP
        [Specifier
            [very, tier=words]
        ]
        [Aj'
            [Aj
                [fond, tier=words]
            ]
            [PP
                [{of Cheetah}, roof, tier=words]
            ]
        ]
    ]
]
\end{forest}\xe

\end{document}

Baum mit leerem oberen Knoten, der unerwünschten Platz einnimmt

Antwort1

Ich kann Ihr Problem mit der aktuellen Version von nicht reproduzieren forest. Aber mit der aktuellen Version können Sie baselinejedem Knoten etwas hinzufügen, um diesen Knoten zur Basislinie des Baums zu machen.

(Unabhängiger linguistischer Kommentar: „Spezifizierer“ ist der Name einer syntaktischen Position, nicht einer syntaktischen Kategorie oder eines Knotens im Baum und sollte im Allgemeinen nie im Baum erscheinen.)

\documentclass{article}

\usepackage[linguistics]{forest}
\usepackage{expex}

\begin{document}

\ex
\begin{forest}
[,phantom,
    [{Jane is ...}, tier=words]
    [AjP,baseline
        [Specifier
            [very, tier=words]
        ]
        [Aj'
            [Aj
                [fond, tier=words]
            ]
            [PP
                [{of Cheetah}, roof, tier=words]
            ]
        ]
    ]
]
\end{forest}
\xe

\end{document}

Ausgabe des Codes

Antwort2

Hier ist eigentlich gar keine Wurzel erforderlich phantom. Sie müssen lediglich die Kante für das erste Kind entfernen und die Ausrichtung für die Wurzel angeben.

\documentclass{article}

\usepackage[linguistics]{forest}
\usepackage{expex}

\begin{document}

\ex
\begin{forest}
  where n children=0{tier=words}{}
  [AjP, calign child=2
    [Jane is \dots, no edge]
      [Specifier
          [very]
      ]
      [Aj'
          [Aj
              [fond]
          ]
          [PP
              [of Cheetah, roof]
          ]
      ]
  ]
\end{forest}
\xe

\end{document}

Ausrichtung ohne Phantom

Antwort3

Vor v2.0.3 hat Forest den Basisknoten (den Knoten, dessen Anker an der Basislinie ausgerichtet wird) immer dann gesetzt, wenn der baselineSchlüssel verwendet wurde, selbst wenn er auf einem Knoten verwendet wurde, phantomder nicht von TikZ gezeichnet wurde. Man würde erwarten, dass dies zu einem TikZ-Fehler führen würde, aber das war nicht der Fall.

Wenn ein Knoten in TikZ erstellt wurde, bleibt sein Name auch außerhalb der Gruppe bestehen (ich vermute, das könnte als Fehler betrachtet werden), wobei der „Knoten“ an der Position steht (0,0), wie hier:

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
  \node(foo){};
\end{tikzpicture}

\begin{tikzpicture}
  \draw[->] (-1,1) -- (foo.center) -- (1,1);
\end{tikzpicture}

\end{document}

Der persistente Knotennamenfehler von TikZ

Kombinieren Sie das oben Gesagte mit der Tatsache, dass Forest Knotennamen wiederverwendet (die Wurzel wird normalerweise node@2standardmäßig benannt), und Sie erhalten das Problem. Wenn Sie den Basisknoten auf die Wurzel setzen (wie es die Linguistikbibliothek tut) und die Wurzel zu einem Phantom machen (wie es üblicherweise getan wird, um nebeneinander liegende Bäume zu setzen), setzt TikZ die Basislinie effektiv auf y=0. Das Ergebnis wird durch das Beispiel von OP gezeigt.

Nun draw tree methodwurde Forest 2.0.3 (wo das durch verursachte Problem behoben wurde) schlau und wies TikZ nicht mehr an, Basisknoten auf Phantomknoten zu setzen (genauer gesagt auf alle Knoten, die nicht gezeichnet sind). Ab dieser Version wird die Basislinie daher für nebeneinander liegende linguistische Bäume nicht mehr gesetzt. Das Ergebnis ist, wie im TikZ-Handbuch versprochen, dass „das untere Ende des Bildes auf die Basislinie des umgebenden Textes gesetzt wird“, wie im folgenden Beispiel. (Die Knoten sind drawn, um die Ausrichtung besser zu erkennen.)

\documentclass{article}

\usepackage[linguistics]{forest}
\usepackage{gb4e}

\begin{document}
\begin{exe}
\ex\begin{forest}
  for tree=draw
  [,phantom
    [VP[V][DP]]
    [VP[V][DP]]
  ]
\end{forest}
\end{exe}
\end{document}

Dies ist, was wir erhalten, wenn wir den obigen Code mit Forest v2.0.3 – v2.1.4 kompilieren.

kompiliert von v2.0.3 - 2.1.4

Um es ganz klar zu sagen: Ich halte das für das erwartete Verhalten. Das bedeutet jedoch nicht, dass es dasgewünschtVerhalten ... und deshalb versucht die Linguistikbibliothek von v2.1.5, intelligenter zu sein: Grob gesagt setzt sie die Basislinie auf den „ersten Nicht-Phantomknoten“. In unserem Beispiel ist das der linke VP, also erhalten wir:

zusammengestellt von 2.1.5

(Vorläufige Anmerkung: Forest 2.1.5 ist bereits bei CTAN eingereicht und auch verfügbar aufGitHub.)

Zugegebenermaßen hilft das alles im Beispiel des OP überhaupt nicht, da „der erste Nicht-Phantomknoten“ sich auflöst in Jane is .... Der neue Basisstandard in der Linguistik funktioniert für den üblichen Fall von nebeneinander liegenden Bäumen; für alles Ungewöhnliche setzen Sie einfachbaseline manuell einstellen, wie in empfohlenAlans Antwort.

verwandte Informationen