我有一个基本上是这样的命令:
\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
我想知道两件事:
- 如何批量传递所有,
\filldraw[...#3]
批量传递所有选项 - 如何通过键引用选项并将其传入。因此:
\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 选项解析的基础机制,将逗号视为特殊字符,因为它正在寻找以逗号分隔的键和(可选)值列表。