由两个略微偏移的矩形表示的多个对象实例

由两个略微偏移的矩形表示的多个对象实例

在软件图表中,我希望能够用两个矩形表示一个对象的多个实例,其中一个矩形略有偏移。我最近了解了这种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 shadowdouble 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}

在此处输入图片描述

相关内容