Beamer 框架:添加用户选项

Beamer 框架:添加用户选项

我想向\frame命令添加另外 2 个用户选项。但是,当\frame同时以特定顺序(首先是具有隐式值的参数)使用两个参数调用时,会产生错误。以下是MWE

\documentclass{beamer}

\usepackage{etoolbox}

\makeatletter
\define@key{beamerframe}{oneparam}[true]{%
    \setbeamercolor{background canvas}{bg=black}
}
\define@key{beamerframe}{twoparam}{%
    \color{#1}
}
% Default framestyle
\pretocmd{\beamer@@@@frame}
{
    \setbeamercolor{background canvas}{bg=white}
    \setbeamertemplate{background}{}
}
{}{}
\makeatother

\begin{document}
\frame[oneparam]{
    Works
}

\frame[twoparam=red]{
    Works
}

\frame[oneparam, twoparam=green]{
    Fail
}

\frame[twoparam=green, oneparam]{
    Works
}
\end{document}

错误信息:

程序包 keyval 错误:twoparam 未定义 \frame[oneparam, twoparam=red]

答案1

这是因为\frame触发 a\setkeys并触发另一个\setkeys,而第一个尚未终止。一个简单的实验表明嵌套的\setkeys不起作用。因此,您必须切换到其他 key-val 系统,例如优秀的

PS. Beamer 包括默认情况下,这意味着默认包含。我不知道为什么 beamer (仍然) 使用keyval

相关内容