tikz `postaction` 使用 `edge`

tikz `postaction` 使用 `edge`

问题

我想添加一个 tikz style,它只影响大图中的某些箭头,并添加一个postaction。我还需要弯曲和标记这些箭头,因此使用命令创建了很多edge

然而,正如这个 Tikz 手册(第 131 页,第 13.11 节),edge路径是在主路径之后计算的。因此(我认为),箭头postaction失败了edge

问题

我可以postactionedge路径上使用吗?如果可以,如何使用?

例子

\documentclass{standalone}
\usepackage{tikz}
\tikzset{
  arrow/.style = { -stealth, red, line width = 2mm,
    postaction = { draw, blue, line width = 1mm, shorten >=1mm }
  }
}
\begin{document}
  \begin{tikzpicture}
    \draw[arrow] (0,0)  --  (+1,+1);
    \draw[arrow] (0,0) edge (-1,-1);
  \end{tikzpicture}
\end{document}

生产

在此处输入图片描述

期望

在此处输入图片描述

答案1

您必须将箭头样式应用于边缘,而不是整个路径。为此,您可以使用every edge样式。正如@percusse 在他的评论中所说,您必须添加draw样式。

\documentclass{standalone}
\usepackage{tikz}
\tikzset{
  arrow/.style = {-stealth, draw=red, line width = 2mm,
    postaction = { draw=blue, line width = 1mm, shorten >=1mm }
  },
  earrow/.style={
    every edge/.style={arrow}
  }
}
\begin{document}
  \begin{tikzpicture}
    \draw[arrow] (0,0)  --  (+1,+1);
    \draw[earrow] (0,0) edge (-1,-1);
  \end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

我认为获得您想要的正确方法是使用定义开始和结束<arrow_tip>-<arrow_tip>,通常是<->,但您的风格应该是stealth-stealth

结果:

在此处输入图片描述

梅威瑟:

\documentclass[border=20pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\tikzset{
  arrow/.style = {
    draw,
    red,
    stealth-stealth,
    line width = 2mm,
    postaction = {
        draw,
        blue,
        line width = 1mm,
        shorten >=1mm,
        shorten <=1mm,
        stealth-stealth
    }
  }
}
\begin{document}
  \begin{tikzpicture}
    \draw[arrow] (-1,-1)  --  (1,1);
    \draw[arrow] (1,-1)  -|  (3,1);
    \draw[arrow] (4,-1)  .. controls +(right:2cm) and +(down:2cm) .. (6,1);
  \end{tikzpicture}
\end{document}

相关内容