我想使用宏设置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.
我想念什么?
答案 0 :(得分:0)
一种执行所需操作的方法是:
\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}
等来打印键的值。我通常会定义一个像\newcommand\Keys{\pgfkeysvalueof{/keys/#1}}
这样的宏来执行此操作,您可以将其用作\Keys{test 1}
。顺便说一句,您最好在tex.stackexchange.com上发布TeX问题。