
Quiero crear un nodo fantasma que no ocupe espacio en la parte superior del árbol, con fines de alineación, de modo que el primer nodo etiquetado del árbol se alinee con el número de ejemplo. Evidentemente, la configuración l sep=0pt
no es suficiente. ¿Qué más necesito configurar para lograr esto?
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}
Respuesta1
No puedo reproducir tu problema con la versión actual de forest
. Pero con la versión actual, puede agregar baseline
a cualquier nodo para convertirlo en la línea base del árbol.
(Comentario lingüístico no relacionado: "especificador" es el nombre de una posición sintáctica, no una categoría sintáctica o un nodo en el árbol, y generalmente nunca debería aparecer en el árbol).
\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}
Respuesta2
Realmente no necesitas una phantom
raíz aquí. Sólo necesita eliminar el borde del primer hijo y especificar la alineación de la raíz.
\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}
Respuesta3
Antes de v2.0.3, Forest establecía el nodo de línea base (el nodo cuyo ancla se alineará con la línea base) cada vez que baseline
se usaba la clave, incluso si se usaba en un phantom
nodo que no había sido dibujado por TikZ. Uno esperaría que esto resultara en un error de TikZ, pero no fue así.
Una vez que se creó un nodo en TikZ, su nombre persiste incluso fuera del grupo (supongo que esto podría considerarse un error), con el "nodo" ubicado en (0,0)
, como aquí:
\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}
Combine lo anterior con el hecho de que Forest reutiliza los nombres de los nodos (la raíz suele tener el nombre node@2
predeterminado) y obtendrá el problema. Si configura el nodo de línea base en raíz (como lo hace la biblioteca de lingüística) y convierte la raíz en fantasma (como se hace comúnmente para componer árboles uno al lado del otro), TikZ efectivamente establece la línea base en y=0
. El resultado se muestra en el ejemplo de OP.
Ahora, Forest 2.0.3 (donde draw tree method
se solucionó el problema introducido por) se volvió inteligente y dejó de indicarle a TikZ que estableciera el nodo de referencia en nodos fantasma (más precisamente, cualquier nodo que no esté dibujado). Por lo tanto, a partir de esta versión, la línea base ya no está establecida para árboles lingüísticos en paralelo. El resultado, como promete el manual de TikZ, es que "el extremo inferior de la imagen se coloca en la línea de base del texto circundante", como en el siguiente ejemplo. (Los nodos son draw
n para ver mejor la alineación).
\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}
Esto es lo que obtenemos al compilar el código anterior con Forest v2.0.3 - v2.1.4.
Para ser absolutamente claro: considero que este es el comportamiento esperado. Sin embargo, esto no significa que sea eldeseadocomportamiento... y es por eso que la biblioteca lingüística de v2.1.5 intenta ser más inteligente: hablando en términos generales, establece la línea de base en el "primer nodo no fantasma". En nuestro ejemplo, ese es el VP izquierdo, por lo que obtenemos:
(Observación temporal: Forest 2.1.5 ya está enviado a CTAN y también está disponible enGitHub.)
Ahora bien, es cierto que en el ejemplo de OP, todo esto no ayuda en absoluto, ya que "el primer nodo no fantasma" se resuelve en Jane is ...
. La nueva línea de base predeterminada en lingüística funciona para el caso común de árboles uno al lado del otro; para cualquier cosa fuera de lo común, simplemente configurebaseline
manualmente, como se recomienda enla respuesta de alan.