Разница между draw=none и draw opacity=0 (а также fill=none и fill opacity=0)?

Разница между draw=none и draw opacity=0 (а также fill=none и fill opacity=0)?

В чем разница между парами ключ-значение 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}

введите описание изображения здесь

Связанный контент