Как установить семейные ключи с помощью pgfkeys и макроса? - PullRequest
0 голосов
/ 16 ноября 2018

Я хочу установить 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 Ответ

0 голосов
/ 19 ноября 2018

Один из способов сделать то, что вы хотите, это:

\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.

...