TikZ-pgf y uso del algoritmo de dibujo de gráficos haciendo referencia a nodos existentes

TikZ-pgf y uso del algoritmo de dibujo de gráficos haciendo referencia a nodos existentes

Quiero usar la graphsbiblioteca en TikZ junto con los graphdrawingalgoritmos para crear un gráfico con muchos nodos y conexiones que haré y etiquetaré más adelante.

Tengo una versión más complicada de esto:

\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";
};

Lo que quiero hacer es enumerar los nodos.antemanoy etiquételos como, por ejemplo, a, b, c. Luego quiero usar las etiquetas de referencia al crear las cadenas.

La razón por la que quiero hacer esto es porque el texto real de cada nodo es mucho más largo que "cat" y quiero evitar el desorden de escribir "supercalifragalistic" cada vez que quiero establecer una nueva conexión.

Lo ideal sería tener algo como esto:

\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}

Pero recibo errores con este enfoque, incluido attempting to create edge between nodes that are not in the graph.

es posible? He visto un enfoque ligeramente diferente que funciona, de la siguiente manera:

\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}

Pero aquí no hay un algoritmo de dibujo de gráficos ( layered layout) y hay que especificar la posición de los nodos, lo cual quiero evitar.

Respuesta1

Puedes simplemente declararlos sin conectarlos usando el

<node name>/<node text>

sintaxis.

Y luego haga referencia a ellos <node name>cuando conecte los nodos.

Código

\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}

Producción

ingrese la descripción de la imagen aquí

información relacionada