pgfkeys:将未知密钥存储在命令中

pgfkeys:将未知密钥存储在命令中

是否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可以使用。)

\expandafters的数量模拟了\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}

输出

在此处输入图片描述

相关内容