我目前正在编写一个 latex 包(或者实际上是一个 beamer 主题,但显然这没什么区别),并且我希望能够使用全局选项中的键值对指定一些内容。但是当使用 beamer 类时,这会失败。
举一个简单的例子,如下:
文档:
\documentclass[key=bla]{beamer}
\usepackage{needsoption}
\begin{document}
\MOPstore
\end{document}
包裹:
\ProvidesPackage{needsoption}
\RequirePackage{pgfopts}
\pgfkeys{
/MOP/.cd,
key/.store in=\MOPstore
}
\ProcessPgfOptions{/MOP}
即使明确指定了选项,\ProcessPgfOptions 也从不处理它。如果我在本地指定选项(即\usepackage[key=bla]{needsoption}
),则一切正常;如果我删除值(即\documentclass[key]{beamer}
),则一切正常;如果我\documentclass[key=bla]{article}
再次切换到不同的文档类(例如),则一切正常。我也尝试使用 kvoptions 而不是 pgfopts,但遇到了同样的问题。
因此,我由此推断,似乎 beamer 类中的某些东西会从全局选项列表中删除键值选项,同时保留其他选项不变。所以我想我有两个问题:首先,我真的想知道为什么会发生这种情况;其次,我该如何防止 beamer 类出现这种情况?如果无法解决问题,我也会接受告诉我如何解决这个问题的答案。
答案1
我不确定,但您需要将选项传递给您的包,因为您的包不会主动寻找选项。也可能是beamer
不会尝试每个包的选项。
如果选项被专门传递给包,则以下内容有效。我已更改key
为,mykey
因为被内部选项混淆是自找麻烦。
\begin{filecontents*}{needsoption.sty}
\ProvidesPackage{needsoption}
\RequirePackage{pgfopts}
\pgfkeys{
/MOP/.cd,
mykey/.store in=\MOPstore
}
\ProcessPgfOptions{/MOP}
\end{filecontents*}
\PassOptionsToPackage{mykey=bla}{needsoption}
\documentclass{beamer}
\usepackage{filecontents}
\usepackage{needsoption}
\begin{document}
\begin{frame}
\MOPstore
\end{frame}
\end{document}