
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=0pt
reicht 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}
Antwort1
Ich kann Ihr Problem mit der aktuellen Version von nicht reproduzieren forest
. Aber mit der aktuellen Version können Sie baseline
jedem 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}
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}
Antwort3
Vor v2.0.3 hat Forest den Basisknoten (den Knoten, dessen Anker an der Basislinie ausgerichtet wird) immer dann gesetzt, wenn der baseline
Schlüssel verwendet wurde, selbst wenn er auf einem Knoten verwendet wurde, phantom
der 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}
Kombinieren Sie das oben Gesagte mit der Tatsache, dass Forest Knotennamen wiederverwendet (die Wurzel wird normalerweise node@2
standardmäß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 method
wurde 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 draw
n, 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.
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:
(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.