Beamer 跳过标记和未标记幻灯片的方法有何不同?

Beamer 跳过标记和未标记幻灯片的方法有何不同?

我试图理解 Beamer 中的一个问题,该问题大大降低了使用效率,\includeonlyframes目的是缩短编译时间:每当幻灯片缺少标签时,它似乎都会进行排版,即使其覆盖规范处于<all:0>活动\includeonlyframes状态。相反,如果有标签,幻灯片就会以有效的方式被丢弃。

引用我的 MWEGithub 上 Beamer repo 中的相应问题

\documentclass{beamer}

\begin{document}
\begin{frame}<all:0>[label=SkipMe]
        1111111111111111111111111111111111111111111111111111111111111111
\end{frame}
\begin{frame}<all:0>
        2222222222222222222222222222222222222222222222222222222222222222
\end{frame}
\end{document}

在排版第二张(未标记)幻灯片时,编译上述内容会产生一个overfull hbox警告。第一张幻灯片根本没有排版。

通过查看,我可以(费力地)将差异追溯到未标记(慢)情况下与标记(快)情况下base/beamerbaseframe.sty的使用。它们的实施策略似乎截然不同,我想知道是否可以采用更快的方法。\beamer@donoframe\beamer@doseveralframesdonoframe

答案1

好吧,您可能可以为每一帧添加一个默认标签(我劫持了环境键,因为它是在设置通用键之前):

\documentclass{beamer}
\makeatletter
\newcounter{myframecount}
\define@key{beamerframe}{environment}
 {%
  \stepcounter{myframecount}%
  \edef\beamer@againname{\themyframecount}%
{\let\@elt\beamer@labelsavecounter\beamer@overlaycounterresets}%
  \def\beamer@frameenvironmentsubst{#1}%
 }
\makeatother 
\begin{document}
\begin{frame}<all:0>[label=bad]
        1111111111111111111111111111111111111111111111111111111111111111
\end{frame}
\begin{frame}<all:0>
        2222222222222222222222222222222222222222222222222222222222222222
\end{frame}
\end{document}

相关内容