
也許這個問題很天真,但是我什麼時候需要使用而edge
不是--
?edge
--
\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}
答案1
這個答案並不試圖涵蓋所有細節,而是對一些差異進行「初步」解釋。
edge
建構一個單獨的路徑,它可以具有與主路徑完全不同的屬性。與主路徑上的點不同,邊緣不會移動到任何地方。
這並不是真正發生的事情,但它是彷彿有時候是這樣的:
假設我們從一條路徑開始
\path [draw=blue, -{Stealth[]}] (0,0)
。- 到目前為止,我們實際上還沒有去任何地方。我們已經說過應該繪製這條路徑並且它應該有一個特定的箭頭尖端。我們已經移動到路徑起點的原點。
所以我們繼續
++(1,0)
。- 這將我們向右移動 1 個單位,但仍然沒有繪製任何內容。
現在我們加入
-- ++(1,0)
.- 這使我們又向右移動 1,這一次,路徑被繪製出來。如果我們在
;
這裡放一個,我們就會在這裡得到我們的箭頭。但我們不這麼做,所以還不需要提示。
- 這使我們又向右移動 1,這一次,路徑被繪製出來。如果我們在
現在,我們不再繼續主路徑,而是添加
edge ++(0,1}
.- 我們可以把 TikZ 想像成暫時停止主路建設,採取分流,做一條小支路。這條路徑從我們目前的位置向上 1 個單位。預設情況下,它繼承了主路徑的屬性,因此它是帶有箭頭的藍色。當
edge
操作完成後,TikZ 會回到開始轉移的位置。這就像在接孩子們放學的路上溜進一條小巷從麵包店買一些麵包一樣。拿到麵包後,你就回到大街繼續上學。
- 我們可以把 TikZ 想像成暫時停止主路建設,採取分流,做一條小支路。這條路徑從我們目前的位置向上 1 個單位。預設情況下,它繼承了主路徑的屬性,因此它是帶有箭頭的藍色。當
我們現在添加
-- ++(1,0)
到我們的路徑中。- 所以,既然我們繞道回來了,我們就繼續往右走直線。
接下來,我們新增
edge [draw=red, -{Circle[fill=green]}] ++(0,1)
.- 這是另一個轉移,但這一次,我們用紅色繪製邊緣並更改箭頭尖端。當然,這只適用於我們的消遣。
- 請注意,這對於普通路徑是不可能的 - 例如,您不能將其一部分設為紅色,將其一部分設為藍色,但是可以
edge
與主路徑和edge
作為路徑一部分繪製的任何其他路徑具有完全不同的屬性。\path
最後,我們用 完成路徑
-- ++(1,0);
。
完整程式碼:
\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}
關於。微量元素
對於問題中的範例,您當然可以只寫
\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}
生產
不過,我認為您想知道如何做到這一點。
上面的節點和路徑指令可以替換為以下2條路徑
\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);
產生相同的輸出,或更簡潔但不太明顯的是
\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);