我想使用 double -latex
箭头样式 在整个范围内。
当我定义一个仅设置红色的简单样式时,myarrow plain
范围样式就会应用\begin{scope}[myarrow plain] \draw ... \end{scope}
,我不需要说\draw[myarrow plain]
:简单明确和普通范围在图像中。
对于myarrow complex
样式,其double -latex
范围仅改变前景色(复杂范围下面),我必须说\draw[myarrow complex]
有双箭头(复杂显性)。
能否解释一下如何myarrow complex
正确声明样式以便范围使用它?我猜这与后期操作有关,或者与样式的附加或定义有关,但我对 TikZ 内部机制了解甚少(到目前为止)。
\documentclass[margin=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows}
% https://tex.stackexchange.com/a/72793
\tikzset{
double -latex/.style args={#1 colored by #2 and #3}{
-latex,line width=#1,#2,
postaction={draw,-latex,#3,line width=(#1)/3,shorten <=(#1)/4,shorten >=4.5*(#1)/3},
}
}
\tikzset{
myarrow complex/.style={line width=2mm,double -latex=2mm colored by brown and red},
myarrow plain/.style={-latex,color=red}
}
\begin{document}
\begin{tikzpicture}
\begin{scope}[myarrow complex]
\draw (0,1) to node[pos=.5,below]{complex scope} (4,1);
\draw[myarrow complex] (0,0) to node[pos=.5,below]{complex explicit} (4,0);
\end{scope}
\begin{scope}[myarrow plain]
\draw[myarrow plain] (0,3) to node[pos=.5,below]{plain explicit} (4,3);
\draw (0,2) to node[pos=.5,below]{plain scope} (4,2);
\end{scope}
\end{tikzpicture}
\end{document}
答案1
手册第 187 页关于preaction
和postaction
...此选项仅当赋予\小路或作为选项的一部分节点;作为选择{范围}它没有效果。
如果希望postaction
将应用于范围内的每个路径,则可以使用every path/.style
。要阻止递归失控,您可以nomorepostaction
使用
https://tex.stackexchange.com/a/5354/8650
像这样:
\documentclass[tikz, border=1cm]{standalone}
\makeatletter
\tikzset{nomorepostaction/.code=\let\tikz@postactions\pgfutil@empty}
\makeatother
\tikzset{
double -latex/.style args={#1 colored by #2 and #3}{
-latex, line width=#1, #2,
every path/.style={postaction={nomorepostaction, draw, -latex, #3, line width=(#1)/3, shorten <=(#1)/4, shorten >=4.5*(#1)/3}}
}}
\tikzset{
myarrow complex/.style={line width=2mm, double -latex=2mm colored by brown and red},
myarrow plain/.style={-latex, color=red}
}
\begin{document}
\begin{tikzpicture}
\begin{scope}[myarrow complex]
\draw (0,1) to node[pos=.5, below]{complex scope} (4,1);
\draw[myarrow complex] (0,0) to node[pos=.5, below]{complex explicit} (4,0);
\end{scope}
\end{tikzpicture}
\end{document}