我定义了一个带有一个可选键参数的命令。此命令进行一些计算,然后绘制一个tikzpicture
。如何让我的命令接受\draw
命令接受的所有键并传递它们?
\newlength{\gl@blgskip} \pgfkeys{/lineskip/.cd, .默认=\baselineskip, .store in = \gl@blgskip@macro } \newcommand{\baselinegrid}[1][] { \pgfkeys{lineskip,#1} % 设置长度为可选参数 lineskip \setlength{\gl@blgskip}{\gl@blgskip@macro} %%% 做一些计算... \开始{tikzpicture} \绘制(0,0)--(0,5厘米); \结束{tikzpicture}
现在我可以将命令调用为\baselinegrid[lineskip=3cm]
。我想执行类似操作\baselinegrid[lineskiip=3cm, color=red]
并将选项传递color
给\draw
命令。
答案1
我不确定你到底想做什么,但我建议将长度设置代码构建到键本身中,这样你就可以tikzpicture
直接将所有参数传递给环境。例如
\documentclass{article}
\usepackage{tikz}
\makeatletter
\newlength{\gl@blgskip}
\tikzset{lineskip/.cd,
.default=\baselineskip,
.code={\setlength{\gl@blgskip}{#1}}
}
\newcommand{\baselinegrid}[1][]
{
\begin{tikzpicture}[#1]
\draw (0,0) grid (\gl@blgskip,\gl@blgskip);
\end{tikzpicture}
}
\makeatother
\begin{document}
\baselinegrid[lineskip=3cm,color=red]
\end{document}
只要您不覆盖密钥,就无需将密钥放在单独的命名空间中tikz
。.code
密钥处理程序会设置一个宏来处理传递给它的参数,因此您不必在获取.store in
参数后再调用单独的宏。
在这种情况下,我通常会将所有代码构建到诸如 之类的键中,execute at begin/end picture
以便您的界面可以只是\tikz[baselinegrid,lineskip=...]{}
。如果您进一步解释您希望看到的内容,我可以解释更多。