我正在尝试确定附录中是否有页面。如果有,我想显示分隔页/框架作为指示,但仅在讲义模式下。在我当前的设置中(由于投影仪模式的一些特殊性),始终有一个\appendix
命令,因此挂接到该命令将不起作用。但是,当查看和的实现时\insertpresentationendpage
,\insertappendixendpage
我很确定我可以通过查看的值来确定它\beamer@startpageofappendix
,但出于某种原因,即使我使用了,我也无法确定\makeatletter
。我尝试过使用\value
、前置\the
等,但无济于事……最后我得到了各种错误消息,尤其是:
! Undefined control sequence.
<argument> ...pendix\@ empty \else \ifnum \beamer
@startpageofappendix=\beam...
所以我的问题是:如果命令后有帧,如何避免渲染该帧\appendix
?
答案1
如果您尝试访问其中的计数器,则可能会发生这种情况\mode<handout>
(但我不知道为什么)。只需将模式开关放在 if 中即可,如下所示。
\documentclass[handout]{beamer}
\usepackage[utf8]{inputenc}
\begin{document}
% To test this MWE set \test below and compile two times.
% test=1 shall render the first page only, test=0 will print 3 pages
\def\test{1}
\begin{frame}{}
Main content\\
Always shown.
\end{frame}
\makeatletter
\typeout{startpageofappendix=\beamer@startpageofappendix, endpageofdocument=\beamer@endpageofdocument}
\ifx\beamer@startpageofappendix\@empty
\else
\ifnum\beamer@startpageofappendix=\beamer@endpageofdocument
\mode<handout>{
\begin{frame}{}
Appendix follows...\\
on pages \beamer@startpageofappendix{} to \beamer@endpageofdocument{}\\
This frame should not be rendered w/o the last frame!
\end{frame}
}
\fi
\fi
\makeatother
\appendix
\ifnum\test=0%
\begin{frame}{}
Appendix slide 1.\\
If this is shown the previous frame should be shown as well.
\end{frame}
\fi
\end{document}
答案2
我会将此分离框架添加到的定义中,\appendix
并检查是否\inserttotalframenumber
等于\insertmainframenumber
\documentclass{beamer}
\makeatletter
\renewcommand<>\appendix{%
\ifnum\inserttotalframenumber=\insertmainframenumber
\else
\begin{frame}
APPENDIX
\end{frame}
\fi
\beamer@inappendixtrue%
\only#1{\part{\appendixname}%
\immediate\write\@auxout{\string\@writefile{nav}%
{\noexpand\headcommand{\noexpand\gdef\noexpand\insertmainframenumber{\the\c@framenumber}}}}%
\addtocontents{nav}{\protect\headcommand{\protect\beamer@appendixpages{\the\c@page}}}%
\beamer@resetappendix}%
}
\makeatother
\begin{document}
\begin{frame}
content...
\end{frame}
\appendix
\begin{frame}
content...
\end{frame}
\end{document}