对于我的乳胶投影仪演示,我使用了带有短、长或两者的标签系统,以便在短演示和长演示之间快速切换。
为此,我使用代码
\includeonlyframes{both,short}
(对于简短的演示,同样\includeonlyframes{both,long}
对于较长的演示)在序言中,并为每张幻灯片添加标签,如下所示:
\begin{frame}[label=both]
这个系统过去对我来说比较好,但它也带来了一些问题。我想要解决的一个具体问题是我的参考文献超过了一张幻灯片。我尝试使用allowframebreaks来解决这个问题,所以这是我的参考幻灯片的代码:
\begin{frame}[allowframebreaks,label=both]
\frametitle{References}
\tiny
\bibliographystyle{apalike}
\bibliography{references}
\end{frame}
现在发生的情况是,第一张参考幻灯片按预期显示,但其余幻灯片不是 pdf 的一部分。我猜发生的情况是标签仅应用于第一张幻灯片,因此由于序言中的
\includeonlyframes
命令,生成了剩余的参考幻灯片,但不包含在 pdf 中。有谁知道我如何解决这个问题?
此外,这是我在这里发表的第一篇文章,所以如果有不清楚/解释不当等问题,请告诉我。
编辑:这是一个最小的工作示例。我通常使用 natbib,但这不适用于我在这里使用的示例参考书目。问题仍然存在,所以我认为 natbib 与此无关。
\documentclass{beamer}
%\usepackage{natbib}
\includeonlyframes{both,short}
\begin{document}
\begin{frame}[label=both]
\frametitle{Frametitle}
Some content for both presentations
\end{frame}
\begin{frame}[label=short]
\frametitle{Frametitle}
Some content for a short presentation
\end{frame}
\begin{frame}[label=long]
\frametitle{Frametitle}
Some content for a long presentation
\end{frame}
\begin{frame}[label=long]
\frametitle{Frametitle}
Some more content for a long presentation
\end{frame}
\begin{frame}[allowframebreaks,label=both]
\frametitle{References}
%\tiny
\nocite{*}
\bibliographystyle{apalike}
%\bibliography{references} \bibliography{xampl}
\end{frame}
\end{document}
您可以使用与https://tex.stackexchange.com/a/289637中类似的方法,并将其更新为使用
\beamer@@@@frame
的当前实现:
\documentclass{beamer}
\makeatletter
\def\beamer@@@@frame<#1>[#2]{%
\framewidth\textwidth
\beamer@savemode%
\gdef\beamer@mode{\mode<all>}%
\def\beamer@frametemplate{}%
\def\beamer@againname{}%
\def\beamer@undolabels{}%
\def\beamer@cramped{}%
\def\beamer@displaybreak{}%
\setbox\beamer@footins=\box\voidb@x%
\beamer@autobreakcount=0\relax%
\beamer@autobreaklastheight=16000pt%
\beamer@zoomcount=0\relax%
\beamer@noframenumberingfalse%
\beamer@containsverbatimfalse%
\beamer@isfragilefalse%
\beamer@autobreakfalse%
\beamer@shrinkfalse%
\beamer@plainframefalse%
\global\advance\beamer@zoomframecount by1\relax%
\csname beamer@dosecondmode\beamer@defaultdosecondmode\endcsname%
\ifbeamer@centered\setkeys{beamerframe}{c}\else\setkeys{beamerframe}{t}\fi%
\setkeys{beamerframe}{environment=frame}%
\setkeys{beamerframe}{#2}%
\beamer@frametemplate%
\ifbeamer@noframenumbering%
\ifbeamer@isfragile%Fragile frames will be processed twice
\stepcounter{framenumber}%
\fi%
\else%
\stepcounter{framenumber}%do not set \label here - it interferes with AtBegin*
\fi%
{\let\@elt\beamer@savecounter\beamer@overlaycounterresets}
\gdef\beamer@framestartpage{}%
\gdef\beamer@whichframes{#1}%
\ifx\beamer@framerestriction\@undefined\else% restriction stuff
\expandafter\beamer@checkifinlist\beamer@framerestriction\relax%
\fi%
\ifbeamer@inlecture%
\else%
\gdef\beamer@whichframes{all:0}%
\fi%
\ifx\beamer@againname\@empty%
\beamer@slideinframe=0\relax%
\beamer@anotherslidefalse%
\beamer@masterdecode{\beamer@whichframes}%
\ifbeamer@anotherslide%
\let\beamer@howtotreatframe\beamer@doseveralframes%
\ifbeamer@containsverbatim%
\let\beamer@howtotreatframe\beamer@dosingleframe%
\fi%
\ifbeamer@autobreak%
\let\beamer@howtotreatframe\beamer@autobreakframe%
\fi%
\ifbeamer@isfragile%
\let\beamer@howtotreatframe\beamer@doexternalframe%
\fi%
\else% no slides in frame
\let\beamer@howtotreatframe\beamer@donoframe%
\fi%
\else% again mode
\let\beamer@howtotreatframe\beamer@doseveralframes%
\ifbeamer@isfragile%
\let\beamer@howtotreatframe\beamer@doexternalframe%
\fi%
\ifbeamer@containsverbatim
\let\beamer@howtotreatframe\beamer@dosingleframe
\fi
\beamer@slideinframe=0\relax%
\beamer@anotherslidefalse%
{\beamer@masterdecode{\beamer@whichframes}}%
\message{^^J^^J \beamer@againname:\beamer@whichframes ^^J^^J}
\ifbeamer@anotherslide%
\message{^^J^^J \beamer@againname:I am Here ^^J^^J}
\ifbeamer@autobreak%
\let\beamer@howtotreatframe\beamer@autobreakframe%
\fi%
\fi
\fi%
\beamer@howtotreatframe}
\makeatother
\includeonlyframes{both,long}
\begin{document}
\begin{frame}[allowframebreaks,label=both]
\nocite{*}
\frametitle{References}
%\tiny
\bibliographystyle{apalike}
\bibliography{\jobname}
\end{frame}
\begin{frame}[label=long]
content...
\end{frame}
\end{document}
这个问题已在提交e2267ba中得到修复——非常感谢@amonakov!
它应该包含在 Beamer v3.72 或更高版本中。