仅适用于 tikz 的宏

仅适用于 tikz 的宏

我有一个宏,其中\newcommand包含一个全新的 tikz 环境。

如何才能用这个宏来制作仅包含 tikz 环境内容的宏,以便如果想要多次绘制该图形,则可以在单个 tikz 环境中绘制它?

我知道我可以简单地删除宏中 tikz 环境的声明,但这也允许我在 tikz 环境之外使用该宏。

例子:

我有一个类似于以下的宏:

\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

根据我如何检查当前代码是否在 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会更合适。

相关内容