将选项传递给预操作内部创建的范围

将选项传递给预操作内部创建的范围

在回复中关于阴影的问题,建议使用该backgrounds库,以便一个对象的阴影不会与之前绘制的另一个对象重叠。

如果我正确理解了文档,我必须将on background layer其作为选项传递给scope,而不是path。另一方面, apreaction在内部构造一个范围(根据文档)。

是否可以更改由 内部构建的范围的选项preaction?如何更改?如果不能,对 TikZ 的增强将以优雅的方式解决“重叠阴影”问题。

答案1

令我惊讶的是,问题的答案TikZ 中的“Z 级别”似乎适用于前置操作和后置操作。这是一个相当简单的例子。

\documentclass{article}
%\url{https://tex.stackexchange.com/q/46957/86}

\usepackage{tikz}
\pgfdeclarelayer{back}
\pgfsetlayers{back,main}

\makeatletter
\pgfkeys{%
  /tikz/on layer/.code={
    \pgfonlayer{#1}\begingroup
    \aftergroup\endpgfonlayer
    \aftergroup\endgroup
  },
  /tikz/node on layer/.code={
    \pgfonlayer{#1}\begingroup
    \expandafter\def\expandafter\tikz@node@finish\expandafter{\expandafter\endgroup\expandafter\endpgfonlayer\tikz@node@finish}%
  },
}

\begin{document}
\begin{tikzpicture}
\draw[line width=1cm,red] (2,1) -- (2,-1);
\draw[ultra thick,white,preaction={on layer=back,line width=1cm,blue,draw}] (0,0) -- (4,0);
\draw[line width=1cm,red] (2,-2) -- (2,-4);
\draw[ultra thick,white,postaction={on layer=back,line width=1cm,blue,draw}] (0,-3) -- (4,-3);
\begin{scope}[xshift=5cm]
\draw[line width=1cm,red] (2,1) -- (2,-1);
\draw[ultra thick,white,preaction={line width=1cm,blue,draw}] (0,0) -- (4,0);
\draw[line width=1cm,red] (2,-2) -- (2,-4);
\draw[ultra thick,white,postaction={line width=1cm,blue,draw}] (0,-3) -- (4,-3);
\end{scope}
\end{tikzpicture}
\end{document}

结果:

TikZ 带有 z 级别的预操作和后操作

左图为蓝线设置了图层,右图没有。上图将蓝线绘制为预操作,下图为后操作。在每幅图中,垂直红线都绘制在水平线之前。因此,对于上两幅图,指定的顺序是:红色、蓝色、白色。对于下两幅图,指定的顺序是:红色、白色、蓝色(我向你保证,这完全是巧合)。在设置了“on layer”的情况下,渲染是:蓝色、红色、白色。这表示蓝线(动作线)被on layer=back键发送到后面。

相关内容