
Tal vez esta pregunta sea ingenua, pero ¿cuándo tendré que usarla edge
en lugar de --
? y ¿cómo puedo usarla edge
para replicar el mismo resultado del comando de dibujo convencional de ruta --
?
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning,shapes.geometric,calc}
\begin{document}
\begin{tikzpicture}[>=latex',very thick,align=center]
\tikzset{%
block/.style= {draw, rectangle, text width=2cm,minimum height=1cm,align=center}
}
\node [block] (start1) {Start1};
\node [block, right = 1cm of start1.east] (end1) {End1};
\node [block, below= 2cm of start1] (start2) {Start2};
\node [block, right = 1cm of start2] (end2) {End2};
\path[draw,->]
(start1.north) -- ++(0,1cm) -- ++(3.25cm,0) -- (end1.north);
\path[draw,->]
(start2.north) edge ++(0,1cm) edge ++(3.25cm,0) edge (end2.north);
\end{tikzpicture}
\end{document}
Respuesta1
Esta respuesta no intenta cubrir todos los detalles, sino más bien dar una explicación de "primer paso" de algunas de las diferencias.
edge
construye una ruta separada que puede tener atributos completamente diferentes de la ruta principal. A diferencia de los puntos del camino principal, un borde no se mueve a ninguna parte.
Esto no es realmente lo que sucede, pero escomo siesto pasa:
Supongamos que comenzamos con un camino
\path [draw=blue, -{Stealth[]}] (0,0)
.- Hasta ahora no hemos ido a ninguna parte. Hemos dicho que este camino debe estar dibujado y que debe tener una determinada punta de flecha. Nos hemos desplazado al origen para el inicio del camino.
Así que continuamos con
++(1,0)
.- Esto nos mueve 1 unidad hacia la derecha, aún sin dibujar nada.
Ahora sumamos
-- ++(1,0)
.- Esto nos mueve otro 1 hacia la derecha y, esta vez, el camino está dibujado. Si ponemos
;
aquí, obtendremos la punta de nuestra flecha aquí. Pero no hacemos eso, por lo que la propina aún no es necesaria.
- Esto nos mueve otro 1 hacia la derecha y, esta vez, el camino está dibujado. Si ponemos
Ahora, en lugar de continuar por el camino principal, agregamos
edge ++(0,1}
.- Podemos pensar en TikZ como si detuviera temporalmente la construcción del camino principal y tomara un desvío para hacer un pequeño camino lateral. Este camino va desde nuestra posición actual hasta 1 unidad. Por defecto, hereda los atributos de la ruta principal, por lo que es azul con una flecha. Cuando
edge
se completa la operación, TikZ vuelve al punto en el que inició el desvío. Es como entrar en una calle lateral para comprar pan en la panadería de camino a recoger a los niños del colegio. Una vez que tienes el pan, regresas a la calle principal para continuar hacia la escuela.
- Podemos pensar en TikZ como si detuviera temporalmente la construcción del camino principal y tomara un desvío para hacer un pequeño camino lateral. Este camino va desde nuestra posición actual hasta 1 unidad. Por defecto, hereda los atributos de la ruta principal, por lo que es azul con una flecha. Cuando
Ahora añadimos
-- ++(1,0)
a nuestro camino.- Así que, una vez que volvemos del desvío, continuaremos nuestra recta hacia la derecha.
A continuación, agregamos
edge [draw=red, -{Circle[fill=green]}] ++(0,1)
.- Esta es otra diversión, pero esta vez dibujamos el borde en rojo y cambiamos la punta de la flecha. Por supuesto, esto sólo se aplica a nuestra diversión.
- Tenga en cuenta que esto no es posible con una ruta normal: no puede hacer que una parte de ella sea roja y otra azul, por ejemplo, pero puede
edge
tener atributos bastante diferentes de los de la ruta principal y de cualquier otroedge
dibujado como parte de la ruta. mismo\path
comando.
Finalmente completamos el camino con
-- ++(1,0);
.
Código completo:
\documentclass[tikz,border=10pt,multi]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}[x=25mm, y=25mm, line width=1pt]
\path [draw=blue, -{Stealth[]}] (0,0) ++(1,0) -- ++(1,0) edge ++(0,1) -- ++(1,0) edge [draw=red, -{Circle[fill=green]}] ++(0,1) -- ++(1,0);
\foreach \i/\j in {(0,0)/{(0,0)},(1,0)/{++(1,0)},(2,0)/{++(1,0)},(3,0)/{++(1,0)},(4,0)/{++(1,0)}} \path \i node [below, ] {\j};
\foreach \i/\j in {(2,1)/{++(0,1)},(3,1)/{++(0,1)}} \path \i node [right, ] {\j};
\end{tikzpicture}
\end{document}
Re. MWE
En el caso del ejemplo de la pregunta, por supuesto, puedes simplemente escribir
\documentclass[tikz,border=10pt,multi]{standalone}
\usetikzlibrary{arrows.meta,positioning}
\begin{document}
\begin{tikzpicture}
[
>=Latex,
very thick,
align=center,
block/.style= {draw, rectangle, text width=2cm,minimum height=1cm,align=center},
]
\node [block] (start1) {Start1};
\node [block, right = 1cm of start1.east] (end1) {End1};
\node [block, below= 2cm of start1] (start2) {Start2};
\node [block, right = 1cm of start2] (end2) {End2};
\path [draw, ->] (start1.north) -- ++(0,1cm) -- ++(3.25cm,0) -- (end1.north);
\path [draw, ->] (start2.north) -- ++(0,1cm) -- ++(3.25cm,0) -- (end2.north);
\end{tikzpicture}
\end{document}
para producir
Sin embargo, supongo que le gustaría saber cómo hacer este todo en uno, por así decirlo.
Los comandos de nodo y ruta anteriores podrían reemplazarse por las siguientes 2 rutas
\path [draw, ->] node [block] (start1) {Start1} (start1.north) |- ++(3.25cm,1cm) node [block, right=1cm of start1] (end1) {End1} -- (end1);
\path [draw, ->] node [block, below= 2cm of start1] (start2) {Start2} (start2.north) |- ++(3.25cm,1cm) node [block, right=1cm of start2] (end2) {End2} -- (end2);
que producen una producción idéntica o, de manera más concisa pero menos obvia, con
\coordinate (start0);
\foreach \i [evaluate=\i as \j using int(\i-1), evaluate=\j as \k using \j*2] in {1,2}
\path [draw, ->] node [block, below=\k cm of start\j] (start\i) {Start\i} (start\i.north) |- ++(3.25cm,1cm) node [block, right=1cm of start\i] (end\i) {End\i} -- (end\i);