
Я хотел бы добавить еще 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 undefined \frame[oneparam, twoparam=red]
решение1
Это потому, что \frame
запускает a \setkeys
и запускает другой \setkeys
, пока первый не завершен. Простой эксперимент показывает, что вложенные \setkeys
' не будут работать. Поэтому вам придется переключиться на другие системы key-val, такие как превосходнаяpgfkeys.
PS. В комплект поставки входит:пгфпо умолчанию, что означает, чтоpgfkeysвключен по умолчанию. Я не знаю, почему бимер (до сих пор) использует keyval
.