相对于另一个 tikz 范围定位 tikz 范围

相对于另一个 tikz 范围定位 tikz 范围

在第 333 页的 PGFplots 手册中,作者描述了如何相对于另一个轴环境定位轴环境:

\begin{tikzpicture}
    \begin{axis}[name=plot1,height=3cm,width=3cm]
        \addplot coordinates {(0,0) (1,1) (2,2)};
    \end{axis}
    \begin{axis}[name=plot2,at={($(plot1.east)+(1cm,0)$)},anchor=west,height=3cm,width=3cm]
         \addplot coordinates {(0,2) (1,1) (2,0)};
    \end{axis}
\end{tikzpicture}

不幸的是,对于示波器来说,

\begin{tikzpicture}
    \begin{scope}[name=scope1]
         \draw (1,2) rectangle (3,4);
    \end{scope}
    \begin{scope}[at={($(scope1.east)+(1cm,0)$)},anchor=west]
         \draw (5,6) rectangle (7,8);
    \end{scope}
\end{tikzpicture}

,不起作用。我该如何让它工作?我对绝对定位不感兴趣,只对相对定位感兴趣。

答案1

这是一个用于local bounding box获取第一个范围的边界框并用于shift定义第二个范围的原点的解决方案:

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
  \begin{scope}[local bounding box=scope1]
    \draw (2,2) rectangle (3,4);
  \end{scope}
  \begin{scope}[shift={($(scope1.east)+(1cm,0)$)}]
    \draw (0,0) rectangle (2,1);
  \end{scope}
\end{tikzpicture}
\end{document}

enter image description here

答案2

编辑:以下答案仅供参考,但请注意,由于嵌套 tikzpictures 可能会导致一些微妙的副作用,因此不建议这样做。在大多数情况下,要构建“模块化”图片,您可以使用pic文档第 18 章中记录的操作。在问题中这样的简单情况下,shift和的组合fit通常就足够了。


如果您需要将两个范围分开并希望将它们用作“模块”,我建议您使用两个嵌套 tikzpictures 的节点,如

\begin{tikzpicture}
    \node(scope1){
        \begin{tikzpicture}
           \draw (1,2) rectangle (3,4);
        \end{tikzpicture}
    };
    \node[at={($(scope1.east)+(1cm,0)$)},anchor=west] (scope2){
        \begin{tikzpicture}
             \draw (5,6) rectangle (7,8);
        \end{tikzpicture}
    };
\end{tikzpicture}

相关内容