我目前正在写一篇论文,需要创建一些包含矩形且矩形之间有多个箭头的 TikZ 图形。
这是一个只有一个箭头的简单示例:
\tikzstyle{myblock} = [rectangle, draw, minimum height=3cm]
\begin{tikzpicture}
\node (foo)[myblock]{foo};
\node (bar)[myblock,right-of=foo,xshift=5cm]{bar};
\draw[->] (foo) -- node[below] {arrow text} (bar);
% more arrows here
\end{tikzpicture}
在不同的(TikZ)图片之间,箭头的数量和两个块的高度不同(在一张图片中,它们两个的高度始终相同)。文本始终足够短,可以容纳一行。
给定两个矩形和一定数量的箭头(具有不同的方向和文本),如何将它们均匀分布在两个块的高度上?我可以使用 TikZ 的任何自动化功能吗?
答案1
这很简单,因为你可以使用calc
库tikz
并访问任意比例的两个点之间的点。例如,是距离和连线上($(foo.north east)!0.25!(foo.south east)$)
25% 的点。因此我们可以使用foo.north east
foo.north east
foo.south east
\draw[->] ($(foo.north east)!0.25!(foo.south east)$) -- node[below]
{arrow text} ($(bar.north west)!0.25!(bar.south west)$);
完整代码如下
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\begin{document}
\tikzset{myblock/.style = {rectangle, draw, minimum height=3cm}
}
\begin{tikzpicture}
\node (foo)[myblock]{foo};
\node (bar)[myblock,right of=foo,xshift=5cm]{bar};
\draw[->] ($(foo.north east)!0.25!(foo.south east)$) -- node[below] {arrow text} ($(bar.north west)!0.25!(bar.south west)$);
\draw[->] ($(foo.north east)!0.5!(foo.south east)$) -- node[below] {arrow text} ($(bar.north west)!0.5!(bar.south west)$);
\draw[->] ($(foo.north east)!0.75!(foo.south east)$) -- node[below] {arrow text} ($(bar.north west)!0.75!(bar.south west)$);
% more arrows here
\end{tikzpicture}
\end{document}
除此之外,您还可以使用循环\foreach
来绘制线条并减少代码行。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\begin{document}
\tikzset{myblock/.style = {rectangle, draw, minimum height=3cm}
}
\begin{tikzpicture}
\node (foo)[myblock]{foo};
\node (bar)[myblock,right of=foo,xshift=5cm]{bar};
\foreach \a/\b in {0.25/arrow text,0.5/arrow,0.75/text}{
\draw[->] ($(foo.north east)!\a!(foo.south east)$) -- node[below] {\b} ($(bar.north west)!\a!(bar.south west)$);
}
% more arrows here
\end{tikzpicture}
\end{document}