Рама проектора: добавьте пользовательские параметры

Рама проектора: добавьте пользовательские параметры

Я хотел бы добавить еще 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, такие как превосходная.

PS. В комплект поставки входит:по умолчанию, что означает, чтовключен по умолчанию. Я не знаю, почему бимер (до сих пор) использует keyval.

Связанный контент