
Talvez esta pergunta seja ingênua, mas quando precisarei usar edge
em vez de --
?, e como posso usar edge
para replicar a mesma saída do comando de desenho convencional do caminho --
?
\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}
Responder1
Esta resposta não tenta cobrir todos os detalhes, mas sim fornecer uma explicação de “primeira passagem” de algumas das diferenças.
edge
constrói um caminho separado que pode ter atributos totalmente diferentes do caminho principal. Ao contrário dos pontos no caminho principal, uma aresta não se move para lugar nenhum.
Isso não é realmente o que acontece, mas éAté pareceisto acontece:
Suponha que comecemos com um path
\path [draw=blue, -{Stealth[]}] (0,0)
.- Até agora, não fomos a lugar nenhum. Dissemos que esse caminho deveria ser traçado e que deveria ter uma certa ponta de seta. Passamos para a origem para o início do caminho.
Então continuamos com
++(1,0)
.- Isso nos move 1 unidade para a direita, ainda sem desenhar nada.
Agora adicionamos
-- ++(1,0)
.- Isso nos move mais 1 para a direita e, desta vez, o caminho está traçado. Se colocarmos um
;
aqui, obteremos a ponta da flecha aqui. Mas não fazemos isso, então a dica ainda não é necessária.
- Isso nos move mais 1 para a direita e, desta vez, o caminho está traçado. Se colocarmos um
Agora, em vez de continuar o caminho principal, adicionamos
edge ++(0,1}
.- Podemos pensar no TikZ como uma interrupção temporária da construção do caminho principal e um desvio para fazer um pequeno caminho lateral. Este caminho vai da nossa posição atual até 1 unidade. Por padrão, ele herda os atributos do caminho principal, portanto é azul com uma seta. Quando a
edge
operação for concluída, o TikZ retorna ao ponto em que iniciou o desvio. É como entrar em uma rua lateral para pegar pão na padaria no caminho para pegar as crianças na escola. Depois de conseguir o pão, você volta para a rua principal para continuar a estudar.
- Podemos pensar no TikZ como uma interrupção temporária da construção do caminho principal e um desvio para fazer um pequeno caminho lateral. Este caminho vai da nossa posição atual até 1 unidade. Por padrão, ele herda os atributos do caminho principal, portanto é azul com uma seta. Quando a
Agora adicionamos
-- ++(1,0)
ao nosso caminho.- Então, como voltamos do desvio, continuaremos em linha reta pela direita.
A seguir, adicionamos
edge [draw=red, -{Circle[fill=green]}] ++(0,1)
.- Esta é outra diversão, mas desta vez desenhamos a borda em vermelho e mudamos a ponta da seta. Isto só se aplica ao nosso desvio, é claro.
- Observe que isso não é possível com um caminho normal - você não pode tornar parte dele vermelho e parte dele azul, por exemplo, mas um
edge
pode ter atributos bem diferentes do caminho principal e de qualquer outroedge
desenhado como parte do caminho mesmo\path
comando.
Finalmente, completamos o caminho com
-- ++(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}
Ré. MWE
No caso do exemplo da pergunta, você pode, é claro, apenas escrever
\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 produzir
No entanto, presumo que você gostaria de saber como fazer isso tudo em um, por assim dizer.
Os comandos node e path acima podem ser substituídos pelos 2 caminhos a seguir
\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 produzem resultados idênticos, ou, de forma mais concisa, mas menos óbvia, com
\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);