
Quero desenhar vários desenhos complexos e juntá-los em um desenho maior do TikZ. Como faço isso?
Até agora, isso é o que eu fiz:
\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}
Problema:
Quero que toda a (rectifier)
caixa e todo o seu conteúdo sejam escaláveis a partir do nível superior, assim:
\node (rectifier) at (0,0) {
\begin{tikzpicture}[scale=0.5]
...
...
...
Mas dimensiona apenas a caixa, e não os desenhos sinusóides.
Extensão:
Existe um paradigma "orientado a objetos" no TikZ, onde posso declarar classes de objetos e simplesmente instanciá-los em um desenho maior?
Responder1
Primeiro de tudo, você está colocando imagens dentro de nós. Embora funcione e muitas vezes seja o que deve ser feito, é delicado de usar quando transformações devem ser aplicadas.
Segundo item, conceitualmente seu diagrama parece ser coisas no mesmo “nível”, apenas em lugares diferentes. O ambiente de escopo é mais adequado para o que você deseja.
A terceira coisa é sim, existe uma estrutura orientada a objetos no tikz. Eu não uso (e a julgar pela maioria das respostas neste site, a maioria das pessoas não usa). Você pode encontrar informações no manual.
Uma versão do seu código usando escopo é:
\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}