Относительно МВЭ

Относительно МВЭ

Может быть, этот вопрос наивен, но когда мне нужно будет использовать edgeвместо --?, и как я могу использовать edgeдля копирования того же вывода команды path Conventional Draw --?

\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создает отдельный путь, который может иметь совершенно другие атрибуты, чем основной путь. В отличие от точек на основном пути, ребро никуда не движется.

На самом деле это не то, что происходит, но это такбудтоБывает:

  1. Предположим, мы начинаем с пути \path [draw=blue, -{Stealth[]}] (0,0).

    • Пока что мы никуда не ушли. Мы сказали, что этот путь должен быть нарисован и что он должен иметь определенный наконечник стрелки. Мы переместились в начало пути.
  2. Итак, продолжим ++(1,0).

    • Это переместит нас на 1 единицу вправо, по-прежнему ничего не рисуя.
  3. Теперь добавляем -- ++(1,0).

    • Это перемещает нас еще на 1 вправо, и на этот раз путь нарисован. Если мы поставим ;здесь, то получим наконечник стрелы здесь. Но мы этого не делаем, поэтому наконечник пока не нужен.

    3 этап

  4. Теперь, вместо того, чтобы продолжать основной путь, мы добавляем edge ++(0,1}.

    • Мы можем думать о TikZ как о временном останове строительства основного пути и отвлечении, чтобы сделать небольшой боковой путь. Этот путь идет от нашей текущей позиции вверх на 1 единицу. По умолчанию он наследует атрибуты основного пути, поэтому он синий со стрелкой. Когда операция edgeзавершена, TikZ возвращается в точку, в которой он начал отклонение. Это как заскочить в переулок, чтобы забрать немного хлеба из булочной по пути, чтобы забрать детей из школы. Как только вы получите хлеб, вы возвращаетесь на главную улицу, чтобы продолжить путь в школу.

    4 этап

  5. Теперь мы дополняем -- ++(1,0)наш путь.

    • Итак, раз уж мы вернулись с объезда, то продолжим движение по прямой вправо.

    5 этап

  6. Далее добавляем edge [draw=red, -{Circle[fill=green]}] ++(0,1).

    • Это еще один отвлекающий маневр, но на этот раз мы рисуем край красным и меняем наконечник стрелки. Это касается только нашего отвлекающего маневра, конечно.

    6 этап

    • Обратите внимание, что это невозможно с обычным контуром — например, вы не можете сделать часть его красной, а часть синей, но он edgeможет иметь совершенно разные атрибуты от основного контура и от любого другого контура, edgeнарисованного в рамках той же \pathкоманды.
  7. Наконец, мы завершаем путь с помощью -- ++(1,0);.

    7 этап

Полный код:

\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}

производить

два разворота

Однако я полагаю, что вы хотели бы узнать, как сделать это все в одном.

Команды node и path, указанные выше, можно заменить следующими двумя путями:

  \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);

Связанный контент