更新

更新

我想在节点前绘制一条粗的半透明箭头路径,但似乎我被困在它们后面:

在此处输入图片描述

如何在节点前面绘制一条路径?

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes, shadows, positioning}
\begin{document}
\definecolor{vhighlight}{RGB}{85,170,0}
\definecolor{vhighlight2}{RGB}{240,255,224}
\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}
\begin{tikzpicture}[node distance=5mm, 
       blockcolors/.style={
        % The rest
        thick,draw=black,
        top color=white,
        bottom color=black!10,
        font=\sffamily\small
    },
    block/.style={
        % The shape:
        rectangle, minimum size=6mm, minimum width=12mm, minimum height=10mm,
        node distance=5mm,
        blockcolors,
        drop shadow
    },
       every label/.style={
        font=\sffamily\scriptsize
    },
    every node/.style={
        font=\sffamily\small
    },
    >=latex
    ]
\node (A) [block, label={below:block 1}] {A};
\node (B) [block, right=of A, label={below:block 2}] {B};
\node (C) [block, right=of B, label={below:block 3}] {C};
\node (D) [block, below=of C, label={below:block 4}] {D};
\node (E) [block, below=of B, label={below:block 5}] {E};
\node (F) [block, below=of A, label={below:block 6}] {F};
\draw [->, line width=1.5mm, red, rounded corners=1mm, opacity=0.25, >=stealth] 
   (A.south) -- (A) -- (B) -- (C) -- (D) -- (E) -- (F) -- (F.north);

\end{tikzpicture}
\end{document}

答案1

您的代码是正确的,并且线段绘制在“主”层中,位于先前绘制的框的顶部。问题是每个线段的起点和终点都在它所连接的节点的边缘。

当你指定 时(A) -- (B),TikZ 会很智能,找到连接这些节点中心的线与每个节点边界的交点。然后它会绘制连接边界的线。

如果您为节点指定了特定的锚点,则此行为将被停用。因此,您可以指定(A.center)--(B.center)一条线连接这些节点的中心,并因此出现在这些节点的“上方”。

就你的情况而言:

\draw [->, line width=1.5mm, red, rounded corners=1mm, opacity=0.25, >=stealth]
    (A.south) -- (A.center) -- (B.center) -- (C.center) --
    (D.center) -- (E.center) -- (F.center) -- (F.north);

将产生:

结果

顺便说一句,您不需要声明 pgflayers 来执行此操作。

您可以使用循环使其更紧凑:

\draw [->, line width=1.5mm, red, rounded corners=1mm, opacity=0.25, >=stealth] 
   (A.south) \foreach \n in {A,...,F} { -- (\n.center) } -- (F.north);

更新

可以修复箭头尖的问题,箭头的透明度允许“看透”最后一段。您必须在透明度组中绘制整个路径(包括箭头):

\begin{scope}[opacity=0.25, transparency group]
\draw [->, line width=1.5mm, red, rounded corners=1mm, >=stealth] 
   (A.south) \foreach \n in {A,...,F} { -- (\n.center) } -- (F.north);
\end{scope}

结果:

结果

答案2

我认为使用chains库来放置节点会很有趣。

虽然也可以使用这个库来连接链接节点,但在这种情况下,在链完成后连接它们更容易。

绘图使用默认分配给链接节点的名称。这些名称的形式为chain-n其中chain是链的名称(chain默认情况下),n是链上节点的编号(从 开始1)。

图书馆scopes允许我们说

{

}

代替

\begin{scope}

\end{scope}

这在链接节点时尤其有用,因为通常需要范围。在这种情况下,它对于 也很有用transparency group

\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{shadows,chains,scopes}
\begin{document}
\begin{tikzpicture}
  [
    start chain=going right,
    node distance=5mm,
    every on chain/.style={
      thick,
      draw=black,
      top color=white,
      bottom color=black!10,
      font=\sffamily\small,
      minimum width=12mm,
      minimum height=10mm,
      drop shadow,
      label={below:block \tikzchaincount},
    },
    post join/.style={
      -stealth,
      line width=1.5mm,
      red,
      rounded corners=1mm,
    },
    every label/.style={
      font=\sffamily\scriptsize
    },
  ]
  \node [on chain] {A};
  \node [on chain] {B};
  \node [on chain] {C};
  \node [on chain=going below] {D};
  {[continue chain=going left]
    \node [on chain] {E};
    \node [on chain] {F};
  }
  {[transparency group, opacity=.25]
    \draw [post join] (chain-1.south) |- (chain-3.center) |- (chain-6.center) -- (chain-6.north);
  }
\end{tikzpicture}
\end{document}

带范围的链接节点

相关内容