Как установить семейные ключи с помощью pgfkeys и макроса?
Я хочу установить 2 ключа семейства pgfkeys, используя макрос:
\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.
Что я упустил?
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}
и т.д., чтобы напечатать их значения. Я обычно определяю макрос как\newcommand\Keys{\pgfkeysvalueof{/keys/#1}}
чтобы сделать это, которое вы бы использовали в качестве\Keys{test 1}
,
Кстати, вам лучше размещать вопросы TeX на tex.stackexchange.com.