如何在 TikZ 中的更大的绘图中嵌套子绘图?

如何在 TikZ 中的更大的绘图中嵌套子绘图?

我想绘制几幅复杂的图画,并将它们放在一幅更大的 TikZ 图画中。我该怎么做?

到目前为止,这是我所做的:

\documentclass[preview]{standalone}

\begin{document}
\begin{tikzpicture}
  \draw[help lines] (0,0) grid (10, 10);

  \node (rectifier) at (0,0) {
    \begin{tikzpicture}
      \node (sine) at (1.25,3) {
        \begin{tikzpicture}[scale=0.4]
          \draw (0,0) sin (1,1) cos (2,0) sin (3,-1) cos (4,0);
        \end{tikzpicture}
      };
      \node (rect) at (2.75,1) {
        \begin{tikzpicture}[scale=0.4]
          \draw (0,2) sin ++(1,1) cos (2,2) sin (3,3) cos (4,2) ;
        \end{tikzpicture}
      };
      \draw (0,0) rectangle (4,4) -- (0,0);
    \end{tikzpicture}
  };
\end{tikzpicture}
\end{document}

问题:
我希望整个(rectifier)盒子及其所有内容都可以从顶层扩展,如下所示:

\node (rectifier) at (0,0) {
  \begin{tikzpicture}[scale=0.5]
  ...
  ...
  ...

但它只缩放盒子,而不缩放正弦曲线图。

扩大:
TikZ 中是否存在“面向对象”范例,我可以在其中声明对象类并在更大的图形中简单地实例化它们?

答案1

首先,您要将图片放在节点内。虽然这种方法有效,而且在很多时候这是必须做的,但在必须应用转换时,这种方法就比较棘手了。

第二项,从概念上讲,您的图表似乎是同一“级别”上的事物,只是在不同的地方。范围环境更适合您的需求。

第三件事是肯定的,tikz 中有一个面向对象的结构。我不使用它(并且根据本网站上的大多数答案判断,大多数人都不使用它)。您可以在手册中找到信息。

使用范围的代码版本是:

\documentclass[preview]{standalone}

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}

\draw[help lines] (0,0) grid (10, 10);

\begin{scope}[scale=0.5]

\draw[green,shift={(1.25,3)}] (0,0) sin (1,1) cos (2,0) sin (3,-1) cos (4,0);  
\draw[blue,shift={(2.75,1)}] (0,2) sin ++(1,1) cos (2,2) sin (3,3) cos (4,2) ;

\draw (0,0) rectangle (4,4) -- (0,0);

\end{scope}

%The same stuff, but shifted, to show you can shift a whole picture 
\begin{scope}[scale=0.5,shift={(5,5)}]

\draw[green,shift={(1.25,3)}] (0,0) sin (1,1) cos (2,0) sin (3,-1) cos (4,0);  
\draw[blue,shift={(2.75,1)}] (0,2) sin ++(1,1) cos (2,2) sin (3,3) cos (4,2) ;

\draw (0,0) rectangle (4,4) -- (0,0);

\end{scope}

\end{tikzpicture}
\end{document}

相关内容