我想绘制一个带有不同高度的框的图表,使得每个框的底部位于同一高度。此外,我想通过水平箭头连接节点。我的方法是使用相对定位(positioning
库)。
下面是一个可以说明该问题的 MWE:
\documentclass{article}
\usepackage[english]{babel}
\usepackage{tikz,pgfplots}
\usetikzlibrary{positioning}
\tikzset{ % from http://tex.stackexchange.com/a/49909/78282
flowbox/.style={
rectangle, rounded corners, minimum width=1cm, minimum height=1cm,text centered, draw=black
},
stdarrow/.style={->,>=stealth}
}
\begin{document}
\begin{tikzpicture}[node distance=1cm]
\node[center,flowbox] (A) {A};
\node[flowbox,right=of A] (B) {\tikz \draw (0,0)--(0,3);};
\draw [stdarrow] (A) -- (B);
\end{tikzpicture}
\end{document}
我的想法是使用基础进行相对定位:
\documentclass{article}
\usepackage[english]{babel}
\usepackage{tikz,pgfplots}
\usetikzlibrary{positioning}
\tikzset{ % from http://tex.stackexchange.com/a/49909/78282
flowbox/.style={
rectangle, rounded corners, minimum width=1cm, minimum height=1cm,text centered, draw=black
},
stdarrow/.style={->,>=stealth}
}
\begin{document}
\begin{tikzpicture}[node distance=1cm]
\node[flowbox] (A) {A};
\node[flowbox, base right=of A] (B) {\tikz \draw (0,0)--(0,3);};
\draw [stdarrow] (A) -- (B);
\end{tikzpicture}
\end{document}
问题是,这里的第二个框的底部比第一个框的底部高(因为它以文本为参考),并且箭头不是水平的。正如我所说,我希望两个框的底部边缘处于相同的水平高度,并且箭头从框 A 的垂直中心开始向右水平移动。这怎么可行?
答案1
以下代码应该给出所需的结果(下面的注释):
\documentclass{article}
\usepackage{tikz,pgfplots}
\usetikzlibrary{positioning}
\tikzset{ % from https://tex.stackexchange.com/a/49909/78282
flowbox/.style={
rectangle, rounded corners, minimum width=1cm, minimum height=1cm,text centered, draw=black
},
stdarrow/.style={->,>=stealth}
}
\begin{document}
\begin{tikzpicture}[node distance=2cm]
\coordinate (A-Coord) at (0,0);
\coordinate[right=of A-Coord] (B-Coord);
\node[flowbox, anchor=south] (A-Node) at (A-Coord) {A};
\node[flowbox, anchor=south] (B-Node) at (B-Coord) {\tikz \draw (0,0)--(0,3);};
\draw [stdarrow] (A-Node.east) -- (A-Node-|B-Node.west);
\end{tikzpicture}
\end{document}
结果:
评论:
- 为了调整放置,我定义了两个坐标和节点选项
anchor=south
(可能这方面有更好的解决方案)。 - 为了强制箭头水平,我使用了正交坐标系标识符
(A-Node|-B_Node.west)
(参见这个答案的打击乐) - 为了保持间距,我不得不调整节点距离
[node distance=2cm]