posicionamento de nós em uma floresta

posicionamento de nós em uma floresta

Eu segui a solução baseada em floresta deste postFazendo uma árvore de diretórios (simples)para criar uma estrutura de diretórios. À direita de cada arquivo e nome, quero adicionar seu caminho completo. Os caminhos completos também devem ser alinhados à esquerda. Eu descobri esta solução suja:

\documentclass{standalone}
\usepackage{forest}
\usetikzlibrary{positioning}
\begin{document}
\begin{forest}
  for tree={
    font=\ttfamily,
    grow'=0,
    child anchor=west,
    parent anchor=south,
    anchor=west,
    calign=first,
    s sep=6pt,
    inner sep=0pt,
    edge path={
      \noexpand\path [draw, \forestoption{edge}]
      (!u.south west) +(6pt,0) |- (.child anchor)\forestoption{edge label};
    },
    before typesetting nodes={
      if n=1
      {insert before={[,phantom]}}
      {}
    },
    fit=band,
    before computing xy={l=5mm},
  }
  [a,name=a
    [b
      [c
        [d]
      ]
    ]
    [e
      [f]
      [b]
    ]
  ]
  %
  \node[right of=a,node distance=2cm] (desc) {\tt /a};
  \node[below=13pt of desc.west,anchor=west] (desc) {\tt /a/b};
  \node[below=13pt of desc.west,anchor=west] (desc) {\tt /a/b/c};
  \node[below=13pt of desc.west,anchor=west] (desc) {\tt /a/b/c/d};
  \node[below=12pt of desc.west,anchor=west] (desc) {\tt /a/e};
  \node[below=13pt of desc.west,anchor=west] (desc) {\tt /a/e/f};
  \node[below=13pt of desc.west,anchor=west] (desc) {\tt /a/e/b};
\end{forest}

\end{document}

Isso é exibido assim:

exemplo de árvore

Parece bom, mas eu gostaria de encontrar uma solução limpa que evite distâncias de codificação entre caminhos completos.

Responder1

Sugiro simplificar um pouco sua árvore usando forked edge, with fork sep=0pt. (Observe que isso requer \usepackage[edges]{forest}.) Incluí cada descrição de caminho como um novo nó filho, então usado if n children=0{no edge, tier=desc}{l-=4mm}para evitar que as últimas arestas sejam desenhadas e mantê-las alinhadas na ldimensão (que é para isso que tieré usado). Se n children≠0 então a ldimensão é reduzida em 4mm. Você também pode encurtar (na mesma quantidade ou em uma quantidade diferente) se quiser que a descrição do caminho esteja mais próxima da árvore.

insira a descrição da imagem aqui

\documentclass{article}
\usepackage[edges]{forest}

\begin{document}
\begin{forest}
  for tree={
    font=\ttfamily,
    grow'=0,
    anchor=west,
    calign=first,
    s sep=6pt,
    inner sep=0pt,
    forked edge,
    fork sep=0pt,
    l sep=3mm,
    if n children=0{no edge, tier=desc}{l-=4mm}
  }
  [a
    [/a]
    [b
    [/a/b]
      [c
      [/a/b/c]
        [d
        [/a/b/c/d]
        ]
      ]
    ]
    [e
    [/a/e]
      [f
      [/a/e/f]
      ]
      [b
      [/a/e/b]
      ]
    ]
  ]
\end{forest}
\end{document}

informação relacionada