pgfopts .unknown 不处理键值对?

pgfopts .unknown 不处理键值对?

我希望我的自定义类将未知的键转发到基类,或者在本例中转发到一个包。

以下有效(为了使示例更小,这仅转发一个键;将其扩展为列表会使代码混乱):

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mwe}[2020/02/17 MWE]

\LoadClass{beamer}

\RequirePackage{pgfopts}
\def\@unknownkeys{}

\pgfkeys{
    /mwe/.cd,
    .unknown/.code={
        \message{mwe found unknown key: \pgfkeyscurrentname}
        \edef\@unknownkeys{\pgfkeyscurrentname}
    }
}

\ProcessPgfPackageOptions{/mwe}
\relax

\PassOptionsToPackage{\@unknownkeys}{geometry}
\RequirePackage{geometry}

现将文件如下:

\documentclass[showframe]{mwe}
\begin{document}
foo
\end{document}

正如预期的那样,显示一个框架。

但如果我通过替换来修改我的代码

\edef\@unknownkeys{\pgfkeyscurrentname}

经过

\edef\@unknownkeys{\pgfkeyscurrentname=\pgfkeyscurrentvalue}

那么它就不再起作用了:

\documentclass[paper=a0paper]{mwe}
\begin{document}
foo
\end{document}

给我一份 DIN-A4 文档。此外,自定义消息未出现在日志中,表明 .unknown/.code 根本没有执行过。

这是为什么?我做错什么了吗?

PS:我最初有与提供的代码类似的代码这个答案,但这并不起作用,如您上面所见。

编辑:忘记了我的 MWE 中的一行。

答案1

我发现这是课程投影机这会将其杀死。将 \LoadClass 语句移至选项处理之后可使其按预期工作。

我最好的猜测是,beamer 本身内部使用了一些 .unknown 处理程序。不过,我仍然希望得到更合格的解释。

相关内容