我打算扩展投影仪框架以节省制作幻灯片时的一些开销。
我关注了在这里回答后另一个答案对我来说,参与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}