Как в 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}

Связанный контент