Tikz: Diagramme: Die Unterebenen/Ebenen in einer Baumansicht horizontal und vertikal verschieben?

Tikz: Diagramme: Die Unterebenen/Ebenen in einer Baumansicht horizontal und vertikal verschieben?

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

  1. Verwenden Sie eine tabbingUmgebung zum Gestalten der Baumstruktur und tikzmarkzum Kommentieren der Knoten.
  2. Verwenden Sie entweder die graphsoder die treesBibliotheken innerhalb einer tikzpictureUmgebung.
  3. Verwenden Sie die Pakete dirtreeund forestin 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 multicolsund minipageverbesserte 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,

Aktuelles Layout

könnten zwischen ihren Eltern verschachtelt werden, wie im zweiten Layout mit der TikZ-Bibliothek treesundLoop Spaces dirtreeSchlüssel,

Bevorzugtes Layout

, 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 graphsund graphdrawingim Gegensatz zu den anderen TikZ-Bibliotheken eher abgetrennt zu sein. Die Beispiele, die ich gefunden habe, sind wie folgt

  • Mit dem triesSchlüssel wird das Layout teilweise korrigiert, es kommt jedoch zu Fehlern, wenn Untergraphen verwendet werden.
  • Die Einstellung grow down sepgibt die richtige Struktur vor, aber ich weiß nicht, wie ich sie weiter optimieren kann, und bei Untergraph-Layouts wird sie ignoriert.
  • Die Verwendung tree layoutermö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/edgesTaste 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 topathBibliothek, 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 treeszusammen 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 layoutich tree layoutfand graphdrawing.

verwandte Informationen