如何在 TikZ 中垂直分布多个箭头

如何在 TikZ 中垂直分布多个箭头

我目前正在写一篇论文,需要创建一些包含矩形且矩形之间有多个箭头的 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

这很简单,因为你可以使用calctikz并访问任意比例的两个点之间的点。例如,是距离和连线上($(foo.north east)!0.25!(foo.south east)$)25% 的点。因此我们可以使用foo.north eastfoo.north eastfoo.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}

相关内容