
Quero criar um nó fantasma que não ocupe espaço no topo da árvore, para fins de alinhamento, de modo que o primeiro nó rotulado da árvore se alinhe com o número do exemplo. Obviamente, a configuração l sep=0pt
não é suficiente. O que mais preciso definir para conseguir isso?
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}
Responder1
Não consigo reproduzir seu problema com a versão atual do forest
. Mas com a versão atual, você pode adicionar baseline
qualquer nó para torná-lo a linha de base da árvore.
(Comentário linguístico não relacionado: "especificador" é o nome de uma posição sintática, não uma categoria sintática ou nó na árvore, e geralmente nunca deve aparecer na árvore.)
\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}
Responder2
Você realmente não precisa de uma phantom
raiz aqui. Você só precisa remover a aresta do primeiro filho e especificar o alinhamento da raiz.
\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}
Responder3
Antes da v2.0.3, Forest definiria o nó da linha de base (o nó cuja âncora será alinhada à linha de base) sempre que a baseline
chave fosse usada, mesmo que fosse usada em um phantom
nó que não fosse desenhado pelo TikZ. Seria de se esperar que isso resultasse em um erro TikZ, mas isso não aconteceu.
Depois que um nó é criado no TikZ, seu nome persiste mesmo fora do grupo (acho que isso pode ser considerado um bug), com o "nó" posicionado em (0,0)
, como aqui:
\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 o que foi dito acima com o fato de que Forest reutiliza nomes de nós (a raiz geralmente é nomeada node@2
por padrão) e você terá o problema. Se você definir o nó da linha de base como root (como faz a biblioteca linguística) e tornar a raiz fantasma (como é comumente feito para compor árvores lado a lado), o TikZ efetivamente definirá a linha de base como y=0
. O resultado é mostrado pelo exemplo de OPs.
Agora, o Forest 2.0.3 (onde o problema introduzido por draw tree method
foi corrigido) ficou esperto e parou de instruir o TikZ a definir o nó de linha de base para nós fantasmas (mais precisamente, qualquer nó que não seja desenhado). Assim, a partir desta versão, a linha de base não está mais definida para árvores linguísticas lado a lado. O resultado, conforme prometido pelo manual do TikZ, é que “a extremidade inferior da imagem é colocada na linha de base do texto ao redor”, como no exemplo a seguir. (Os nós são draw
n para ver melhor o alinhamento.)
\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}
Isto é o que obtemos ao compilar o código acima com Forest v2.0.3 - v2.1.4.
Para ser absolutamente claro: considero este o comportamento esperado. Contudo, isso não significa que seja odesejadocomportamento ... e é por isso que a biblioteca linguística da v2.1.5 tenta ser mais inteligente: grosso modo, ela define a linha de base para o "primeiro nó não fantasma". No nosso exemplo, esse é o VP esquerdo, então obtemos:
(Observação temporária: Forest 2.1.5 já foi submetido ao CTAN e também está disponível emGitHub.)
Agora, é certo que, no exemplo do OP, tudo isso não ajuda em nada, já que "o primeiro nó não fantasma" resolve para Jane is ...
. O novo padrão de linha de base em linguística funciona para o caso comum de árvores lado a lado; para qualquer coisa fora do comum, basta configurar baseline
manualmente, conforme recomendado emA resposta de Alan.