TikZ 范围箭头样式:不用于复杂样式?

TikZ 范围箭头样式:不用于复杂样式?

我想使用 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}

PDF

答案1

手册第 187 页关于preactionpostaction

...此选项仅当赋予\小路或作为选项的一部分节点;作为选择{范围}它没有效果。

如果希望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}

两个棕色箭头,中间为红色

相关内容