指定从另一个文件中获取哪些叠加层

指定从另一个文件中获取哪些叠加层

我在外部文件中有一张带叠加层的图片。有时我想使用图片中的所有叠加层,有时只想使用部分叠加层。

考虑以下示例,其中图片使用 定义tikz并通过 包含standalone。在第一帧中,我想使用图片中的所有叠加层。但是,在第二个 I 帧中,我只想使用最后两个叠加层,而不更改图片。

目前我知道的唯一方法是调整整个框架的叠加以满足我想要包含的叠加的要求,如下所示。但是,最好不要为此调整整个框架。

我发现了相关的东西这里并尝试使用它,在包含图片之前设置\beamer@slideinframe2。但是,只显示第二个覆盖层,而不显示第三个。类似的东西\only-use-overlays<2,3>{...}会很好。

如果可能的话,选择任意帧会很好,但目前我不需要这样做。

\documentclass{beamer}
\usepackage{standalone, filecontents, tikz}
\begin{document}
\begin{filecontents}{pic.tex}
    \documentclass[beamer]{standalone}
    \begin{document}
    \begin{standaloneframe}
    \begin{tikzpicture}
    \node<1-> [draw] (n0) {$n_0$ }; 
    \node<2-> [draw] (n1) [right of=n0] {$n_1$ }; 
    \node<3-> [draw] (n2) [right of=n1] {$n_2$ }; 
    \end{tikzpicture}
    \end{standaloneframe}
    \end{document}
\end{filecontents}
% This frame has 3 overlays.
\begin{frame}
    First Slide
    \includestandalone{pic}
\end{frame}
% This frame has two overlays. 
% The first overlay contains the first item and the second overlay of the picture.
% The second overlay contains the second item and the third overlay of the picture.
\begin{frame}<2,3>
    Second Slide
    \begin{itemize}
        \item<+(1)> First item
        \item<+(1)> Second item
    \end{itemize}
    \includestandalone{pic}
\end{frame}
\end{document}

答案1

\documentclass{beamer}
\usepackage{standalone, filecontents, tikz}
\begin{document}
\begin{filecontents}{pic.tex}
    \begin{tikzpicture}
    \draw[use as bounding box] (0,0) rectangle (3,3);
    \draw<1-> (0,0) -- (3,3);
    \draw<2-> (3,0) -- (0,3);
    \draw<3-> (0,1) -- (3,1);
    \end{tikzpicture}
\end{filecontents}
\begin{frame}
    First Slide
    \includestandalone{pic}
\end{frame}
\begin{frame}
    Second Slide
    \begin{itemize}
        \item<+-> First item
        \item<+-> Second item
    \end{itemize}
    % Here I only want the last two overlays ff the picture
    \onslide<2,3>{
      \includestandalone{pic}
    }
\end{frame}
\end{document}

答案2

正如问题中提到的那里是一个相关问题。我可以在循环中使用那里给出的方法。

下面的示例产生的输出与问题中的示例相同,但是不需要将整个框架调整为要包含的叠加层。可选参数指定应使用\includestandaloneslides来自所有叠加层中的哪张幻灯片#2(即 tikz 列表)。

但其结构还是显得相当粗糙。

\documentclass{beamer}
\usepackage{standalone, filecontents, 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}%
}

\newcommand*{\includestandaloneslides}[3][0]{
    \foreach [count=\i] \slide in #2{
        \pgfmathtruncatemacro{\n}{\i + #1}
        \only<\n>{
            \begin{inframe}{\slide}
            \includestandalone{#3}
            \end{inframe}
        }   
    }
}
\begin{document}
\begin{filecontents}{pic.tex}
    \documentclass[beamer]{standalone}
    \begin{document}
    \begin{standaloneframe}
    \begin{tikzpicture}
    \node<1-> [draw] (n0) {$n_0$ }; 
    \node<2-> [draw] (n1) [right of=n0] {$n_1$ }; 
    \node<3-> [draw] (n2) [right of=n1] {$n_2$ }; 
    \end{tikzpicture}
    \end{standaloneframe}
    \end{document}
\end{filecontents}
% This frame has 3 overlays.
\begin{frame}
    First Slide
    \includestandalone{pic}
\end{frame}
% This frame has two overlays. 
% The first overlay contains the first item and the second overlay of the picture.
% The second overlay contains the second item and the third overlay of the picture.
\begin{frame}
    Second Slide
    \begin{itemize}
        \item<+> First item
        \item<+> Second item
    \end{itemize}
    \includestandaloneslides{{2,3}}{pic}
\end{frame}
\end{document}

相关内容