Makro nur für Tikz
Ich habe ein Makro geschrieben, \newcommanddas eine komplett neue Tikz-Umgebung enthält.
Wie kann man daraus ein Makro machen, das nur den Inhalt der Tikz-Umgebung enthält, so dass, wenn man diese Zeichnung mehrmals haben möchte, sie in einer einzigen Tikz-Umgebung gezeichnet wird?
Ich weiß, dass ich die Deklaration der Tikz-Umgebung in meinem Makro einfach entfernen könnte, aber das würde mich das Makro auch außerhalb einer Tikz-Umgebung verwenden lassen.
Beispiele:
Ich habe ein Makro ähnlich dem folgenden:
\newcommand{\myTikzMacro}{
\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\draw (1,1) rectangle (2,0);
\end{tikzpicture}
Jetzt könnte ich das Makro mehrmals nacheinander verwenden:
\myTikzMacro \\
\myTikzMacro \\
Dann würden aber mehrere Tikz-Umgebungen verwendet. Um dies zu vermeiden, könnte ich dieses Makro erstellen:
\newcommand{\myTikzMacro2}{
\draw (0,0) rectangle (1,1);
\draw (1,1) rectangle (2,0);
Und verwenden Sie es wie folgt:
\begin{tikzpicture}
\myTikzMacro2
\myTikzMacro2
\end{tikzpicture}
Dies würde es mir jedoch ermöglichen, das Makro auch außerhalb einer tikzpictureUmgebung zu verwenden, die ich auch vermeiden möchte.
Gibt es eine Möglichkeit, Makros nur in tikzpicture-Umgebungen als verfügbar / sichtbar zu deklarieren? (vielleicht mit pgfkeys)
Antworten
Laut Wie kann ich überprüfen , ob der aktuelle Code in einem tikzpicture ist? tikzstellt das Makro bereit
\tikzifinpicture{true branch}{false branch}
zum Testen, ob man in einem ist tikzpicture; Die Kommentare in seiner Definition scheinen jedoch einige Zweifel an seiner Richtigkeit zu werfen. (Ich glaube, dass es in verschachtelten Bildern fehlschlagen kann.) Angenommen, es funktioniert in den meisten einfachen Fällen, die Sie definieren können
\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.}{}%
}%
}
Ich habe hier verwendet \GenericError. Wenn der Befehl in ein benutzerdefiniertes Paket eingefügt \PackageErrorwird , ist die Verwendung besser geeignet.