Bosque: ¿Crear un nodo fantasma que no ocupe espacio?

Bosque: ¿Crear un nodo fantasma que no ocupe espacio?

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=0ptno 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}

Árbol con nodo superior vacío que ocupa espacio no deseado

Respuesta1

No puedo reproducir tu problema con la versión actual de forest. Pero con la versión actual, puede agregar baselinea 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}

salida de código

Respuesta2

Realmente no necesitas una phantomraí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}

alineación sin fantasma

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 baselinese usaba la clave, incluso si se usaba en un phantomnodo 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}

El error de nombre de nodo persistente de TikZ

Combine lo anterior con el hecho de que Forest reutiliza los nombres de los nodos (la raíz suele tener el nombre node@2predeterminado) 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 methodse 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 drawn 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.

compilado por v2.0.3 - 2.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:

compilado por 2.1.5

(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.

información relacionada