有时候,例如在解决最近问题,人们想将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 选项?)