我有一个标题,它将显示在所有框架中。请注意,这不是通常的框架标题,而是框架内容上方的浮动标题(或一些文本)。这可以通过在框架环境中添加标题(或文本)轻松实现。
当允许帧中断时,就会出现问题。当帧被拆分时,标题仅出现在第一张幻灯片上。有没有办法让标题也出现在剩余的幻灯片中?
数学方程
\documentclass{beamer}
\begin{document}
\begin{frame}[allowframebreaks]
\textbf{The Title}
The content that spans over many pages
\end{frame}
\end{document}
答案1
引用来自 beamer 用户指南的内容[allowframebreaks]
:
使用此选项是邪恶的。
\documentclass{beamer}
\newcommand{\floattitle}[1]{%
\begin{beamercolorbox}[sep=0.3cm,left,wd=\paperwidth]{frametitle}
\usebeamerfont{frametitle}%
\vbox{}\vskip-1ex%
\strut#1\strut\par%
\vskip-1ex%
\end{beamercolorbox}%
}
\makeatletter
\renewenvironment{beamer@frameslide}{%
\ifbeamer@autobreak\else%
\ifx\beamer@againname\@empty%
{\let\@elt\beamer@restorecounter\beamer@overlaycounterresets}%
\else%
{\let\@elt\beamer@labelrestorecounter\beamer@overlaycounterresets}%
\fi%
\fi%
\global\c@beamerpauses=1\relax%
\expandafter\ifblank\expandafter{\beamer@framestartpage}{%
\stepcounter{subsectionslide}%
\xdef\beamer@framestartpage{\the\c@page}% only first time
}{\clearpage\beamer@notesactions}% cleanup from previous slide
\hypersetup{pdfpagetransition=R}%
\hypersetup{pdfpageduration=}%
\@ifundefined{thispdfpagelabel}{}{%
\thispdfpagelabel{\insertframenumber}}%
\xdef\beamer@frameendpage{\the\c@page}% every time
\xdef\beamer@slidenumber{\the\numexpr\c@page-\beamer@framestartpage+1\relax}%
\xdef\beamer@overlaynumber{\the\beamer@slideinframe}%
\beamer@setuplinks%
\beamer@displaybreak%
\global\setbox\beamer@zoombox=\box\voidb@x%
\def\beamer@zoomer{}%
\beamer@slidehaszoomfalse%
\gdef\insertframetitle{}%
\gdef\insertframesubtitle{}%
\gdef\beamer@frametitle{}%
\gdef\beamer@shortframetitle{}%
\gdef\beamer@framesubtitle{}%
\let\beamer@startcomment=\beamer@startcommentinframe%
% Start slide:
\beamer@framenotesbegin%
\global\setbox\beamer@framebox=\vbox\bgroup%
\beamer@inframetrue%
\let\frame=\framelatex% inside frames, use LaTeX's \frame command
\begin{beamer@framepauses}%
\refcounter{framenumber}%use frame number for \label
\ifbeamer@shrink%
\hsize=\beamer@shrinkfactorinv\hsize%
\textwidth=\beamer@shrinkfactorinv\textwidth%
\linewidth=\beamer@shrinkfactorinv\linewidth%
\fi%
% Insert labels if necessary:
\ifx\beamer@againname\@empty\else%
\nointerlineskip\vbox to0pt{\vss%
\label<\the\beamer@slideinframe>{\beamer@againname<\the\beamer@slideinframe>}%
\ifnum\beamer@slideinframe=1\relax%
\label<1>{\beamer@againname}%
\fi%
}\nointerlineskip%
\fi%
\ifx\beamer@framehypertargets\@empty\else%
\nointerlineskip\vbox to0pt{\vss%
\beamer@framehypertargets%
\global\let\beamer@framehypertargets\@empty%
}\nointerlineskip%
\fi%
\vskip-\parskip\vbox{}%
\ifbeamer@plainframe\nointerlineskip\fi%
\beamer@checkframetitle}%
{\par
\end{beamer@framepauses}%
\egroup%
\ifx\beamer@frametitle\@empty%
\setbox\beamer@frametitlebox=\box\voidb@x%
\else%
\setbox\beamer@frametitlebox=\vbox{%
\vbox{}%
{\parskip0pt\usebeamertemplate***{frametitle}\vskip0.25em}%
}%
\fi%
\ifbeamer@plainframe%
\beamer@frametextheight=\paperheight%
\else%
\beamer@frametextheight=\textheight%
\fi%
\advance\beamer@frametextheight by-\ht\beamer@frametitlebox%
\advance\beamer@frametextheight by-\dp\beamer@frametitlebox%
\advance\beamer@frametextheight by-\beamer@frametopskip%
\ifbeamer@shrink%
\beamer@shrinkframebox%
\fi%
\ifx\beamer@zoomer\@empty
\setbox\beamer@framebox=\vbox{%
\nobreak\vbox{}\nobreak\par\nobreak\beamer@entrycode\nobreak%
\nointerlineskip\unvbox\beamer@frametitlebox%
\nobreak%
\ifbeamer@autobreak%
\vskip\beamer@frametopskipautobreak%
\floattitle{Frame title}
\else%
\vskip\beamer@frametopskip%
\fi%
\nobreak%
\nointerlineskip\box\beamer@zoombox\nointerlineskip%
\nobreak%
\ifbeamer@slidehaszoom\box\beamer@framebox\else\unvbox\beamer@framebox\fi%
% bottom skip is added in autobreakframebox
}%
\beamer@autobreakframebox%
\else%
\beamer@zoomer%
\fi%
\beamer@undolabels%
\beamer@framenotesend%
\box\beamer@framebox}
\pretocmd\beamer@checkframetitle{
\ifbeamer@localanotherslide
\else
\floattitle{Frame title}
\fi
}
\makeatother
\begin{document}
\begin{frame}
The new arrangment
\end{frame}
\begin{frame}[allowframebreaks]
%\floattitle{Frame title}
The new arrangment
\framebreak
%\floattitle{Frame title}
test
\end{frame}
\end{document}
检查的想法localanotherslide
来自beamerbasedecode.sty 中的 \ifbeamer@anotherslide 和 \ifbeamer@localanotherslide