在 中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
也是如此。这将是一个奖励,但对于答案来说不是必需的。ab
cd
预期的图像看起来会像这样,其中任何背景/颜色都会出现在标签后面/周围:
答案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}