在每个框架的主体上添加一些内容

在每个框架的主体上添加一些内容

是否可以在 beamer 中的每一帧的主体中添加一些内容?

具体来说,我想在\par\unskip正前方添加\end{frame},这样无论幻灯片是以文本、枚举环境还是显示公式结尾,整个幻灯片的底部边距都是相同的。我使用的是 metropolis 主题,其差异非常明显。

在此处输入图片描述在此处输入图片描述

我有两个想法:

\addtobeamertemplate{footline}{\par\unskip}{}

或标准技巧

\let\oldendframe\endframe
\def\endframe{\par\unskip\oldendframe}

第一个不起作用,因为\lastskip当时已经被遗忘了。第二个不起作用,因为\endframe实际上从未使用过。在 中定义它的地方beamerbaseframe.sty,有一个注释:

% Normally not executed; only in containsverbatim context:
\def\endframe{\egroup\begingroup\def\@currenvir{frame}}

我不太了解纯 TeX,无法理解框架主体的处理方式,因此无法确定我需要在何处包含\par\unskip。有人知道如何实现这一点吗?以下是 MWE:

\documentclass{beamer}
\usetheme{metropolis}
\usepackage{lipsum}

\begin{document}

\begin{frame}
\frametitle{This frame ends in text}

\begin{enumerate}
\item \lipsum[1][1]
\item \lipsum[1][2]
\item \lipsum[1][3]
\item \lipsum[1][4-5]
\item \lipsum[1][6]
\end{enumerate}

\lipsum[1][7-13] This is the bottom margin in metropolis.
%\par\unskip % it works if entered manually
\end{frame}

\begin{frame}
\frametitle{This frame ends in a formula}
\begin{enumerate}
\item \lipsum[1][1]
\item \lipsum[1][2]
\item \lipsum[1][3]
\item \lipsum[1][4-5]
\item \lipsum[1][6]
\end{enumerate}

\lipsum[1][7-12]
\[ a + b = c \]
%\par\unskip % it works if entered manually
\end{frame}
\end{document}

如果\par\unskip手动插入,在我看来它会更好。

在此处输入图片描述在此处输入图片描述

答案1

修补内部环境的末端部分beamer@frameslide似乎有效。此环境定义为(参见beamerbaseframe.sty

\newenvironment{beamer@frameslide}{%
  % ...
  \global\setbox\beamer@framebox=\vbox\bgroup
    % ...
    \begin{beamer@framepauses}%
      % ...
}{%
      \par
    \end{beamer@framepauses}%
  \egroup
  % ...
}

因此我们只需要在\unskip后面附加:\par\endbeamer@frameslide

\documentclass{beamer}
\usetheme{metropolis}
\usepackage{lipsum}

\makeatletter
\patchcmd\endbeamer@frameslide
  {\par}
  {\par\unskip}
  {}{\PatchFailed}
\makeatother

\begin{document}

\begin{frame}
  \frametitle{This frame ends in text}
  
  \begin{enumerate}
    \item \lipsum[1][1]
    \item \lipsum[1][2]
    \item \lipsum[1][3]
    \item \lipsum[1][4-5]
    \item \lipsum[1][6]
  \end{enumerate}
  
  \lipsum[1][7-13] This is the bottom margin in metropolis.
  %\par\unskip % it works if entered manually
\end{frame}

\begin{frame}
  \frametitle{This frame ends in a formula}
  \begin{enumerate}
  \item \lipsum[1][1]
  \item \lipsum[1][2]
  \item \lipsum[1][3]
  \item \lipsum[1][4-5]
  \item \lipsum[1][6]
  \end{enumerate}
  
  \lipsum[1][7-12]
  \[ a + b = c \]
  %\par\unskip % it works if entered manually
\end{frame}
\end{document}

在此处输入图片描述

相关内容