我有一个带双边框的矩形框。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}
有任何想法吗?
编辑:我不想手动为间隙赋予与背景相同的颜色,因为我想将背景设为“任何东西”,例如图片或 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}
如果您对此不满意,那么您必须破解内部代码,因为没有涉及相关密钥。您也可以定义一个新命令。
答案2
另外两个选项让您无需担心背景颜色。
第一个(doubleA
在下面的代码中)使用matrix
节点。matrix
节点是内部node
有其他节点的nodes
。因此,如果matrix
节点仅被绘制而未填充,它将保持其透明度。使用此选项时请小心,因为您的内部节点必须以 结束\\
。
第二个 ont( doubleB
) 使用append after command
选项绘制带有fitting
库的周围节点。与doubleA
此类似,如果不这样做,外部节点就没有背景fill
。
您可以选择double line
调整或节点inner sep
的分离。如果您需要进一步参考这些节点,则需要在外部或内部节点之间进行选择。使用 解决方案,您可以固定外部节点名称,而内部节点将为,而使用解决方案,您可以固定内部节点名称,而外部节点将被称为(您可以更改此名称)。matrix
fit
matrix
name-1-1
fit
name-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}
更新
另一个示例展示了如何放置或连接此类节点。每个节点都是双节点,由内节点和外节点组成,因此您可以将内节点或外节点与任何其他节点连接起来。您还可以使用内节点或外节点来锚定它们。
\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}