
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
- Utilice un
tabbing
entorno para diseñar la estructura de árbol aprovechandotikzmark
para anotar los nodos. - Utilice las bibliotecas
graphs
otrees
dentro de untikzpicture
entorno. - Utilice los paquetes
dirtree
yforest
en 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 multicols
y minipage
no 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
,
podrían anidarse entre sus padres, como en el segundo diseño usando la biblioteca TikZ trees
yEspacio de bucle dirtree
llave,
, 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 graphs
y graphdrawing
parece estar bastante segregada a diferencia de las otras bibliotecas de TikZ. Los ejemplos que he encontrado son los siguientes.
- La
tries
clave corrige parte del diseño, pero se rompe si usa subgrafos. - La configuración
grow down sep
proporciona la estructura correcta, pero no veo cómo modificarla más y se ignora para los diseños de subgrafos. - El uso
tree layout
permite 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/edges
clave. 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 topath
biblioteca, 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 trees
y graph
juntos, 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 layout
y graphdrawing
bastante a fondo.