扩展 Beamer 框架并继承参数(和覆盖)

扩展 Beamer 框架并继承参数(和覆盖)

我打算扩展投影仪框架以节省制作幻灯片时的一些开销。

我关注了在这里回答另一个答案对我来说,参与NewEnviron没有用。beamer 用户指南有一些关于重新定义环境的细节: 在此处输入图片描述

因此我定义了一个“pictureframe”,其中幻灯片有两列,右列有一张图片:

\newcommand\startcolumns{\begin{columns}}
\newcommand\stopcolumns{\end{columns}}
\newcommand\startleftcolumn{\begin{column}{0.55\textwidth}}
\newcommand\startrightcolumn{\begin{column}{0.39\textwidth}}
\newcommand\stopcolumn{\end{column}}

\newenvironment{pictureframe}[2]{%
\newcommand\mypic{#2}
\begin{frame}[environment=pictureframe]{#1}
\startcolumns
\startleftcolumn
}{
\stopcolumn
\startrightcolumn
\centering\includegraphics{\mypic}
\stopcolumn
\stopcolumns
\end{frame}
}

然后,我可以制作如下幻灯片:

\begin{pictureframe}{Picture Frame}{example-image-a}
    \begin{itemize}
        \item Foo
        \item Bar
    \end{itemize}
\end{pictureframe}

在此处输入图片描述

现在,我希望能够使用 1)覆盖和 2)标签,即

\begin{pictureframe}<1>[label=picture,noframenumbering]{Picture Frame}{example-image-a}
    \begin{itemize}
        \item Foo
        \item Bar
    \end{itemize}
\end{pictureframe}

但是,它不能编译:

! LaTeX Error: File `1' not found.

我的问题是:如何正确地“继承”框架环境,以便传递覆盖和可选参数,就像“真实”框架一样?

答案1

这是一个环境覆盖规范感知。但您没有写出这些规范的用途(#4)...

显示\typeout{...}参数。

\documentclass{beamer}

\newcommand\startleftcolumn{\column{0.55\textwidth}}
\newcommand\startrightcolumn{\column{0.39\textwidth}}

\newenvironment<>{pictureframe}[3][]{%
  \typeout{1:#1,2:#2,3:#3,4:#4}
  \begin{frame}#4[environment=pictureframe,#1]
    \newcommand\mypic{#3}
    \frametitle{#2}
    \columns
    \startleftcolumn
  }{
    \startrightcolumn
    \centering\includegraphics[width=\linewidth]{\mypic}
    \endcolumns
  \end{frame}
}

\begin{document}
\begin{pictureframe}{Picture Frame}{example-image-a}
  \begin{itemize}
  \item Foo
  \item Bar
  \end{itemize}
\end{pictureframe}

\begin{pictureframe}<1>[label=picture,noframenumbering]{Picture Frame}{example-image-a}
  \begin{itemize}
  \item Foo
  \item Bar
  \end{itemize}
\end{pictureframe}

\end{document}

相关内容