在宏中存储 pgfkeys 的选项

在宏中存储 pgfkeys 的选项

我想将一些选项定义为宏内的键值对列表,并在采用 pgfkeys 样式选项的命令中使用该宏。以下是 MWE:

\documentclass{standalone}
\usepackage{pgfkeys}

\pgfkeys{
    /example/.is family, /example,
    .unknown/.code = {
        (\pgfkeyscurrentkeyRAW,#1)
        \typeout{DEBUG \pgfkeyscurrentkeyRAW}
    }
}

\newcommand{\defvalues}[2][]{
    \pgfkeys{/example, #1}
}

\begin{document}

\def\mylist{c=3,d=4}

\defvalues[a=1,b=2]{}

\expandafter\defvalues\expandafter[\mylist]{}

\expandafter\defvalues\expandafter[f=6,\mylist]{}

\end{document}

在最后一行,\mylist没有正确展开。

文档中的预期输出:

(a,1) (b,2) (c,3) (d,4) (f,6) (c,3) (d,4)

实际产量:

(a,1) (b,2) (c,3) (d,4) (f,6) (c=3,d=4)

或者,运行时pdflatex test.tex|grep DEBUG,预期输出:

DEBUG a
DEBUG b
DEBUG c
DEBUG d
DEBUG f
DEBUG c
DEBUG d

实际产量:

DEBUG a
DEBUG b
DEBUG c
DEBUG d
DEBUG f
DEBUG c=3,d=4

\mylist在传递给之前我该如何进行扩展pgfkeys

答案1

这是一个使用.style处理程序定义两个列表的解决方案。

\documentclass{article}
\usepackage{pgfkeys}

\pgfkeys{
  /example/.is family,
  /example,
  .unknown/.code = {
    (\pgfkeyscurrentkeyRAW,#1)
    \typeout{DEBUG \pgfkeyscurrentkeyRAW}
  }
}

\newcommand{\defvalues}[2][]{\pgfkeys{/example,#1}}
\def\mylist{c=3,d=4}
\defvalues[mylist/.style/.expand once={\mylist}]{}
\defvalues[mylist2/.style={g=8,h=45}]{}

\begin{document}
\defvalues[a=1,b=2]{}

\defvalues[mylist]{}

\defvalues[f=6,mylist,mylist2]{}
\end{document}

输出:

(a,1)(b,2)
(三,3)(四,4)
(f,6)(c,3)(d,4)(g,8)(h,45)

答案2

我找到了一个解决方案:

\newcommand{\defvalues}[2][]{
    \edef\opts{/example, #1}
    \expandafter\pgfkeys\expandafter{\opts}
}

这按预期工作。我猜这与 不能像 那样\expandafter工作有关。或者更确切地说,在第三种情况下,它只扩展,而不是括号中的所有内容。[]{}f

相关内容