为什么“填充不透明度”会影响同一路径中的节点?

为什么“填充不透明度”会影响同一路径中的节点?

使用以下代码

\documentclass[border=3mm,tikz]{standalone}

\begin{document}
\begin{tikzpicture}
\draw[fill=brown] (0,0) rectangle ++(1,1) node[above right]{B};
\draw[fill=brown, fill opacity=0.5] (2,0) rectangle ++(1,1) node[above right]{B};
\draw[fill=brown, fill opacity=0.5] (4,0) rectangle ++(1,1) node[above right, fill opacity=1]{B};
\end{tikzpicture}
\end{document}

得出的数字是

在此处输入图片描述

如您所见,中间的矩形fill opacity=0.5已应用,相应的node矩形也受此选项的影响。如果我想要最右边的正方形这样的结果,fill opacity=1必须在节点的选项中明确应用。

为什么fill opacity路径上的节点会影响同一路径上的节点内容?

答案1

PGF 手册第14节:

有些选项仅适用于整个路径。例如,color=确定用于绘制路径的颜色的选项始终适用于路径的所有部分。如果为路径的不同部分提供了几种不同的颜色,则只有最后一种颜色(在最外层范围内)“获胜”。

fill opacity是此类“全局”样式之一;它对整个 都有效path。这就是为什么

\draw [fill=teal] rectangle ++ (1,-1)
    [fill=brown] rectangle ++(1,1)
    [fill=red] rectangle ++(1,-1);

产生三个红色方块,因为最后一种fill=red风格获胜。

在此处输入图片描述

PGF 手册第 23.2 节:

除了填充操作外,此不透明度(/tikz/fill opacity)还适用于文本和图像。

这就是为什么全局fill opacity设置也会影响同一个节点文本path

最后,为什么的“全局”样式fill opacity可以在node出现在同一个path中被“局部”覆盖?PGF 手册第 14 节还提到

...节点不是路径的一部分。相反,在对路径进行所有操作之后,路径选项指定的内容(例如由于 afill和 a而填充和绘制路径)draw中的某个选项规格),在后处理步骤中添加节点。

因此,节点在不同的路径中构建,其样式从“父”路径继承,并且可以安全地覆盖这些样式而不会影响父路径。

PS 您还可以设置text opacity=1不透明文本;它会覆盖fill opacity仅针对文本的设置。

相关内容