Tikz: Gráficos: ¿Cambiar las subcapas/niveles horizontal y verticalmente en un diseño de árbol?

Tikz: Gráficos: ¿Cambiar las subcapas/niveles horizontal y verticalmente en un diseño de árbol?

Esto difiere ligeramente de la lista de directorios como enEjemplo de textoyDibujar un directorio que enumera al estilo del comando de árbol en TikZen eso me gustaría anotar la estructura final que muestra los enlaces entre los archivos. Necesito algún medio para referirme a los nodos del árbol y las siguientes parecen ser mis opciones

  1. Utilice un tabbingentorno para diseñar la estructura de árbol aprovechando tikzmarkpara anotar los nodos.
  2. Utilice las bibliotecas graphso treesdentro de un tikzpictureentorno.
  3. Utilice los paquetes dirtreey foresten alguna combinación con las configuraciones anteriores (1 o 2).

Método1me dio el resultado deseado, pero las anotaciones se confundieron si el árbol se extendía a más de una página, usando multicolsy minipageno mejoró esto. Actualmente estoy considerando el método2y si eso falla lo intentaré3.

Mi esperanza era que las subcapas en el siguiente árbol, dibujadas usando TikZ graphdrawings' tree layout,

Diseño actual

podrían anidarse entre sus padres, como en el segundo diseño usando la biblioteca TikZ treesyEspacio de bucle dirtreellave,

Diseño preferido

, y no distribuidos simétricamente en abanico a su alrededor.

Mi suposición, probablemente errónea, fue que la biblioteca de dibujo de gráficos permitiría manipular los subgrafos en la posición preferida. Sin embargo, la interfaz de graphsy graphdrawingparece estar bastante segregada a diferencia de las otras bibliotecas de TikZ. Los ejemplos que he encontrado son los siguientes.

  • La triesclave corrige parte del diseño, pero se rompe si usa subgrafos.
  • La configuración grow down sepproporciona la estructura correcta, pero no veo cómo modificarla más y se ignora para los diseños de subgrafos.
  • El uso tree layoutpermite subgrafos pero no tiene mucho control sobre su ubicación.

El siguiente código produce la primera imagen. Dentro de él, especifico un valor de empuje para la primera subcapa que compensa la siguiente subcapa como se esperaba, pero no su nodo, el rectángulo flotante en la esquina superior derecha. Intentar proporcionar valores fantasma también falla, como lo ven las flechas errantes en la capa más baja.

\documentclass[tikz]{standalone}%
\usepackage{tikz}%
%
\usepackage{luatex85}%
\usepackage{menukeys}%
\usetikzlibrary{graphs}%
\usetikzlibrary{graphdrawing}%
\usegdlibrary{trees}%
\usegdlibrary{layered}%
\usegdlibrary{circular}%
%
\makeatletter
\newcount\dirtree@lvl
\newcount\dirtree@plvl
\newcount\dirtree@clvl
\def\dirtree@growth{%
  \ifnum\tikznumberofcurrentchild=1\relax
  \global\advance\dirtree@plvl by 1
  \expandafter\xdef\csname dirtree@p@\the\dirtree@plvl\endcsname{\the\dirtree@lvl}
  \fi
  \global\advance\dirtree@lvl by 1\relax
  \dirtree@clvl=\dirtree@lvl
  \advance\dirtree@clvl by -\csname dirtree@p@\the\dirtree@plvl\endcsname
  \pgf@xa=\tikzleveldistance
  \pgf@ya=-\tikzsiblingdistance
  \pgf@ya=\dirtree@clvl\pgf@ya
  \pgftransformshift{\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
  \ifnum\tikznumberofcurrentchild=\tikznumberofchildren
  \global\advance\dirtree@plvl by -1
  \fi
}
%
\tikzset{
  dirtree/.style={
    growth function=\dirtree@growth,
    level distance =1.2em,
    sibling distance =1.2em,
    growth parent anchor=west,
%     every node/.style={anchor=west},
%     every parent node/.style={anchor=south west},
    every child node/.style={anchor=west},
    edge from parent path={(\tikzparentnode.south west) ++(0.5*\tikzleveldistance,0) |- (\tikzchildnode\tikzchildanchor)}
  }
}
\makeatother
%
\newmenumacro{\nixpath}[/]{hyphenatepathswithfolder}
\newmenumacro{\nixfile}[/]{hyphenatepaths}
\newmenumacro{\winpath}[bslash]{hyphenatepathswithfolder}
\newmenumacro{\winfile}[bslash]{hyphenatepaths}
%
\begin{document}%
\normalsize%
\begin{tikzpicture}%
\graph [tree layout, grow'=right]
 {"00"/"\winpath{E:\CheatSheets\Algorithms}" -> 
  {"01"/"\winpath{Genetic}";
   "02"/"\winpath{Linear_Programming}" -> 
   {"03"/"\winpath{build}";
    "04"/"\winfile{Affine_Scaling.pseudo.tex}"};
   "05"/"\winpath{build}";
   "06"/"\winfile{Algorithms.tex}";
   "07"/"\winfile{Genetic.tex}";
   "08"/"\winfile{input.tex}";
   "09"/"\winfile{input2.tex}";
   "10"/"\winfile{input3.tex}"}};%
\end{tikzpicture}%
\begin{tikzpicture}%
\node (00) {\winpath{E:\CheatSheets\Algorithms}}[dirtree]
 child {node (01) {\winpath{Genetic}}}
 child {node (02) {\winpath{Linear_Programming}}
 child {node (03) {\winpath{build}}}
  child {node (04) {\winfile{Affine_Scaling.pseudo.tex}}}}
 child {node (05) {\winpath{build}}}
 child {node (06) {\winfile{Algorithms.tex}}}
 child {node (07) {\winfile{Genetic.tex}}}
 child {node (08) {\winfile{input.tex}}}
 child {node (09) {\winfile{input2.tex}}}
 child {node (10) {\winfile{input3.tex}}} ;%
\graph [use existing nodes]
{06      ->[in=0, out=0, looseness=3] {04     }};%
\end{tikzpicture}%
\end{document}

También me gustaría utilizar la |-especificación de línea, pero parece que no puedo configurarla dentro de la /tikz/graphs/edgesclave. Tengo entendido que los bordes se dibujan con to[...]comandos versus los comandos --// |-. -|Efectivamente me gustaría "bajar de categoría" el mecanismo de dibujo de to[...]a|- .Estilo de borde descendente de bifurcación con gráfico de árbol Tikz 3.0hace una pregunta similar. La topathbiblioteca, sección 70 en la versión 3.0.1a del pgfmanual, permite usar una línea recta como en to[line]pero no menciona los codos.

Actualmente estoy probando ambos treesy graphjuntos, el primero haciendo el diseño y el segundo las anotaciones.

Creo que la pregunta principal realmente es "cómo controlar la ubicación de los subgrafos más allá de empujarlos". ¿Es esto realmente posible? Leer el manual hace que uno lo crea, pero no pude encontrar un buen ejemplo sobre cómo hacerlo y revisé las secciones layered layout, tree layouty graphdrawingbastante a fondo.

información relacionada