Ich möchte dem \frame
Befehl zwei weitere Benutzeroptionen hinzufügen. Wenn jedoch \frame
beide Parameter gleichzeitig in einer bestimmten Reihenfolge aufgerufen werden (der mit dem impliziten Wert zuerst), wird ein Fehler generiert. Hier ist einer 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}
Fehlermeldung:
Paket keyval Fehler: twoparam undefiniert \frame[oneparam, twoparam=red]
Antwort1
Dies liegt daran, dass \frame
ein Skript einen \setkeys
weiteren Skriptbefehl auslöst \setkeys
, während der erste nicht beendet wird. Ein einfaches Experiment zeigt, dass verschachtelte \setkeys
Skriptbefehle nicht funktionieren. Sie müssen also auf andere Schlüsselwertsysteme umsteigen, wie z. B. das ausgezeichnetepgf-Schlüssel.
PS. Beamer beinhaltetpgfstandardmäßig, was bedeutet, dasspgf-Schlüsselist standardmäßig enthalten. Ich weiß nicht, warum Beamer (immer noch) verwendet keyval
.