我有一个宏,其中\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
会更合适。