1

我想使用宏设置 pgfkeys-family 的 2 个键:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgf}
\begin{document}
\pgfkeys{
    /keys/.is family,
    /keys/.cd,
    test 1/.store in=\testone,
    test 1=unset,
    test 2/.store in=\testtwo,
    test 2=unset,
}

\pgfkeys{/store/.code={\pgfkeys{/keys/.cd,#1}}}
\def\mykey{test 1=ONE,test 2=TWO}
\pgfkeys{/store=\mykey}
t1 : \testone,   
t2 : \testtwo.
\end{document}

我希望得到:

t1 : ONE, t2 : TWO.

我得到:

t1 : unset, t2 : unset

和一条错误消息:

Package pgfkeys Error: I do not know the key '/keys/test 1=ONE,test 2=TWO'
and I am going to ignore it. Perhaps you misspelled it.

我错过了什么 ?

4

1 回答 1

1

做你想做的一种方法是:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgf}
\pgfkeys{
    /keys/.is family,
    /keys,
    test 1/.store in=\testone,
    test 1/.initial=unset,
    test 2/.store in=\testtwo,
    test 2/.initial=unset,
}
\newcommand\setkeys[1]{\pgfkeys{/keys,#1}}

\begin{document}
  \setkeys{test 1=ONE,test 2=TWO}
  t1 : \testone,
  t2 : \testtwo.
\end{document}

注意事项:

  • 使用.initial处理程序设置键的初始值
  • 你不需要.cd一个家庭的处理程序
  • 我已经定义了宏\setkeys来设置逗号分隔列表中的键
  • 如果您想使用定义的宏来设置键,就像\def\mykey{test 1=ONE,test 2=TWO}您遇到一些轻微痛苦的扩展问题一样。解决此问题的一种方法是使用\edef\Addkey{\noexpand\pgfkeys{/keys, \mykey}}\Addkey
  • 而不是使用.store in你可以让\pgfkeys存储键的值并使用\pgfkeysvalueof{/keys/test 1}etc 来打印它们的值。我通常会定义一个宏\newcommand\Keys{\pgfkeysvalueof{/keys/#1}}来执行此操作,您可以将其用作\Keys{test 1}.

顺便说一句,你最好在 tex.stackexchange.com 上发布 TeX 问题。

于 2018-11-19T05:59:01.033 回答