pgf/tikz:使双边框线之间的填充/间隙透明

pgf/tikz:使双边框线之间的填充/间隙透明

我有一个带双边框的矩形框。pgf 手册(第 15.3.5 章图形参数:双线和边框线)说默认填充为白色。我希望间隙是透明的,以便您可以看到背景颜色。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds,fit}
\begin{document}

\begin{tikzpicture}
\node (myNode1) at (0,0) [
                          rectangle,
                          draw,
                          double,
                          double distance=1mm
                        ] {Double};
%                      
\node (myNode2) at (0,-1) [
                          rectangle,
                          draw,
                          double=transparent,
                          double distance=1mm
                        ] {Double};
%                 
\begin{pgfonlayer}{background}
    \coordinate (center) at (0, -.5);
    \fill [green!50!black!25] (center) rectangle ++(-1,1);
    \fill [orange!25] (center) rectangle ++(1,1);
    \fill [red!25] (center) rectangle ++(-1,-1);
    \fill [blue!25] (center) rectangle ++(1,-1);
\end{pgfonlayer}
\end{tikzpicture}

\end{document}

Output with wrong transparency

有任何想法吗?

编辑:我不想手动为间隙赋予与背景相同的颜色,因为我想将背景设为“任何东西”,例如图片或 tikz 无法控制的东西。

答案1

最简单的方法是赋予double与背景相同的颜色:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds,fit}
\begin{document}

\begin{tikzpicture}
\node (myNode1) at (0,0) [
                          rectangle,
                          draw,
                          double,
                          double distance=1mm
                        ] {Double};
%
\node (myNode2) at (0,-10mm) [
                          rectangle,
                          draw,
                          double=black!30,                          
                          double distance=1mm,
                          fill=green!30
                        ] {Double};
%
\begin{pgfonlayer}{background}
   \node [fill=black!30,fit=(myNode1) (myNode2)] {};
\end{pgfonlayer}
\end{tikzpicture}

\end{document} 

enter image description here

如果您对此不满意,那么您必须破解内部代码,因为没有涉及相关密钥。您也可以定义一个新命令。

答案2

另外两个选项让您无需担心背景颜色。

第一个(doubleA在下面的代码中)使用matrix节点。matrix节点是内部node有其他节点的nodes。因此,如果matrix节点仅被绘制而未填充,它将保持其透明度。使用此选项时请小心,因为您的内部节点必须以 结束\\

第二个 ont( doubleB) 使用append after command选项绘制带有fitting库的周围节点。与doubleA此类似,如果不这样做,外部节点就没有背景fill

您可以选择double line调整或节点inner sep的分离。如果您需要进一步参考这些节点,则需要在外部或内部节点之间进行选择。使用 解决方案,您可以固定外部节点名称,而内部节点将为,而使用解决方案,您可以固定内部节点名称,而外部节点将被称为(您可以更改此名称)。matrixfitmatrixname-1-1fitname-b

\documentclass[tikz,border=3mm]{standalone}

\usetikzlibrary{backgrounds,fit,matrix}
\begin{document}

\tikzset{doubleA/.style = {matrix of nodes,
    draw, inner sep=1mm,
    nodes = {rectangle, draw, inner sep=.3333em}}}

\tikzset{doubleB/.style = {rectangle, draw, 
    append after command={
        \pgfextra{\node[fit=(\tikzlastnode), draw] (\tikzlastnode-b) {};}
    }}}

\begin{tikzpicture}

\node[doubleA] at (0,0) (A) {Double\\};

\node[doubleB] at (0,-1)  (B) {Double};

\begin{pgfonlayer}{background}
   \node [fill=black!30,fit={(A) (B-b)}] {};
\end{pgfonlayer}
\end{tikzpicture}

\end{document} 

enter image description here

更新

另一个示例展示了如何放置或连接此类节点。每个节点都是双节点,由内节点和外节点组成,因此您可以将内节点或外节点与任何其他节点连接起来。您还可以使用内节点或外节点来锚定它们。

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{backgrounds,fit,matrix,positioning}
\begin{document}

\tikzset{doubleA/.style = {matrix of nodes,
    draw, inner sep=1mm,
    nodes = {rectangle, draw, inner sep=.3333em}}}

\tikzset{doubleB/.style = {rectangle, draw, 
    append after command={
        \pgfextra{\node[fit=(\tikzlastnode), draw] (\tikzlastnode-b) {};}
    }}}

\begin{tikzpicture}

\fill[red!20] (-1,-1) rectangle (4,4);
\draw[help lines] (-1,-1) grid (4,4);

\node[doubleA] (A)  at (0,0) {DoubleA\\};

\node[doubleB, anchor=south west] at (2,1)  (B) {DoubleB};

\node[doubleA, matrix anchor=south west] at (1,3)  (C) {DoubleA\\};

\node[doubleA, matrix anchor=D-1-1.south west, above=2cm of A.center] (D) {DoubleA\\};

\draw [<->] (A) to [out=80, in=260] (D);
\draw [<->] (D-1-1.north) |-(C-1-1);
\draw [<->] (A-1-1) to [out=10, in=180] (B-b);
\draw [<->] (A) to [out=-10, in=-80] (B);
\end{tikzpicture}
\end{document} 

enter image description here

相关内容