
Lo siento si está duplicado (estoy seguro de que está duplicado) pero realmente no puedo encontrar la manera de hacerlo en el manual. He creado la siguiente cadena de bloques.
Aquí puedes ver una línea curva entre el último y el tercer bloque. Pero quiero algo como esto:
Y la pregunta: ¿cómo puedo conectarlos de esta manera? Estoy seguro de que es bastante sencillo. MWE:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning,automata}
\begin{document}
\begin{tikzpicture}
\node[draw, thick, rectangle] (0) {Data arrival};
\node[draw, thick, rectangle, below of=0] (1) {Coks backoff procedure};
\node[draw, thick, rectangle, below of= 1] (2) {Get trigger-frame?};
\node[draw, thick, rectangle, below of= 2] (3) {Performs backoff procedure};
\node[draw, thick, shape aspect=2.7, diamond, below =0.5cm of 3] (4) {$b<0$?};
\path[>=latex, auto = right,every loop]
(0) edge[] node {} (1)
(1) edge node {} (2)
(2) edge node {} (3)
(3) edge node {} (4)
(4.east) edge[in=0, out=0, looseness=3] node[right] {N} (2.east)
;
\end{tikzpicture}
\end{document}
Respuesta1
El siguiente código utiliza las siguientes construcciones de ruta. Hay muchos más, consulta el manual de tikz o cualquiera delos muchos ejemplos en internet).
(a) -- (b)
describe un camino recto desdea
ab
.(a) -| (b)
describe una ruta desdea
hastab
, primero horizontalmente hasta que esté debajo o arribab
y luego verticalmente.(a) |- (b)
es lo mismo pero empezando verticalmente y luego continuando horizontalmente.++(1,-2)
denota una posición relativa a la anterior, 1 unidad a la derecha y 2 unidades abajo. También lo(a) -| ++(1,-2)
es un camino que comienza ena
, yendo 1 unidad a la derecha y 2 unidades hacia abajo. Como efecto secundario, la nueva posición inicial se ha desplazado hasta el final del camino. Entonces\draw (a) -| ++(1,-2) -| ++(-1,2);
Dibuja un rectángulo con la posición final nuevamente en
a
.+(1,-2)
es básicamente lo mismo que++(1,-2)
, excepto que la posición no se mueve.\draw (a) -| +(1,-2) -| +(-1,2);
Dibuja dos líneas con un ángulo cada una, una a la derecha
a
y otra a la izquierda dea
.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning,automata}
\begin{document}
\begin{tikzpicture}
[>=latex,
action/.style={draw,thick},
test/.style={draw, thick, shape aspect=2.7, diamond}
]
\node[action] (0) {Data arrival};
\node[action, below=of 0] (1) {Coks backoff procedure};
\node[action, below=of 1] (2) {Get trigger-frame?};
\node[action, below=of 2] (3) {Performs backoff procedure};
\node[test, below= 0.5cm of 3] (4) {$b<0$?};
\node[action, left=of 3] (5) {Do something};
\path[->]
(0) edge node {} (1)
(1) edge node {} (2)
(2) edge node {} (3)
(3) edge node {} (4);
\draw[->] (4) -- node[below right,pos=0.2]{N} ++(3,0) |- (2);
\draw[->] (4) -| node[below left,pos=0.1]{Y} (5);
\draw[->] (5) |- (2);
\draw[->] (4) --node[right] {maybe} +(0,-1.5);
\end{tikzpicture}
\end{document}
Respuesta2
Ligeramente modificadogernotrespuesta (para alegría y ejercicio):
\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{arrows, chains, positioning, shapes}% added chains
\makeatletter
\tikzset{supress chain/.code={\def\tikz@after@path{}}}% added for suppress joining of nodes
\makeatother
\begin{document}
\begin{tikzpicture}[
> = latex,
node distance = 5mm and 7mm,% added (not used default value)
start chain = going below,% activation of chains
action/.style = {draw, thick, on chain, join= by ->},% nodes are in chain and connected by ->
test/.style = {diamond, draw, thick, shape aspect=2.4, on chain, join= by ->}% node is in the chain and connected by -> with previous node
]
\node[action] (n0) {Data arrival};
\node[action] (n1) {Coks backoff procedure};
\node[action] (n2) {Get trigger-frame?};
\node[action] (n3) {Performs backoff procedure};
\node[test] (n4) {$b<0$?};
\node[action,
supress chain, % this node is not connected with join
left=of n3] (n5) {Do something};
\draw[->] (n4) -| node[below,pos=0.25] {Y} (n5); % left feedback loop
\draw[->] (n5) |- (n0); % left feedback loop
\draw[->] (n4) -| ([xshift=5mm] n3.east) node[below,pos=0.25] {N} |- (n2); % right feedback loop
\draw[->] (n4.south) -- node[right] {maybe} ++ (0,-1.1);
\end{tikzpicture}
\end{document}
Los resultados son casi los mismos: