扩展 pgf/tikz 样式的参数

扩展 pgf/tikz 样式的参数

在此网站上的一个答案中提出了绘制箭头的方法在路径上。例如,使用样式将在路径上的[arrow inside={pos=0.2}]位置放置一个箭头:0.2

\begin{tikzpicture}
\tikzset{
  set arrow inside/.code={\pgfqkeys{/tikz/arrow inside}{#1}},
  set arrow inside={pos/.initial=.5, end/.initial=>},
  arrow inside/.style={
    set arrow inside={#1},
    postaction={
      decorate,
      decoration={
        markings,
        mark=at position \pgfkeysvalueof{/tikz/arrow inside/pos} with \arrow{\pgfkeysvalueof{/tikz/arrow inside/end}}
      }
    }
  },
}

\draw[arrow inside={pos=0.2}] (0,0) -- (5cm,5cm);
\end{tikzpicture}

现在,我想做类似的事情

\draw[arrow inside={pos=0.2}, arrow inside={pos=0.8}] (0,0) -- (5cm,5cm);

最后得到两个箭头,一个在位置 0.2,另一个在位置 0.8。这不起作用,因为第二次调用set arrow inside修改了键的值/tikz/arrow inside/pos,因此也修改了样式(只绘制了第二个箭头)。我尝试使用扩展规则,但我无法理解这些事情,所以我希望也许其他人能够做到这一点(或者也许问题出在其他地方,然后我希望有人能指出在哪里!)。

作为记录,原始答案还提供了另一种通过稍微修改语法来规避此问题的方法,并且该解决方案在实践中可能很有用。(但是,我个人对评估顺序问题的解决方案很感兴趣。)提前致谢!

答案1

你是指这样的事吗?

\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.markings}
\tikzset{
  arrowmark/.style 2 args={postaction={decorate},decoration={markings,mark=at position #1 with \arrow{#2}}}
}

\begin{document}
\begin{tikzpicture}
\draw[arrowmark={.2}{<},arrowmark={.8}{>}] (0,0) -- (5cm,5cm);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

几年后...您可以为此使用嵌套宏。

\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.markings}
\tikzset{
  arrow inside/.style={
    decoration={markings},
    end/.style={
      pos/.style={
        decoration={
          mark=at position ####1 with {\expandafter\arrow##1}
        }
      }
    },
    end=>,
    #1,
    postaction={decorate}
  }
}

\begin{document}
  \begin{tikzpicture}
    \draw[arrow inside={pos=0.2},arrow inside={end={[red,scale=3]{latex}},pos=0.7}] (0,0) -- (5cm,5cm);
  \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容