Eu gostaria de desenhar um DAG (gráfico acíclico direcionado) que cresce à direita, onde cada nó é espaçado dos outros nós em um tamanho fixo, mas alguns nós de tempo podem estar faltando, então eu gostaria de ainda contabilizar esse espaço :
Por exemplo, a distância entre F e D deve ser a mesma distância de A e D.
Ao mesmo tempo, gostaria de traçar atrás dele linhas de ajuda que ajudem a entender como elas estão corretamente espaçadas
No primeiro exemplo, encontrei apenas uma maneira de especificar onde exatamente os nós deveriam estar (embora, em vez disso, seria ideal para eles se posicionarem automaticamente)
\begin{tikzpicture}[
grow=right,
level distance=200mm,
sibling distance=105mm]
\node[shape=circle,draw=black] (A) at (0, 0){A};
\node[shape=circle,draw=black] (B) at (1,-1) {B};
\node[shape=circle,draw=black] (C) at (1,1) {C};
\node[shape=circle,draw=black] (D) at (2,0) {D};
\node[shape=circle,draw=black] (F) at (4,0) {F} ;
\path [<-](A) edge node[right] {} (B);
\path [<-](A) edge node[right] {} (C);
\path [<-](B) edge node[right] {} (D);
\path [<-](C) edge node[right] {} (D);
\path [<-](D) edge node[right] {} (F);
\end{tikzpicture}
No segundo caso, só encontrei uma maneira de construir árvores - que não consigo espaçar
\begin{tikzpicture}[
grow=right,
level distance=20mm,
sibling distance=10mm,
every node/.style={draw=black,border=1mm,circle,inner sep=5pt}
]
\draw [help lines, dashed,ystep=5, xstep=2] (0,0) grid(15, 5);
\node {0}
child { node {1} }
child { node {2}
child { node {3}
child { node {4} }
child { node {5} }
child { node {6} } }
child { node {7} } };
;
\end{tikzpicture}
Existe uma maneira de conseguir o que quero fazer?
Responder1
Elementos de código relevantes:
A biblioteca
positioning
permite posicionar nós em relação a outros nós usandoabove
,below
etc. A distância é controlada com a opçãonode distance
. Para colocar os centros dos nós a uma distância fixa, você precisa da opçãoon grid
(caso contrário, a distância é medida entre as bordas dos nós).Para fazer com que os nós cubram a grade em segundo plano, use
fill=white
com os nós.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}%
[vertex/.style={circle,draw=black,fill=white},
node distance=2cm,
on grid,
>=latex
]
\draw[gray!50] (-1,-2) grid (5,2);
\node[vertex] (A) {A};
\node[vertex,above right=1cm and 1cm of A] (B) {B};
\node[vertex,below=of B] (C) {C};
\node[vertex,right=of A] (D) {D};
\node[vertex,right=of D] (F) {F};
\draw[->]
(C) edge (A)
(B) edge (A)
(D) edge (C)
(D) edge (B)
(F) edge (D);
\end{tikzpicture}
\end{document}