
Я хочу нарисовать несколько сложных рисунков и собрать их в один большой рисунок 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}