在软件图表中,我希望能够用两个矩形表示一个对象的多个实例,其中一个矩形略有偏移。我最近了解了这种pic
样式,所以我将它与两个节点一起使用以实现我想要的效果。
以下示例确实有效,但我想知道是否可以在不使用 的情况下执行相同操作fill=white
。我的 hack 假设整个图片背景都是白色的,但这可能并不总是成立。我希望能够裁剪掉不需要的图片部分。
\documentclass[crop,border=3pt]{standalone}
\usepackage{pgf,tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
every node/.style={font=\sffamily\small},
block/.style={
rectangle, draw, align=center, minimum width=2cm,
minimum height=1.4cm, font=\sffamily\small
},
multinode/.pic={
\node [block] at (0.1,0.1) {};
\node [block, \tikzpictextoptions, fill=white] at (0,0) {\tikzpictext};% <-- FILL WHITE
}
]
\node [block] (STG) at (2,5) {single\\instance};
\pic [pic text={multi\\instance}] at (5,5) {multinode};
\end{tikzpicture}
\end{document}
下面的图片首先展示了使用填充白色 hack 的一个版本,然后展示了没有使用填充白色 hack 的一个版本。
答案1
这是不进行裁剪的建议。您可以只绘制第二个矩形所需的线条。
\documentclass[border=3pt]{standalone}
\usepackage{tikz}
\pagecolor{orange!20}
\begin{document}
\begin{tikzpicture}[
every node/.style={font=\sffamily\small},
block/.style={
rectangle, draw, align=center, minimum width=2cm,
minimum height=1.4cm, font=\sffamily\small
},
multinode/.pic={
\node [block, \tikzpictextoptions](n) at (0,0) {\tikzpictext};% <-- FILL WHITE
\path [block]
([shift={(.1,0)}]n.north west)
--+(0,.1)
-|([shift={(.1,.1)}]n.south east)
--+(-.1,0)
;
}
]
\node [block] (STG) at (2,5) {single\\instance};
\pic [pic text={multi\\instance}] at (5,5) {multinode};
\end{tikzpicture}
\end{document}
结果:
或者
和
\documentclass[border=3pt]{standalone}
\usepackage{tikz}
\pagecolor{orange!20}
\begin{document}
\begin{tikzpicture}[
every node/.style={font=\sffamily\small},
block/.style={
rectangle, draw, align=center, minimum width=2cm,
minimum height=1.4cm, font=\sffamily\small
},
pics/multinode/.style={code={
\node [block, \tikzpictextoptions](n) at (0,0) {\tikzpictext};% <-- FILL WHITE
\foreach[count=\j from 0] \i in {1,...,#1}
\path [block]
([shift={(.1*\i,.1*\j)}]n.north west)
--+(0,.1)
-|([shift={(.1*\i,.1*\i)}]n.south east)
--+(-.1,0)
;
}},
pics/multinode/.default=1
]
\node [block] (STG) at (2,5) {single\\instance};
\pic [pic text={multi\\instance}] at (5,5) {multinode};
\pic [pic text={multi\\instance}] at (8,5) {multinode=5};
\end{tikzpicture}
\end{document}
答案2
没有必要pics
,您可以使用copy shadow
或double copy shadow
:
\documentclass[tikz, border=5mm]{standalone}
\usepackage{pgf,tikz}
\usetikzlibrary{positioning,shadows}
\begin{document}
\begin{tikzpicture}[
every node/.style={font=\sffamily\small},
block/.style={
rectangle, draw, align=center, minimum width=2cm,
minimum height=1.4cm, font=\sffamily\small
},
multinode/.style={block, copy shadow, fill=white},
multimultinode/.style={block, double copy shadow, fill=white},
]
\node [block] (STG) {single\\instance};
\node [multinode, right = of STG] (Mul) {multi\\instance};
\node [multimultinode, above= of Mul] (MMul) {multi\\instance};
\end{tikzpicture}
\end{document}