使用以下代码
\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 节还提到
...节点不是路径的一部分。相反,在对路径进行所有操作之后,路径选项指定的内容(例如由于 a
fill
和 a而填充和绘制路径)draw
中的某个选项规格),在后处理步骤中添加节点。
因此,节点在不同的路径中构建,其样式从“父”路径继承,并且可以安全地覆盖这些样式而不会影响父路径。
PS 您还可以设置text opacity=1
不透明文本;它会覆盖fill opacity
仅针对文本的设置。