在使用构建较大的演示文稿时beamer
,我经常将它们拆分成几个文件,然后单独处理。为了 MWE,它可能看起来像这样:
\documentclass{beamer}
\begin{document}
\include{foo1}
\include{foo2}
\end{document}
其中foo1.tex
包含
\begin{frame}[label=myslide]{Title}
\begin{itemize}[<+->]
\item One
\item Two
\end{itemize}
\end{frame}
看起来foo2.tex
像这样:
\againframe<2>{myslide}
但是如果我现在将其添加\includeonly{foo2}
到主文档中,我当然会得到一个错误。我通常会通过将的定义放在myslide
第三个文件中来规避这些问题,使用我加载的foo0.tex
覆盖说明符而不是通过在和中使用来加载。<0>
input
include
againframe
foo1.tex
foo2.tex
然而,我想知道是否有某种 TeX 魔法可以让我说foo2.tex
类似这样的话:“重复框架myslide
如果它已被定义,否则不执行任何操作”。
答案1
您可以用警告替换错误:
\documentclass{beamer}
\makeatletter
\def\beamer@@@againframe<#1>[#2][#3]#4{%
\@ifundefined{beamer@again@#4}%
{\ClassWarning{beamer}{No frame has been designated to resume under
the name "#4"}{}}%
{%
\def\beamer@temp{\frame<#1>[#2][{#3,relabel=#4}]}%
\expandafter\let\expandafter\beamer@templet\csname beamer@again@#4\endcsname%
\expandafter\beamer@temp\beamer@templet}%
}
\makeatother
\begin{filecontents*}[overwrite]{foo1.tex}
\begin{frame}[label=myslide]{Title}
\begin{itemize}[<+->]
\item One
\item Two
\end{itemize}
\end{frame}
\end{filecontents*}
\begin{filecontents*}[overwrite]{foo2.tex}
\againframe<2>{myslide}
\begin{frame}
test
\end{frame}
\end{filecontents*}
\includeonly{foo2}
\begin{document}
\include{foo1}
\include{foo2}
\end{document}