I want to write a custom environment that handles some layouts that default beamer slides aren't designed to do.
I use xparse
's \NewDocumentEnvironment
to achieve this, but have problems passing down the label.
If I do something like this:
\documentclass{beamer}
\usepackage{xparse}
\NewDocumentEnvironment{slide}{ o +b }
{%
\begin{frame}[environment=slide,\IfValueT{#1}{#1}]
% not important implementation details
#2
\end{frame}
}{}
\begin{document}
\begin{slide}[label=slide-label-a]
test
\end{slide}
\end{document}
I get ! Package keyval Error: label=slide-label-a undefined.
because the whole option is parsed as a key.
If I do something like this, where I only pass the label's value, it works but generates a lot of empty labels (for every frame where I don't use one):
\documentclass{beamer}
\usepackage{xparse}
\NewDocumentEnvironment{slide}{ o +b }
{%
\begin{frame}[environment=slide,label=\IfValueT{#1}{#1}]
% not important implementation details
#2
\end{frame}
}{}
\begin{document}
\begin{slide}[slide-label-a]
test
\end{slide}
\end{document}
The optimal solution would be the first variant, so I can pass arbitrary keyval options to beamer. But if that doesn't work a second option would be to have a good way to set individual options.
\usepackage{xparse}
)