是否pgfkeys
有一些预定义的处理程序可以将未知键及其值作为列表存储在命令中?例如,在下面的例子中,我想获取一个包含的命令blub=1, bla=\textbf{2}
。(我想将未知键传递给\includegraphics
)。
\documentclass{article}
\usepackage{pgfkeys}
\pgfqkeys{/my key}{
x/.initial={0.5},
.unknown/.code={\pgfkeyscurrentname=\pgfkeyscurrentvalue}}
\begin{document}
\pgfkeys{/my key/.cd, x=2, blub=1, bla=\textbf{2}}
\end{document}
答案1
也许是类似这样的事?
处理程序.unknown to list
会安装一个.unknown/.code
键,将未知键及其可能的给定值(包含在 中{ }
)附加到列表#1
。 另一个.@clear list
键用于清除列表#1
,但如果键是在组内执行的(就像 TikZ 在路径上一样),我想它应该没什么用。
(\pgfutil@gobble
显然不适用于pgfkeys
)从列表中删除第一个,
。(当然,如果该解决方案仅适用于 LaTeX,则通常\@gobble
可以使用。)
\expandafter
s的数量模拟了\expandonce
/\appto
组合(etoolbox
),因为我们不能假设所有东西都是可扩展的(并且根本就不应该扩展)。
代码
\documentclass{article}
\usepackage{pgfkeys}
\makeatletter
\def\pgfutil@gobble#1{}
\pgfkeys{/handlers/.unknown to list/.code=%
\let#1\pgfutil@gobble
\pgfkeysalso{% or \pgfkeys{\pgfkeyscurrentpath/.cd,
.unknown/.code=% how to handle the difference between 'key' and 'key=value'?
\ifx\pgfkeyscurrentvalue\pgfkeysnovalue
\let\pgfkeys@temp\pgfkeyscurrentname
\else
\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\pgfkeys@temp\expandafter\expandafter\expandafter{\expandafter\pgfkeyscurrentname\expandafter=\expandafter{\pgfkeyscurrentvalue}}%
\fi
\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter#1\expandafter\expandafter\expandafter{\expandafter#1\expandafter,\pgfkeys@temp},%
.@clear list/.code=\let#1\pgfutil@gobble}%
}
\makeatother
\pgfkeys{/my key/.cd,
x/.initial={0.5},
.unknown to list=\myList
}
\begin{document}
\pgfkeys{
/my key/.cd,
x=2,
blub=1,
bla=\textbf{2},
dingenskirchen=something else
}
\meaning\myList
\pgfkeys{/my key/.@clear list}
\meaning\myList
\end{document}