![扩展 pgf/tikz 样式的参数](https://linux22.com/image/297698/%E6%89%A9%E5%B1%95%20pgf%2Ftikz%20%E6%A0%B7%E5%BC%8F%E7%9A%84%E5%8F%82%E6%95%B0.png)
在此网站上的一个答案中提出了绘制箭头的方法在路径上。例如,使用样式将在路径上的[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}