我怎样才能在 tikzpicture 中拥有子图片?

我怎样才能在 tikzpicture 中拥有子图片?

这是一个时不时会出现的问题,我认为这对 TikZ/PGF 系统来说是一个极其有用的补充。

基本设置是能够将 tikzpicture 的一部分指定为“子图片”。理想的情况是,它有点像一个以 tikzpicture 为内容的节点,但实际上并不嵌套 tikzpicture(根据我的经验,这会导致一些继承问题)。特别是,应该可以根据子图片的边界框来定位子图片(就像节点一样),并且应该有一个周围(矩形)节点及其所有锚点(这可能是最简单的部分)。

我可以想到几种方法来做到这一点,但其他人可能已经解决了这个问题,或者有比我更好的想法。

答案1

仅使用外部 TikZ 图片是不够的。如果您希望子图片的位置受到包含图片中的元素的影响,而包含图片中的其他元素又受到子图片的影响,那么您还需要一些额外的东西。我们可以将子图片放在 中,savebox并在主图片内使用它。然后,我们在主图片内使用它,方法是将其放在带有 的节点内inner sep=0pt。这使我们能够像任何其他节点一样定位节点,同时它可以包含不受继承问题影响的 TikZ 图片。如果我们remember picture在两张图片上都设置了选项,我们也可以引用第一张图片中的节点。我们在这里不需要该overlay选项,因为它基本上是一张恰好在其中有一个框的图片。以下是一个非常基本的例子,演示了这个概念:

\documentclass{article}
\usepackage{tikz}
\begin{document}
  \newsavebox\mysubpic
  \sbox{\mysubpic}{%
    \begin{tikzpicture}[remember picture] %sub-picture
      \path[draw, fill=blue!30] (0,0) -- (2,2) -- (0,2) -- cycle;
      \path[draw, fill=green!30] (0,0) -- (2,2) -- (2,0) -- cycle;
      \coordinate (orig) at (0,0);
      \coordinate (sw) at (current bounding box.south west);
      \coordinate (nw) at (current bounding box.north west);
      \coordinate (se) at (current bounding box.south east);
      \coordinate (ne) at (current bounding box.north east);
    \end{tikzpicture}% needed, otherwise anchors are wrong!
  }
  \begin{tikzpicture}[remember picture]
    \path[draw] node (a) {before} ++(2,0) node[inner sep=0pt] (subpic) {\usebox{\mysubpic}} ++(\wd\mysubpic,0) node {after};
    \foreach \anch in {south west, north west, south east, north east}{
      \fill[blue] (subpic.\anch) circle[radius=2pt];
    }
    \foreach \anch in {sw,nw,se,ne}{
      \fill (\anch) circle[radius=1pt];
    }
  \end{tikzpicture}
\end{document}

生成的图像如下:

TikZ 中的子图片

相关内容