我正在学习如何在 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}