![Рама проектора: добавьте пользовательские параметры](https://rvso.com/image/298792/%D0%A0%D0%B0%D0%BC%D0%B0%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%B0%3A%20%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D1%8C%D1%82%D0%B5%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D0%B5%20%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B.png)
Я хотел бы добавить еще 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
.