macro apenas para tikz
Eu tenho uma macro escrita \newcommandque contém um novo ambiente tikz completo.
Como alguém poderia fazer disso uma macro que contenha apenas o conteúdo do ambiente tikz, de modo que se alguém quiser ter esse desenho várias vezes, ele será desenhado em um único ambiente tikz?
Eu sei que poderia simplesmente retirar a declaração do ambiente tikz em minha macro, mas isso me permitiria usar a macro fora de um ambiente tikz também.
Exemplos:
Eu tenho uma macro semelhante a esta:
\newcommand{\myTikzMacro}{
\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\draw (1,1) rectangle (2,0);
\end{tikzpicture}
Agora eu poderia usar a macro várias vezes uma após a outra, desta forma:
\myTikzMacro \\
\myTikzMacro \\
Mas então vários ambientes tikz seriam usados. Para evitar isso, seria capaz de fazer esta macro:
\newcommand{\myTikzMacro2}{
\draw (0,0) rectangle (1,1);
\draw (1,1) rectangle (2,0);
E use-o da seguinte forma:
\begin{tikzpicture}
\myTikzMacro2
\myTikzMacro2
\end{tikzpicture}
Mas isso me permitiria usar a macro fora de um tikzpictureambiente também, o que também gostaria de evitar.
Existe uma maneira de declarar macros disponíveis / visíveis apenas em ambientes tikzpicture? (talvez com pgfkeys)
Respostas
De acordo com Como posso verificar se o código atual está dentro de um tikzpicture? tikzfornece a macro
\tikzifinpicture{true branch}{false branch}
para testar se alguém está em a tikzpicture; os comentários em sua definição parecem, no entanto, lançar algumas dúvidas sobre sua exatidão. (Eu acredito que pode falhar em imagens aninhadas.) Supondo que funcione na maioria dos casos simples, você pode definir
\newcommand*{\myTikzPicture}
{\tikzifinpicture
{%
\draw (0,0) rectangle (1,1);
\draw (1,1) rectangle (2,0);
}%
{%
\GenericError{}{Unallowed command}
{\string\myTikzPicture\space can be used only inside a tikz picture.}{}%
}%
}
Eu usei aqui \GenericError. Se o comando for para um pacote personalizado, o uso \PackageErrorserá mais apropriado.