![draw=none 和 draw opacity=0 之间的区别 (fill=none 和 fill opacity=0 之间也一样)?](https://linux22.com/image/254061/draw%3Dnone%20%E5%92%8C%20draw%20opacity%3D0%20%E4%B9%8B%E9%97%B4%E7%9A%84%E5%8C%BA%E5%88%AB%20(fill%3Dnone%20%E5%92%8C%20fill%20opacity%3D0%20%E4%B9%8B%E9%97%B4%E4%B9%9F%E4%B8%80%E6%A0%B7)%EF%BC%9F.png)
TikZ 键值对draw=none
和之间有什么区别draw opacity=0
?它们在功能上是否等效,或者是否存在一个应该优先于另一个的情况?同样,fill=none
和之间有什么区别fill opacity=0
?
答案1
draw=none
(相当于\path
命令)实际上导致 TikZ 丢弃构造的路径并且边界框不会受到干扰(胡说,它确实改变了边界框但只是line width
被忽略了。感谢@Fritz 发现了这个愚蠢的行为)。
draw opacity=0
但是会导致路径在没有墨水的情况下绘制,因此边界框会使用line width
有效选项进行更新,因此线条样式对于边界框计算很重要。
\begin{tikzpicture}
\draw (0,0) rectangle (3,3);
\draw[opacity=0,line width=1cm] (0,0) rectangle (3,3); % Enlarge the bounding box
\pgfsetlinewidth{5cm} % this has no effect
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{4cm}{4cm}} % this updates the known max x,y coordinates!!
\pgfusepath{} % even though it's thrown away.
\begin{pgfinterruptboundingbox}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{10cm}{10cm}} % Nothing happens
\pgfusepath{}
\end{pgfinterruptboundingbox}
\draw[dashed,thin] (current bounding box.north east) rectangle (current bounding box.south west);
\end{tikzpicture}
答案2
filling opacity
不仅适用于填充操作,也适用于文本和图像;下面的示例显示了fill=none
和fill opacity=0
(我实际上fill opacity=0.2
只是为了使文本可见而使用)产生不同结果的情况;fill=none
对节点标签没有影响,但fill opacity=<value>
会影响文本:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\fill[olive] (0,0) rectangle (3,2);
\node[fill opacity=0.2] at (3,2) {\huge B};
\node[fill=none] at (0,0) {\huge A};
\end{tikzpicture}
\end{document}