我希望我的自定义类将未知的键转发到基类,或者在本例中转发到一个包。
以下有效(为了使示例更小,这仅转发一个键;将其扩展为列表会使代码混乱):
\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 处理程序。不过,我仍然希望得到更合格的解释。