创建 beamer 框架模板

创建 beamer 框架模板

我正在创建一个 beamer 主题。作为主题的一部分,我想创建一些具有特定布局的框架模板。其中最简单的是一个静态框架,其中包含一个以普通框架为中心的单个图形。我希望用户能够像这样调用此框架:

\documentclass[presentation]{beamer}
\usetheme{Zion}
\begin{frame}[getoffthestage]{}
\end{frame}

为了实现这一点,我在我的 beamer 样式文件中包含了以下乳胶代码beamerthemeZion.sty

\newif\ifbeamer@getoffthestage

\define@key{beamerframe}{getoffthestage}[true]{%
  \beamer@plainframetrue\beamer@getoffthestagetrue%
  \def\beamer@frametemplate{\beamer@frametemplate@plain}%
  \usebeamertemplate*{getoffthestage}}

\beamer@getoffthestagefalse

\defbeamertemplate*{getoffthestage}{}{%
\noindent\begin{minipage}[b][\textheight][c]{\textwidth}%
\hspace*{\fill}%
\includegraphics[height=0.4\paperheight]{logographic}%
\hspace*{\fill}%
\end{minipage}}

我有两个问题:

首先,为什么 getoffthestage 框架的内容放置在幻灯片底部附近?我不得不使用 minipage 来垂直居中图形。

其次,为什么宽度过宽的迷你页面\textwidth会导致不必要的分页符?当我将宽度设置为 时0.9\textwidth,所有内容仍保留在一页上。

我猜我把\usebeamertemplate*命令放错了地方。有没有更好的方法来实现我想要的效果?

答案1

所有麻烦的根源在于你定义的一切都\define@key{beamerframe}{getoffthestage}[true]{...}没有正确执行框架开始。因此,当您的代码尝试插入图像等时,框架尚未打开,这会导致奇怪的位置等。

作为一个简单的替代方法,我建议将您的图像添加到另一个 beamertemplate,例如background canvas或任何您不需要的其他模板:

\documentclass{beamer}

\usepackage{etoolbox}
\BeforeBeginEnvironment{frame}{%
    \setbeamertemplate{background canvas}{}%
}

\makeatletter
\define@key{beamerframe}{getoffthestage}[true]{%
    \setbeamertemplate{background canvas}{%
        \vbox to \paperheight{\vfil\hbox to \paperwidth{\hfil\includegraphics[width=.5\textwidth]{example-grid-100x100bp}\hfil}\vfil}%
    }%
}
\makeatother

\begin{document}

\begin{frame}[getoffthestage]
\end{frame}

\begin{frame}
    \frametitle{bla}
    normal frame
\end{frame}

\end{document}

相关内容