TikZ 透明度组因覆盖而中断

TikZ 透明度组因覆盖而中断

我试图实现此解决方案scope使用绘制透明箭头transparency group。效果很好。

不幸的是,我的图片需要叠加在一些文本上。当将overlay选项添加到我的tikzpicture环境中时,scope的内容就消失了。

还有希望实现这个目标吗?

插图

从左到右:无overlay(有效)、remember pictureoverlay(无效)、remember pictureoverlay(有效)。

\documentclass[margin=.5cm]{standalone}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
    \draw (-1,-1) rectangle (1,1);
    \fill[blue] circle (1);
    \begin{scope}[transparency group, opacity=.5]
        \fill[red] (.5,.5) circle (.5);
        \fill[red] (-.3,-.3) circle (.7);
    \end{scope}
\end{tikzpicture}

\begin{tikzpicture}[remember picture]
    \coordinate (z) at (0,0);
    \draw (-1,-1) rectangle (1,1);
\end{tikzpicture}

\begin{tikzpicture}[remember picture, overlay]
    \fill[blue] (z) circle (1);
    \begin{scope}[transparency group, opacity=.5]
        \fill[red] (z) ++(.5,.5) circle (.5);
        \fill[red] (z) ++(-.3,-.3) circle (.7);
\end{scope}
\end{tikzpicture}

\begin{tikzpicture}[remember picture]
    \fill[blue] (z) circle (1);
    \begin{scope}[transparency group, opacity=.5]
        \fill[red] (z) ++(.5,.5) circle (.5);
        \fill[red] (z) ++(-.3,-.3) circle (.7);
\end{scope}
\end{tikzpicture}

\end{document}

答案1

文档中描述了这个问题:tikz 必须知道图片的大小才能生成正确的框,但如果使用覆盖,则不存在此大小。第 115.4 节“透明度组”显示了一种解决方法。诀窍是做你通常不做的事情:将 tikz 图片放在节点内:

\documentclass[margin=.5cm]{standalone}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
    \draw (-1,-1) rectangle (1,1);
    \fill[blue] circle (1);
    \begin{scope}[transparency group, opacity=.5]
        \fill[red] (.5,.5) circle (.5);
        \fill[red] (-.3,-.3) circle (.7);
    \end{scope}
\end{tikzpicture}

\begin{tikzpicture}[remember picture]
    \coordinate (z) at (0,0);
    \draw (-1,-1) rectangle (1,1);
\end{tikzpicture}

\begin{tikzpicture}[remember picture, overlay]
    \fill[blue] (z) circle (1);
    \node[overlay] at (z)
     { \begin{tikzpicture}
       \begin{scope}[transparency group, opacity=.5]
        \fill[red] (z) ++(.5,.5) circle (.5);
        \fill[red] (z) ++(-.3,-.3) circle (.7);
       \end{scope}
       \end{tikzpicture}};

\end{tikzpicture}

\begin{tikzpicture}[remember picture]
    \fill[blue] (z) circle (1);
    \begin{scope}[transparency group, opacity=.5]
        \fill[red] (z) ++(.5,.5) circle (.5);
        \fill[red] (z) ++(-.3,-.3) circle (.7);
\end{scope}
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容