在一个框架内,我包含一个.tex
文件,其中包含一个 TikZ 图片,该图片具有几个叠加规范,因此它们会产生同一张图片的 9 种变体,也就是说,该框架有 9 张幻灯片。
稍后,如果我想在另一个框架中使用这些图片变体之一,我该如何获取它?有类似的东西吗\getoverlay{1}{\input{mytikzpicture}}
?
答案1
以下代码在我的简单测试中有效,但我不知道它是否适用于更复杂的代码。如果不行,请发布一些您想要使用的示例代码。
代码如下:
\documentclass{beamer}
\usepackage{tikz}
\makeatletter
\newenvironment{inframe}[2][1]{%
\edef\inframe@current{\the\value{beamerpauses}}%
\setcounter{beamerpauses}{#1}%
\beamer@slideinframe=#2\relax
\let\beamer@anotherslidetrue=\@empty
\let\beamer@localanotherslidetrue=\@empty
}{%
\setcounter{beamerpauses}{\inframe@current}%
}
\makeatother
\begin{document}
\begin{frame}
Some stuff which \pause extends over \pause several slides \pause
\begin{inframe}{3}
\begin{tikzpicture}
\draw[use as bounding box] (0,0) rectangle (3,3);
\draw<1-> (0,0) -- (3,3);
\draw<.(1)> (3,0) -- (0,3);
\draw<3> (0,1) -- (3,1);
\draw<4> (1,0) -- (1,3);
\end{tikzpicture}
\end{inframe}
Some stuff which \pause extends over \pause several slides
\end{frame}
\end{document}
现在来解释一下。我们定义一个新环境,inframe
它接受一个强制参数,一个数字(以及一个可选参数,也是一个数字 - 见下文)。在环境中,幻灯片编号被设置为该数字(强制编号),这意味着在环境中,覆盖规范的处理方式是幻灯片编号是给定的,而不是真实的。
然而,这确实会导致一些问题,因为如果它beamer
认为它在第 2 张幻灯片上,并且它遇到了幻灯片的叠加规范,4
那么它会对自己说“我必须做另一个框架”。因为每一个幻灯片,我们使它感到困惑,以为它在幻灯片 2 上,然后每次它都会想“我必须在这里再运行一次”。因此,为了避免无限循环,我们暂时禁用“我是否要再运行一帧?”检查。这就是部分anotherslide
。这导致的另一个问题(我知道的 - 可能还有更多)是诸如+
对名为的计数器执行奇怪的操作之类的规范beamerpauses
。在环境中,我们希望它们能够正常工作,但是当我们回到正常帧时,我们希望忘记这些更改。因此,我们beamerpauses
在开始时保存值并在结束时重置它。可选参数允许我们指定一个“起点”,beamerpauses
这允许我们想象诸如+
从 1 以外的某个位置开始之类的事情。
警告:测试时,准备终止 TeX 进程,因为它很容易陷入无限循环。
答案2
更多的是黑客行为而不是正确的解决方案,你可以将一个框架限制为一个覆盖层
\begin{frame}<overlay>
如果您可以将其放入文件中(我猜mytikzpicture
毕竟这就是它的作用),然后只需在另一个框架中再次输入,您就可以使用它来获取覆盖 9。