floresta - mover verticalmente um nó

Sep 25 2020

Aqui está uma árvore básica.

\documentclass{article}

\RequirePackage{forest}
\useforestlibrary{linguistics}

\begin{document}

\begin{forest}
    for tree = {grow' = 0, sn edges},
    [
        [A]
        [B
            [C
                [D]
                [E]]
            [F]]]
\end{forest}

\end{document}

Isso produz os seguintes gráficos, onde gostaria que o A ficasse verticalmente acima do D, conforme indicado pelas linhas desenhadas à mão. Existe uma maneira fácil e / ou elegante de fazer isso?

Respostas

4 SašoŽivanović Sep 25 2020 at 10:17

Este é um trabalho para fit=band. Quando você coloca esta opção em um nó, Forest não calcula o contorno preciso de sua subárvore, mas o coloca em uma "faixa" - o menor retângulo contendo a subárvore que se estende até a direção do crescimento, ou seja, ocupa o espaço ocupado pela linha azul na imagem de OPs. Consulte a seção 3.7.2 do manual para mais informações e fotos.

\documentclass{article}

\RequirePackage{forest}
\useforestlibrary{linguistics}

\begin{document}

\begin{forest}
    for tree = {grow' = 0, sn edges},
    [
        [A, fit = band]
        [B
            [C
                [D]
                [E]]
            [F]]]
\end{forest}

\end{document}

Neste caso particular, pode ser desejável ajustar o s sepdo nó raiz, para que o nó A não termine muito ao norte. Lembre-se de que s sepcontrola a distância entre os contornos das subárvores do irmão. Acima, o contorno da subárvore A é uma banda "infinita" que se estende além de D, de modo que a raiz s sepcontrola efetivamente essa distância.

\documentclass{article}

\RequirePackage{forest}
\useforestlibrary{linguistics}

\begin{document}

\begin{forest}
    for tree = {grow' = 0, sn edges},
    [,s sep=0
        [A, fit = band]
        [B
            [C
                [D]
                [E]]
            [F]]]
\end{forest}

\end{document}

PS Para ver as distâncias mais claramente, gosto de adicionar drawdentro do for treeenquanto trabalho na árvore. Fazer isso no segundo exemplo deixa claro que o norte de D e o sul de A estão alinhados e que qualquer distância vertical restante entre A e D se deve a inner ysepesses nós.

4 Zarko Sep 25 2020 at 03:52

Uma solução possível é:

\documentclass{article}

\RequirePackage{forest}
\useforestlibrary{linguistics}

\begin{document}

\begin{forest}
    for tree = {grow' = 0, sn edges},
    [
        [A
            [,no edge] % <---
        ]
        [B
            [C
                [D]
                [E]]
            [F]]]
\end{forest}

\end{document}

4 AndréC Sep 25 2020 at 04:03

Você pode criar um nó invisível adicional com [,phantom]

\documentclass{article}

\RequirePackage{forest}
\useforestlibrary{linguistics}

\begin{document}

\begin{forest}
    for tree = {grow' = 0, sn edges},
    [
        [A][,phantom]%<-- invisible node
        [B
            [C
                [D]
                [E]]
            [F]]]
\end{forest}

\end{document}