makro tylko dla tikz
Mam napisane jako makro, \newcommandktóre zawiera kompletne nowe środowisko tikz.
Jak można zrobić z tego makro, które zawiera tylko zawartość środowiska tikz, tak że jeśli chce się mieć ten rysunek wiele razy, jest on rysowany w jednym środowisku tikz?
Wiem, że mógłbym po prostu usunąć deklarację środowiska tikz w moim makrze, ale pozwoliłoby mi to używać makra również poza środowiskiem tikz.
Przykłady:
Mam makro podobne do następującego:
\newcommand{\myTikzMacro}{
\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\draw (1,1) rectangle (2,0);
\end{tikzpicture}
Teraz mógłbym używać makra wiele razy po sobie w ten sposób:
\myTikzMacro \\
\myTikzMacro \\
Ale wtedy zostanie użytych wiele środowisk tikz. Aby tego uniknąć, byłbym w stanie zrobić to makro:
\newcommand{\myTikzMacro2}{
\draw (0,0) rectangle (1,1);
\draw (1,1) rectangle (2,0);
I użyj go w następujący sposób:
\begin{tikzpicture}
\myTikzMacro2
\myTikzMacro2
\end{tikzpicture}
Ale to pozwoliłoby mi używać makra również poza tikzpictureśrodowiskiem, którego też chciałbym uniknąć.
Czy istnieje sposób na zadeklarowanie makr dostępnych / widocznych tylko w środowiskach tikzpicture? (może z pgfkeys)
Odpowiedzi
Zgodnie z Jak mogę sprawdzić, czy bieżący kod znajduje się wewnątrz tikzpicture? tikzudostępnia makro
\tikzifinpicture{true branch}{false branch}
do sprawdzania, czy ktoś jest w tikzpicture; komentarze w jej definicji wydają się jednak budzić wątpliwości co do jej poprawności. (Myślę, że może się nie udać w zagnieżdżonych obrazach.) Zakładając, że działa w większości prostych przypadków, które można zdefiniować
\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.}{}%
}%
}
Użyłem tutaj \GenericError. Jeśli polecenie trafi do pakietu niestandardowego, użycie \PackageErrorbędzie bardziej odpowiednie.