将宏内的关键选项传递给 TikZ 绘图命令

将宏内的关键选项传递给 TikZ 绘图命令

我定义了一个带有一个可选键参数的命令。此命令进行一些计算,然后绘制一个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=...]{}。如果您进一步解释您希望看到的内容,我可以解释更多。

相关内容