TikZ-pgf und Verwendung eines Graphenzeichnungsalgorithmus durch Referenzieren vorhandener Knoten

TikZ-pgf und Verwendung eines Graphenzeichnungsalgorithmus durch Referenzieren vorhandener Knoten

graphsIch möchte die Bibliothek in TikZ zusammen mit den Algorithmen verwenden, graphdrawingum ein Diagramm mit vielen Knoten und Verbindungen zu erstellen, die ich später herstellen und beschriften werde.

Ich habe eine kompliziertere Version davon:

\tikz [nodes={fill=white, font=\footnotesize},
>={Stealth[round,sep]}]
\graph[layered layout, branch down sep, nodes=draw, edges=rounded corners]
{
"cat" -- "dog" -- {"cow", "goat", "sheep"};
"cow" -- "bull";
"dog" -- "rooster" -- "duck";
};

Ich möchte die Knoten auflistenvorweg, und beschrifte sie z. B. als a, b, c. Ich möchte dann die Referenzbeschriftungen beim Erstellen der Ketten verwenden.

Der Grund dafür ist, dass der eigentliche Text für jeden Knoten viel länger ist als „cat“ und ich die umständliche Eingabe von „supercalifragalistic“ bei jeder neuen Verbindung vermeiden möchte.

Im Idealfall hätte ich so etwas:

\begin{tikzpicture}
\tikz [nodes={fill=white, font=\footnotesize},
>={Stealth[round,sep]}]
\node (a) {cat}; 
\node (b) {dog};
\node (c) {cow};
\node (d) {goat};
\node (e) {sheep};
\node (f) {bull};
\node (g) {rooster};
\node (i) {duck};
\graph[use existing nodes = true, layered layout, branch down sep, nodes=draw, edges=rounded corners]
{
"cat" -- "dog" -- {"cow", "goat", "sheep"};
"cow" -- "bull";
"dog" -- "rooster" -- "duck";
(a) -- (b) -- { (c), (d), (e)};
(c) -- (f);
(b) -- (g) -- (i);
};
\end{tikzpicture}

Bei diesem Ansatz treten bei mir jedoch Fehler auf, darunter attempting to create edge between nodes that are not in the graph:

Ist das möglich? Ich habe einen etwas anderen Ansatz gesehen, der funktioniert, und zwar wie folgt:

\begin{tikzpicture}[new set=import nodes]
\begin{scope}[nodes={set=import nodes}] % make all nodes part of this set
\node [red] (a) at (0,1) {$a$};
\node [red] (b) at (1,1) {$b$};
\node [red] (d) at (2,1) {$d$};
\end{scope}
\graph{
(import nodes);
% "import" the nodes
a -> b -> c -> d -> e;
};
\end{tikzpicture}

Allerdings gibt es hier keinen Graph-Zeichenalgorithmus ( layered layout) und man muss die Position der Knoten angeben, was ich vermeiden möchte.

Antwort1

Sie können sie einfach deklarieren, ohne sie zu verbinden, indem Sie den

<node name>/<node text>

Syntax.

Und verweisen Sie dann <node name>beim tatsächlichen Verbinden der Knoten darauf.

Code

\documentclass[tikz,convert]{standalone}
\usetikzlibrary{arrows.meta,graphs,graphdrawing}
\usegdlibrary{layered}
\begin{document}
\tikz[
  nodes={fill=white, font=\footnotesize},
  >={Stealth[round,sep]}
]
\graph[
  layered layout,
  branch down sep,
  nodes={draw, text height=height("a"), text depth=+0pt},
  edges=rounded corners
] {
  a/cat, b/dog, c/cow, d/goat, e/sheep, f/bull, g/rooster, i/duck,
  a -- b -- {c, d, e},
  c -- f,
  b -- g -- i,
};
\end{document}

Ausgabe

Bildbeschreibung hier eingeben

verwandte Informationen