簡體   English   中英

如何使用pgfkeys和宏設置家庭密鑰?

[英]How to set family keys with pgfkeys and a macro?

我想使用宏設置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.

我錯過了什么 ?

一種執行所需操作的方法是:

\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
  • 而不是使用\\pgfkeys .store in您可以讓\\pgfkeys存儲密鑰的值,並使用\\pgfkeysvalueof{/keys/test 1}等來打印它們的值。 我通常會定義一個\\newcommand\\Keys{\\pgfkeysvalueof{/keys/#1}}類的宏來執行此操作,您可以將其用作\\Keys{test 1}

順便說一句,您最好在tex.stackexchange.com上發布TeX問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM