TikZ:节点填充对于 tikzpicture 中的实体不透明,但对背景颜色/图像透明?

TikZ:节点填充对于 tikzpicture 中的实体不透明,但对背景颜色/图像透明?

在 中tikzpicture,我使用白色fill作为节点和线的标签。这通常可以满足我的需求,但我意识到在将图片放在背景图像之上后它并不完美。对于我的问题和这里的 MWE,我使用了一种简单的背景颜色来说明目的。但是,我希望答案也可以在有背景图像的地方使用(例如beamer),希望没有任何修改。

MWE-仅适用于白色背景

在此处输入图片描述

\documentclass{article}

\usepackage{tikz}%

\begin{document}

\begin{tikzpicture}

\tikzset{mwe/.style={inner sep=1.15ex, text depth=0ex, text height=1ex, text width=0.5em, minimum size=0.5em}}%

\node (A) [mwe,fill=white] at (0,0) {A};%
\node (B) [mwe,fill=white] at (4,0) {B};%
\draw[bend right=45,line width=0.25mm,-]  (A) to node [midway,fill=white, text height=1.25ex] {ab} (B);%

\node (C) [mwe,fill=white] at (0,4) {C};%
\node (D) [mwe,fill=white] at (2,-4) {D};%
\draw[bend left=15,line width=0.25mm,-]  (C) to node [midway,fill=white, text height=1.25ex] {cd} (D);%

\node (E) [mwe,fill=white] at (-2,2) {E};%
\node (F) [mwe,fill=white] at (4,-2) {F};%
\draw[bend left=15,line width=0.25mm,-]  (E) to node [midway,fill=white, text height=1.25ex] {ef} (F);%

\end{tikzpicture}

\end{document}

MWE-不同的背景颜色

在此处输入图片描述

\documentclass{article}

\usepackage{pagecolor}%

\usepackage{tikz}%

\begin{document}

\pagecolor{red!30}

\begin{tikzpicture}

\tikzset{mwe/.style={inner sep=1.15ex, text depth=0ex, text height=1ex, text width=0.5em, minimum size=0.5em}}%

\node (A) [mwe,fill=white] at (0,0) {A};%
\node (B) [mwe,fill=white] at (4,0) {B};%
\draw[bend right=45,line width=0.25mm,-]  (A) to node [midway,fill=white, text height=1.25ex] {ab} (B);%

\node (C) [mwe,fill=white] at (0,4) {C};%
\node (D) [mwe,fill=white] at (2,-4) {D};%
\draw[bend left=15,line width=0.25mm,-]  (C) to node [midway,fill=white, text height=1.25ex] {cd} (D);%

\node (E) [mwe,fill=white] at (-2,2) {E};%
\node (F) [mwe,fill=white] at (4,-2) {F};%
\draw[bend left=15,line width=0.25mm,-]  (E) to node [midway,fill=white, text height=1.25ex] {ef} (F);%

\end{tikzpicture}

\end{document}

显然,将填充颜色更改为与页面背景颜色相同非常简单。但是,如果您的背景图像包含多种/各种颜色,则无法实现这一点。

因此,我的目标是像这样的东西,fill它实际上对 中的其他元素不透明(或阻挡),tikzpicture但实际上对 之外的所有内容都是透明/不可见的tikzpicture。最好说填充是完全透明的……但是它保留了擦除线条、节点和后面tikzpicture/下面的任何其他元素的效果。

这可能吗tikz?也许不可能使用fill本身,但可以通过任何机制来实现?

编辑:我原本写的是“半透明”...我的意思是“透明”。抱歉造成混淆!

奖金:如果标签也能使前景线“消失”,那就太好了。但标签不应该使其他标签消失。例如,在第一个 MWE 中,cd位于ef线下方,因此最好将线的这一部分抹掉。线下方的标签ef也是如此。这将是一个奖励,但对于答案来说不是必需的。abcd

预期的图像看起来会像这样,其中任何背景/颜色都会出现在标签后面/周围:

在此处输入图片描述

答案1

正如@cfr 所说,这取决于观众。

\documentclass[tikz]{standalone}
\usepackage{pagecolor}\pagecolor{red!30}
\begin{document}
    \begin{tikzpicture}[transparency group=knockout]
        \node(A)at(0,0){A};
        \node(B)at(4,0){B};
        \node(C)at(0,4){C};
        \node(D)at(2,-4){D};
        \node(E)at(-2,2){E};%
        \node(F)at(4,-2){F};%
        \draw[bend left=15](C)to node(cd){}(D);
        \draw[bend right=45](A)to node(ab){}(B);
        \draw[bend left=15](E)to node(ef){}(F);%
        \path(ab)node[fill,opacity=0,text opacity=1]{ab}
             (cd)node[fill,opacity=0,text opacity=1]{cd}
             (ef)node[fill,opacity=0,text opacity=1]{ef};
    \end{tikzpicture}
\end{document}

相关内容