如何将选项传递给 newcommand

如何将选项传递给 newcommand

我有一个基本上是这样的命令:

\newcommand\cl[2]{\tikz{\filldraw[fill=#1,...#2] (0,0) circle [radius=0.1cm];}}

\begin{tikzpicture}[scale=0.8]
  \cl{blue}{dotted,minimum size=1mm}
\end{tikzpicture}

想知道如何获取类似选项fill=blue,dotted,minimum size=1mm并将它们传递给内部的嵌套函数\newcommand

\filldraw[fill=#1,...#2]

更新本质上,我想知道如何更好地利用这些选项。因此,从编程的角度来看,这些选项就像 HTML 属性一样是一个映射,因此fill=blue,dotted,minimum size=1mm实际上更像是:

fill=blue,
dotted=dotted,
minimum size=1mm

我想知道两件事:

  1. 如何批量传递所有,\filldraw[...#3]批量传递所有选项
  2. 如何通过键引用选项并将其传入。因此:\filldraw[minimum size=#3],当没有定义“#3”时。如何实现这一点。

答案1

正如 Alan Munn 所说,你可以使用类似

\newcommand\cl[2]{%
  \tikz{\filldraw[fill=#1,#2] (0,0) circle [radius=0.1cm];}%
}

如果您发现自己经常使用相同的选项,那么可能值得使用定义一种新的风格\tikzset,但并不完全清楚这正是您所追求的。

作为元注释,除了一些例外,TeX 的宏替换本质上是将参数#1, #2, ...#9逐字替换为宏的参数。逗号对 TeX 来说并不特殊(默认情况下)。因此,代码\cl{blue}{dotted,minimum size=1mm}如下

\tikz{\filldraw[fill=blue,dotted,minimum size=1mm] (0,0) circle [radius=0.1cm];}

pgfkeys,TikZ 选项解析的基础机制,将逗号视为特殊字符,因为它正在寻找以逗号分隔的键和(可选)值列表。

相关内容