tikz専用のマクロ

Oct 07 2020

\newcommand完全に新しいtikz-environmentを含むマクロが書かれています。

これから、tikz-environmentのコンテンツのみを含むマクロを作成して、この描画を複数回実行したい場合に、1つのtikz-environmentに描画するにはどうすればよいでしょうか。

マクロ内のtikz-environmentの宣言を単純に削除できることはわかっていますが、それにより、tikz-environmentの外部でもマクロを使用できるようになります。

例:

次のようなマクロがあります。

\newcommand{\myTikzMacro}{
  \begin{tikzpicture}
    \draw (0,0) rectangle (1,1);
    \draw (1,1) rectangle (2,0);
  \end{tikzpicture}

これで、次のようにマクロを次々と複数回使用できます。

\myTikzMacro \\
\myTikzMacro \\

しかし、その後、複数のtikz環境が使用されます。それを避けるために、私はこのマクロを作ることができるでしょう:

\newcommand{\myTikzMacro2}{
    \draw (0,0) rectangle (1,1);
    \draw (1,1) rectangle (2,0);

そして、次のように使用します。

\begin{tikzpicture}
  \myTikzMacro2
  \myTikzMacro2
\end{tikzpicture}

しかし、これにより、私tikzpictureも避けたい環境の外でもマクロを使用できるようになります。

tikzpicture環境内でのみ使用可能/表示可能なマクロを宣言する方法はありますか?(多分pgfkeysで)

回答

1 campa Oct 07 2020 at 21:23

よると、現在のコードがtikzpicture内にあるかどうかはどのように確認できますか? tikzマクロを提供します

\tikzifinpicture{true branch}{false branch}

にあるかどうかをテストするためtikzpicture; しかし、その定義のコメントは、その正しさに疑問を投げかけているようです。(ネストされた画像では失敗する可能性があると思います。)最も単純なケースで機能すると仮定すると、次のように定義できます。

\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.}{}%
    }%
}

ここで使用しました\GenericError。コマンドがカスタムパッケージに含まれる場合は、を使用\PackageErrorする方が適切です。