Beamerフレーム: ユーザーオプションの追加

Beamerフレーム: ユーザーオプションの追加

コマンドにさらに 2 つのユーザー オプションを追加したいと思います\frame。ただし、\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が を起動し\setkeys、別の を起動するためです。簡単な実験で、ネストされた は動作しないことがわかります。そのため、他のキー値システムに切り替える必要があります。たとえば、優れた\setkeys\setkeys

PS. ビーマーにはデフォルトでは、はデフォルトで含まれています。beamer が (まだ) を使用する理由がわかりませんkeyval

関連情報