macro solo per tikz
Ho una macro scritta come \newcommandche contiene un ambiente tikz completamente nuovo.
Come si potrebbe creare una macro da questo che contiene solo il contenuto dell'ambiente tikz, in modo che se si desidera avere questo disegno più volte, viene disegnato in un unico ambiente tikz?
So che potrei semplicemente rimuovere la dichiarazione dell'ambiente tikz nella mia macro, ma questo mi consentirebbe di utilizzare la macro anche al di fuori di un ambiente tikz.
Esempi:
Ho una macro simile alla seguente:
\newcommand{\myTikzMacro}{
\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\draw (1,1) rectangle (2,0);
\end{tikzpicture}
Ora potrei usare la macro più volte l'una dopo l'altra in questo modo:
\myTikzMacro \\
\myTikzMacro \\
Ma allora verrebbero usati più ambienti tikz. Per evitare che sarei in grado di fare questa macro:
\newcommand{\myTikzMacro2}{
\draw (0,0) rectangle (1,1);
\draw (1,1) rectangle (2,0);
E usalo come segue:
\begin{tikzpicture}
\myTikzMacro2
\myTikzMacro2
\end{tikzpicture}
Ma questo mi permetterebbe di utilizzare la macro anche al di fuori di un tikzpictureambiente che vorrei evitare anch'io.
Esiste un modo per dichiarare le macro disponibili / visibili solo negli ambienti tikzpicture? (forse con pgfkeys)
Risposte
Secondo Come posso verificare se il codice corrente è all'interno di una tikzpicture? tikzfornisce la macro
\tikzifinpicture{true branch}{false branch}
per verificare se si è in a tikzpicture; i commenti nella sua definizione sembrano però gettare qualche dubbio sulla sua correttezza. (Credo che potrebbe fallire nelle immagini nidificate.) Supponendo che funzioni nella maggior parte dei casi semplici, puoi definire
\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.}{}%
}%
}
Ho usato qui \GenericError. Se il comando andrà in un pacchetto personalizzato, l'utilizzo \PackageErrorsarà più appropriato.