是否需要一个不可见的节点来实现节点之间的边分割?

是否需要一个不可见的节点来实现节点之间的边分割?

我正在学习如何在 tikz 中制作流程图。在此 MWE

\documentclass[crop,tikz]{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows}
\begin{document}

\tikzstyle{NODE} = [rectangle, rounded corners, minimum width=3cm, minimum height=1cm, draw=black, fill=red!10]
\begin{tikzpicture}[node distance=2cm]

\node (A1) [NODE]  {my first node};
\node (A2) [NODE,below of=A1]  {my second node};
\node (A3) [NODE,below of=A2]  {is it true?};
\node (A4) [NODE,left of=A3,yshift=-2cm]   {we get here if true};
\node (A5) [NODE,right of=A3,yshift=-2cm]   {we get here if false};

\draw [->,thick] (A1.south) -|   (A2.north);
\draw [->,thick] (A2.south) -| (A3.north);
\draw [->,thick] (A3.south) -| node[anchor=south] {YES} (A4.north);
\draw [->,thick] (A3.south) -| node[anchor=south] {NO} (A5.north);

\end{tikzpicture}

\end{document}

它给

在此处输入图片描述

我不确定什么是正确的方法来产生这个(我使用paint.exe来说明)

在此处输入图片描述

我是否需要A3先在下面创建一个隐藏节点?以便制作如图所示的边缘?或者有没有更好更规范的方法来做到这一点?我不希望边缘倾斜,我只喜欢使用直边。我知道我可以做到这一点

\draw [->,thick] (A1.south) -|   (A2.north);
\draw [->,thick] (A2.south) -| (A3.north);
\draw [->,thick] (A3.south) -- node[anchor=south] {YES} (A4.north);
\draw [->,thick] (A3.south) -- node[anchor=south] {NO} (A5.north);

并得到

在此处输入图片描述

但我更喜欢直边。

是否可以在 tikz 中创建一个没有大小且不显示的节点,并将其用作占位符以便为其创建边?

答案1

改编

  • 使用相对定位移动到节点下方的点:(A3.south) -- ++(0,-5mm)
  • 将该点保存为coordinate(a)(这是无大小的不可见节点你提到)
  • 重复使用它来绘制另一条线(a) -| ...
    • 我省略了第一部分((A3.south) -- (a)),因为它只会在已有的线条上绘制第二条线条。只有在使用曲线边缘或彩色箭头时才需要这样做。
  • 使用tikzset而不是tikzstyle(见应该使用 \tikzset 还是 \tikzstyle 来定义 TikZ 样式?

也可以看看

代码

\documentclass[crop,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows}

\begin{document}

\begin{tikzpicture}[
    node distance=2cm,
    NODE/.style={rectangle, rounded corners, minimum width=3cm, minimum height=1cm, draw=black, fill=red!10}
]
    \node (A1) [NODE]  {my first node};
    \node (A2) [NODE,below of=A1]  {my second node};
    \node (A3) [NODE,below of=A2]  {is it true?};
    \node (A4) [NODE,left of=A3,yshift=-2cm]   {we get here if true};
    \node (A5) [NODE,right of=A3,yshift=-2cm]   {we get here if false};
    
    \draw [->,thick] (A1.south) -|   (A2.north);
    \draw [->,thick] (A2.south) -| (A3.north);
    \draw [->,thick] (A3.south) -- ++(0,-5mm) coordinate(a) -| node[anchor=south] {YES} (A4.north);
    \draw [->,thick] (a) -| node[anchor=south] {NO} (A5.north);
\end{tikzpicture}

\end{document}

结果

在此处输入图片描述

答案2

这是使用 的替代方法forest

在此处输入图片描述

\documentclass{article}

\usepackage{forest}
\useforestlibrary{edges}

\begin{document}

\begin{forest}
for tree={rounded corners, minimum width=3cm, minimum height=1cm, draw=black, fill=red!10,
  l sep=1cm, fork sep=5mm, s sep=1cm,
  forked edge, edge={thick, ->}
}
[my first node
  [my second node
    [is it true?
      [we get here if true, edge label={node[midway, above]{YES}}]
      [we get here if false, edge label={node[midway, above]{NO}}]
    ]
  ]
]
\end{forest}

\end{document}

相关内容