Ao usar oforest
pacote para desenhar árvores de sintaxe linguística, como evitar que linhas sejam desenhadas entre nós terminais específicos e seus pais, mantendo-os como "nós" separados, conforme vistos por forest
/, TikZ
a fim de facilitar a formatação programática?
Aqui está um exemplo da saída desejada (produzida usando minha solução alternativa atual, conforme fornecido no MWE abaixo):
Minha solução atual envolve o seguinte, que requer muita intervenção manual:
- Eu removo linhas entre um "nó terminal" e seu "pai" criando um único nó e forçando uma quebra de linha entre a categoria sintática (se presente) e sua realização lexical (se presente), por exemplo
[DP\\the apple]
. - Nós terminais que possuem itens lexicais têm esses itens decorados manualmente, colorindo-os com o
xcolor
pacote (por exemplo[DP\\\textcolor{blue}{the apple}]
, .
Idealmente, gostaria de poder aplicar programaticamente algo como o seguinte código dentro do forest
ambiente:
for tree={
if n children=0{
text=blue
}{},
}
No entanto, adicionar o trecho acima produz a seguinte saída indesejada:
Eu acho que a solução pode ter algo a ver com a configuração de um tipo de "nó terminal lexical" (ou seja, nós terminais que são de um tipo lexical em vez de vazio ou de uma categoria sintática) e, em seguida, aplicar apenas a decoração de texto aos nós desse tipo. No entanto, não tenho certeza de como fazer isso forest
ou se é uma solução boa/ideal.
Exemplo mínimo de trabalho (solução alternativa atual)
\documentclass[a4paper]{article}
% ----- Package Imports -----
\usepackage{amsmath, amssymb, amsthm, mathtools} % Math enhancements
\usepackage{newpxtext, newpxmath} % Palatino fonts (load after amssymb)
\usepackage[svgnames]{xcolor} % Custom colours
%\usepackage[style=ieee]{biblatex} % Bibliography
\usepackage[linguistics]{forest} % Linguistic syntax trees
\begin{document}
\begin{forest}
[CP
[\phantom{X}]
[C'
[C]
[TP
[\phantom{X},name=TP-spec]
[T'
[T\\\textcolor{blue}{$\varnothing_{\text{past}}$},name=TP-head]
[VoiceP
[DP\\\textcolor{blue}{Bill}]
{\draw[->] () to[out=south west,in=west,distance=2cm] (TP-spec);}
[Voice'
[Voice\\\textcolor{blue}{$\varnothing_{\text{active}}$}]
[VP
[DP]
[V'
[V\\{[}FORM preterite{]}\\\textcolor{blue}{ate}]
[DP\\\textcolor{blue}{the apple}]
]
]
]
]
]
]
]
]
\end{forest}
\end{document}
Responder1
Aplicar no edge
a um nó evita que a aresta de seu pai seja desenhada.
A combinação l sep=0
no nó pai e l=0
no nó filho os deixa verticalmente próximos um do outro.
Acho o resultado mais agradável se eu definir adicionalmente inner ysep=0
o filho (isso deixa a categoria e o conteúdo lexical ainda mais próximos) e substituir o Forest align
(que coloca o conteúdo do nó em um tabular
ambiente e, assim, criar algum espaço vertical extra) pelo TikZ's align
: \forestset{align/.style={/tikz/align={#1}}}
.
\documentclass[a4paper]{article}
% ----- Package Imports -----
\usepackage[svgnames]{xcolor} % Custom colours
\usepackage{amsmath, amssymb, amsthm, mathtools} % Math enhancements
\usepackage{newpxtext, newpxmath} % Palatino fonts (load after amssymb)
%\usepackage[style=ieee]{biblatex} % Bibliography
\usepackage[linguistics]{forest} % Linguistic syntax trees
\forestset{align/.style={/tikz/align={#1}}}
\begin{document}
\begin{forest}
for tree={
if n children=1{
l sep=0,
for 1={no edge, l=0, inner ysep=0, blue}
}{},
}
[CP
[\phantom{X}]
[C'
[C]
[TP
[\phantom{X},name=TP-spec]
[T'
[T[$\varnothing_{\text{past}}$,name=TP-head]]
[VoiceP
[DP[Bill]
{\draw[->] () to[out=south west,in=west,distance=2cm] (TP-spec);}
]
[Voice'
[Voice[$\varnothing_{\text{active}}$]]
[VP
[DP]
[V'
[V\\{[}FORM preterite{]}[ate]]
[DP[the apple]]
]
]
]
]
]
]
]
]
\end{forest}
\end{document}