macro solo para tikz
Tengo una macro escrita \newcommandque contiene un entorno tikz completamente nuevo.
¿Cómo se puede hacer una macro con esto que solo contiene el contenido del entorno tikz, de modo que si uno quiere tener este dibujo varias veces, se dibuja en un solo entorno tikz?
Sé que podría simplemente quitar la declaración del entorno tikz en mi macro, pero eso me permitiría usar la macro fuera de un entorno tikz también.
Ejemplos:
Tengo una macro similar a la siguiente:
\newcommand{\myTikzMacro}{
\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\draw (1,1) rectangle (2,0);
\end{tikzpicture}
Ahora podría usar la macro varias veces una tras otra de esta manera:
\myTikzMacro \\
\myTikzMacro \\
Pero luego se usarían múltiples entornos tikz. Para evitar eso, podría hacer esta macro:
\newcommand{\myTikzMacro2}{
\draw (0,0) rectangle (1,1);
\draw (1,1) rectangle (2,0);
Y utilícelo de la siguiente manera:
\begin{tikzpicture}
\myTikzMacro2
\myTikzMacro2
\end{tikzpicture}
Pero esto también me permitiría usar la macro fuera de un tikzpictureentorno que también me gustaría evitar.
¿Hay alguna forma de declarar macros solo disponibles / visibles dentro de entornos tikzpicture? (tal vez con pgfkeys)
Respuestas
De acuerdo con ¿Cómo puedo verificar si el código actual está dentro de una imagen tikz? tikzproporciona la macro
\tikzifinpicture{true branch}{false branch}
para probar si uno está en a tikzpicture; Sin embargo, los comentarios en su definición parecen arrojar algunas dudas sobre su exactitud. (Creo que podría fallar en imágenes anidadas). Suponiendo que funciona en la mayoría de los casos simples, puede 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.}{}%
}%
}
Usé aquí \GenericError. Si el comando entrará en un paquete personalizado, \PackageErrorserá más apropiado usarlo .