label
当使用MWE 中的参数进行编译时,allowframebreaks
不起作用。为什么?
frame
将框架标题设置为参数和使用之间有什么区别吗\frametitle
?
\documentclass{beamer}
\usetheme{Warsaw}
\usepackage{blindtext}
\begin{document}
\begin{frame}[allowframebreaks,label=frame1]{Title}
%\frametitle{Title}
\framesubtitle{Sub-title}
\blindtext
Text........ Text........ Text........ Text........ Text........
Text........ Text........ Text........ Text........ Text........
Text........ Text........ Text........ Text........ Text........
Text........ Text........ Text........ Text........ Text........
\end{frame}
\end{document}
答案1
frame
将标题设置为参数和使用之间可能会有差异,\frametitle
如果 TeX 找到的下一个内容是,{
因为这将被解释为框架字幕的开始或框架内容的开始。
例如
\documentclass{beamer}
\usetheme{Warsaw}
\usepackage{blindtext}
\begin{document}
\begin{frame}{Title}{\centering A sunny day\par}And a gloomy one.
\end{frame}
\begin{frame}\frametitle{Title}{\centering A sunny day\par}And a gloomy one.
\end{frame}
\end{document}
演示了使用参数之间的区别frame
并使用宏
在中beamerbaseframe.sty
,我们发现
\define@key{beamerframe}{label}{\def\beamer@againname{#1}%
{\let\@elt\beamer@labelsavecounter\beamer@overlaycounterresets}%
}
beamerbaseframesize.sty
显示allowframebreaks
将切换设置beamer@autobreak
为true
。beamerbaseframe.sty
例如,我们发现
\newenvironment{beamer@frameslide}{%
\ifbeamer@autobreak\else% i.e. unless allowframebreaks is requested ...
\ifx\beamer@againname\@empty% if label isn't set ...
{\let\@elt\beamer@restorecounter\beamer@overlaycounterresets}%
\else% otherwise i.e. we have label=<some label> ...
{\let\@elt\beamer@labelrestorecounter\beamer@overlaycounterresets}%
\fi%
\fi%
...
因此,仅当未设置为时,才使用通过将label
选项传递给环境来激活的机制。frame
allowframebreaks
true
重要的是要理解,label
选项并不等同于\label{}
在任何时候说。label
选项是为更复杂的事情而设计的。它的主要目的是支持\againframe
。为此,它为当前帧的每张幻灯片命名。每张幻灯片也会获得一个标签。如果label=mylabel
,则幻灯片会获得标签mylabel<1>
,mylabel<2>
等等。为方便起见,在第一张幻灯片上设置了一个附加标签mylabel
。因此,假设框架有n幻灯片,设置此选项相当于说
\label{mylabel}\label{mylabel<1>}% on the first slide
\label{mylabel<2>}% on the second slide
...
\label{mylabel<n>}% on the nth slide
allowframebreaks
如果设置了,此机制就没有任何用处,因为在这种情况下覆盖被禁用。
当然,您可以对选项进行编码,以便如果allowframebreaks
是true
,则在第一帧上label
发出问题\label{}
。但是,这可能会造成混淆,因为这意味着该label
选项会根据是否允许中断帧而激活非常不同的机制。
答案2
此问题已在提交中修复e2267ba-- 非常感谢@amonakov!
它应该包含在 beamer v3.72 或更新版本中。