对 TikZ 中的每个路径应用后动作

对 TikZ 中的每个路径应用后动作

有时候,例如在解决最近问题,人们想将postaction(像装饰一样)应用于一组路径。一个简单的解决方案是使用every path/.style={}。不幸的是,这也会将后动作应用于后动作中绘制的每条路径,从而导致无限回归。

有什么方法可以避免这种情况吗?

一个有点愚蠢的问题的最小例子:

\begin{tikzpicture}[every path/.style={postaction={draw}}]
    \draw (0,0)--(1,0);
\end{tikzpicture}

有错误信息

! TeX capacity exceeded, sorry [grouping levels=255].
\pgfutil@g@addto@macro #1#2->\begingroup 
                                         \toks@ \expandafter {#1#2}\xdef #1{...
l.12     \draw (0,0)--(1,0);

答案1

请检查以下内容是否解决了您的问题,特别是关于范围界定的问题,这似乎太容易了。nomorepostactions旨在本地清空后续操作,因此它们不会在那之后被应用。

它确实解决了你的玩具问题。

\makeatletter
\tikzset{nomorepostaction/.code=\let\tikz@postactions\pgfutil@empty}
\makeatother
[...]
\begin{tikzpicture}[every path/.style={postaction={nomorepostaction,draw}}]
    \draw (0,0)--(1,0);
\end{tikzpicture}

答案2

也许这个答案“如何在线中间画一个箭头?”可能会对你有帮助。这样你就不会遇到递归。

答案3

(没有答案。)

通常可以覆盖属性,但有没有办法完全删除“postaction”?我的意思是,应该有一种方法可以写类似的东西 [every path/.style={postaction={nopostaction}},nopostaction/.style={draw, <some way to override postaction option>}],可能。

(有关的:是否可以清除 tikz/pgf 选项?

相关内容