【问题标题】:How to set family keys with pgfkeys and a macro?如何使用 pgfkeys 和宏设置家庭密钥?
【发布时间】:2018-11-16 14:17:54
【问题描述】:

我想使用宏设置 pgfkeys 系列的 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.

我错过了什么?

【问题讨论】:

    标签: latex pgf


    【解决方案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.stackexchange.com 上发布 TeX 问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-19
      • 2012-10-21
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多