Formate nós terminais específicos e remova linhas entre eles e seus pais usando floresta

Formate nós terminais específicos e remova linhas entre eles e seus pais usando floresta

Ao usar oforestpacote 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/, TikZa 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):

exemplo de árvore de saída desejada

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 xcolorpacote (por exemplo [DP\\\textcolor{blue}{the apple}], .

Idealmente, gostaria de poder aplicar programaticamente algo como o seguinte código dentro do forestambiente:

for tree={
    if n children=0{
        text=blue
    }{},
}

No entanto, adicionar o trecho acima produz a seguinte saída indesejada:

exemplo-árvore de 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 forestou 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 edgea um nó evita que a aresta de seu pai seja desenhada.

A combinação l sep=0no nó pai e l=0no nó filho os deixa verticalmente próximos um do outro.

Acho o resultado mais agradável se eu definir adicionalmente inner ysep=0o 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 tabularambiente 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}

efeito de modificações na árvore tipográfica

informação relacionada