
Dies unterscheidet sich geringfügig von der Verzeichnisliste wie beiTeXampleUndZeichnen einer Verzeichnisliste gemäß dem Tree-Befehl in TikZinsofern, als ich die endgültige Struktur mit Anmerkungen versehen möchte, die Links zwischen den Dateien zeigen. Ich brauche eine Möglichkeit, auf die Knoten im Baum zurückzugreifen, und die folgenden Optionen scheinen meine zu sein
- Verwenden Sie eine
tabbing
Umgebung zum Gestalten der Baumstruktur undtikzmark
zum Kommentieren der Knoten. - Verwenden Sie entweder die
graphs
oder dietrees
Bibliotheken innerhalb einertikzpicture
Umgebung. - Verwenden Sie die Pakete
dirtree
undforest
in einer Kombination mit den vorherigen Setups (1 oder 2).
Methode1lieferte mir die gewünschte Ausgabe, aber die Anmerkungen wurden unübersichtlich, wenn der Baum sich über mehr als eine Seite erstreckte. Die Verwendung von multicols
und minipage
verbesserte dies nicht. Ich überlege derzeit, die Methode2und wenn das nicht klappt, werde ich versuchen3.
Meine Hoffnung war, dass die Unterebenen im folgenden Baum, gezeichnet mit TikZ graphdrawings' tree layout
,
könnten zwischen ihren Eltern verschachtelt werden, wie im zweiten Layout mit der TikZ-Bibliothek trees
undLoop Spaces dirtree
Schlüssel,
, und nicht fächerförmig symmetrisch um sie herum verteilt.
Meine Annahme, wahrscheinlich ein Irrtum, war, dass die Graphenzeichnungsbibliothek es einem ermöglichen würde, die Untergraphen in die gewünschte Position zu bringen. Allerdings scheint die Schnittstelle für graphs
und graphdrawing
im Gegensatz zu den anderen TikZ-Bibliotheken eher abgetrennt zu sein. Die Beispiele, die ich gefunden habe, sind wie folgt
- Mit dem
tries
Schlüssel wird das Layout teilweise korrigiert, es kommt jedoch zu Fehlern, wenn Untergraphen verwendet werden. - Die Einstellung
grow down sep
gibt die richtige Struktur vor, aber ich weiß nicht, wie ich sie weiter optimieren kann, und bei Untergraph-Layouts wird sie ignoriert. - Die Verwendung
tree layout
ermöglicht Untergraphen, bietet jedoch keine große Kontrolle über deren Platzierung.
Der folgende Code erzeugt das erste Bild. Darin gebe ich einen Nudge-Wert für die erste Unterebene an, der die nächste Unterebene wie erwartet versetzt, aber nicht deren Knoten, das schwebende Rechteck oben rechts. Der Versuch, Phantomwerte anzugeben, schlägt ebenfalls fehl, wie an den fehlgeleiteten Pfeilen in der untersten Ebene zu sehen ist.
\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}
|-
Ich würde auch gerne die Linienspezifikation verwenden, kann diese aber scheinbar nicht innerhalb der /tikz/graphs/edges
Taste festlegen. Meines Wissens werden die Kanten mit to[...]
Befehlen und nicht mit den --
/ |-
/ -|
-Befehlen gezeichnet. Tatsächlich würde ich den Zeichenmechanismus gerne von to[...]
auf "herabstufen" |-
.Fork-Down-Edge-Stil mit Tikz 3.0-Baumdiagrammstellt eine ähnliche Frage. Die topath
Bibliothek, Abschnitt 70 in Version 3.0.1a des pgfmanual, erlaubt die Verwendung einer geraden Linie wie in, to[line]
erwähnt aber keine Winkel.
Derzeit versuche ich beides trees
zusammen graph
, wobei Ersteres das Layout und Letzteres die Anmerkungen übernimmt.
Ich denke, die Hauptfrage lautet wirklich: „Wie kann man die Platzierung von Untergraphen steuern, ohne sie zu verschieben?“. Ist das tatsächlich möglich? Das Lesen des Handbuchs lässt einen das vermuten, aber ich konnte kein gutes Beispiel dafür finden, wie das geht, und ich habe die Abschnitte und ziemlich gründlich durchgelesen, wie layered layout
ich tree layout
fand graphdrawing
.