
Vielleicht ist diese Frage naiv, aber wann muss ich edge
anstelle von --
? verwenden und wie kann ich verwenden, edge
um dieselbe Ausgabe des herkömmlichen Zeichenbefehls für den Pfad zu replizieren --
?
\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}
Antwort1
Diese Antwort versucht nicht, auf alle Einzelheiten einzugehen, sondern vielmehr eine erste Erklärung einiger Unterschiede zu geben.
edge
konstruiert einen separaten Pfad, der völlig andere Eigenschaften als der Hauptpfad haben kann. Im Gegensatz zu Punkten auf dem Hauptpfad bewegt sich eine Kante nicht irgendwohin.
Das ist zwar nicht wirklich das, was passiert, aber es istals obdas passiert:
Angenommen, wir beginnen mit einem Pfad
\path [draw=blue, -{Stealth[]}] (0,0)
.- Bisher sind wir eigentlich nirgendwohin gegangen. Wir haben gesagt, dass dieser Pfad gezeichnet werden soll und dass er eine bestimmte Pfeilspitze haben soll. Wir sind zum Ursprung für den Anfang des Pfads gegangen.
Also machen wir weiter mit
++(1,0)
.- Dadurch bewegen wir uns 1 Einheit nach rechts, immer noch ohne etwas zu zeichnen.
Jetzt fügen wir hinzu
-- ++(1,0)
.- Dadurch bewegen wir uns noch einmal 1 nach rechts und diesmal wird der Pfad gezeichnet. Wenn wir
;
hier ein setzen, erhalten wir unsere Pfeilspitze hier. Aber das tun wir nicht, also wird die Spitze noch nicht benötigt.
- Dadurch bewegen wir uns noch einmal 1 nach rechts und diesmal wird der Pfad gezeichnet. Wenn wir
Anstatt den Hauptpfad fortzusetzen, fügen wir nun hinzu
edge ++(0,1}
.- Wir können uns TikZ so vorstellen, als würde es den Bau des Hauptpfads vorübergehend unterbrechen und eine Umleitung nehmen, um einen kleinen Seitenpfad zu bauen. Dieser Pfad führt von unserer aktuellen Position 1 Einheit nach oben. Standardmäßig erbt er die Attribute des Hauptpfads, ist also blau und hat einen Pfeil. Wenn der
edge
Vorgang abgeschlossen ist, kehrt TikZ zu dem Punkt zurück, an dem es die Umleitung gestartet hat. Es ist, als würde man auf dem Weg, die Kinder von der Schule abzuholen, in eine Seitenstraße schlüpfen, um beim Bäcker etwas Brot zu holen. Sobald Sie das Brot haben, kehren Sie zur Hauptstraße zurück, um weiter zur Schule zu gehen.
- Wir können uns TikZ so vorstellen, als würde es den Bau des Hauptpfads vorübergehend unterbrechen und eine Umleitung nehmen, um einen kleinen Seitenpfad zu bauen. Dieser Pfad führt von unserer aktuellen Position 1 Einheit nach oben. Standardmäßig erbt er die Attribute des Hauptpfads, ist also blau und hat einen Pfeil. Wenn der
Wir ergänzen jetzt
-- ++(1,0)
unseren Pfad.- Da wir nun vom Umweg zurück sind, setzen wir unsere gerade Linie nach rechts fort.
Als nächstes fügen wir hinzu
edge [draw=red, -{Circle[fill=green]}] ++(0,1)
.- Dies ist eine weitere Umleitung, aber dieses Mal zeichnen wir die Kante rot und ändern die Pfeilspitze. Dies gilt natürlich nur für unsere Umleitung.
- Beachten Sie, dass dies mit einem normalen Pfad nicht möglich ist. Sie können beispielsweise nicht einen Teil davon rot und einen Teil blau machen, aber ein Pfad
edge
kann ganz andere Attribute haben als der Hauptpfad und als alle anderen,edge
die als Teil desselben\path
Befehls gezeichnet werden.
Abschließend vervollständigen wir den Pfad mit
-- ++(1,0);
.
Vollständiger Code:
\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
Im Fall des Beispiels in der Frage können Sie natürlich einfach schreiben
\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}
produzieren
Ich nehme jedoch an, dass Sie gerne wissen möchten, wie Sie dies sozusagen im All-in-One-Verfahren erledigen können.
Die obigen Knoten- und Pfadbefehle könnten durch die folgenden 2 Pfade ersetzt werden
\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);
die identische Ergebnisse liefern, oder, prägnanter, aber weniger offensichtlich, mit
\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);