整个投影仪框架的快照类似宏吗?

整个投影仪框架的快照类似宏吗?

我想知道是否有一些宏可以用来拍摄整个 Beamer 帧(在其最后一张幻灯片中)的快照,并在另一帧中重复使用它。以下代码不起作用,只是为了说明这个想法。

\documentclass{beamer}
\begin{document}
\begin{frame}
\mymacro{
%normal frame content goes here
}
\end{frame}

\begin{frame}
\insertmymacro[scale=.30] %this will insert the snapshot of the previous frame, possibly scaled 
\end{frame}
\end{document}

如果已拍摄了多张快照,还应该有一种方法来告诉宏必须插入哪一帧。

类似的东西已经存在了吗?

答案1

在这里,我将第一帧保存在命名的 中\vbox。然后我可以使用 调用内容(按原样,或缩放和框架化)\usebox

我必须水平地填充一点保存的框;我认为需要填充是因为\vbox宽度是\textwidth,而幻灯片的宽度比宽度要宽。

已编辑,以删除杂散的空白帧。

手册版本:

\documentclass{beamer}
\newsavebox\saveframe
\fboxsep=0pt
\begin{document}
%SAVE-FRAME
\savebox{\saveframe}{\vbox{
\begin{frame}
{1st Frame}
frame text from the first frame.  I will now begin an itemized list.  And we begin:
\begin{itemize}
\item AAA
\item BBB
\item CCC
\end{itemize}
\end{frame}}}

%PRESENT THE SAVE-FRAME AS IS
\begin{frame}
\usebox{\saveframe}
\end{frame}

%PRESENT THE 2ND FRAME INCLUDING A SCALED SAVE-FRAME
\begin{frame}
{2nd frame}
Here is my prior frame\par
\fbox{\scalebox{.6}{\hspace{1cm}\usebox{\saveframe}\hspace{1cm}}}
\end{frame}
\end{document}

在此处输入图片描述

在此处输入图片描述


自动化版本:

如果希望自动装箱,我会sframe{}在以下 MWE 中提供环境来输出和保存帧。A{title}是环境的强制参数。可以使用在环境\savedframe{scale}内调用的获得已保存帧的装箱、缩放版本frame。以下 MWE 的行为与上面的手动版本相同。

\documentclass{beamer}
\global\newsavebox\thesaveframe

\newenvironment{sframe}[1]%
{\setbox0=\vbox\bgroup\begin{frame}{#1}}
{\end{frame}\leavevmode\unskip\setbox0=\lastbox \egroup%
 \global\sbox{\thesaveframe}{\box0}
 \begin{frame}\usebox{\thesaveframe}\end{frame}
}

\newcommand\savedframe[1]{\fboxsep=0pt%
  \fbox{\scalebox{#1}{\hspace{1cm}\usebox{\thesaveframe}\hspace{1cm}}}%
}
\begin{document}
%SAVE-FRAME AND OUTPUT IT
\begin{sframe}{1st Frame}
frame text from the first frame.  I will now begin an itemized list.  And we begin:
\begin{itemize}
\item AAA
\item BBB
\item CCC
\end{itemize}
\end{sframe}

%PRESENT THE 2ND FRAME INCLUDING A SCALED SAVE-FRAME
\begin{frame}
{2nd frame}
Here is my prior frame\par
\savedframe{.6}
\end{frame}
\end{document}

答案2

我今天也需要这个,并且我对史蒂文的回答进行了一些扩展,定义了两个命令,允许您立即保存和使用多个帧,然后稍后重新使用它们:

% \saveuseframe{id}{...} saves a frame to \saveid and uses it immediately, to be reused with \reuseframe{id}
\newcommand{\saveuseframe}[2]{%
  \expandafter\newsavebox\csname save#1\endcsname%
  \expandafter\savebox\csname save#1\endcsname{\vbox{\vspace{-.1em}#2}}%
  \begin{frame}\expandafter\usebox\csname save#1\endcsname\end{frame}}
\newcommand{\reuseframe}[1]{\fbox{\scalebox{.25}{\hspace{.9cm}\expandafter\usebox\csname save#1\endcsname\hspace{.8cm}}}}

这使您可以这样做:

\savedframe{motivation}{\begin{frame}{Motivation}
  why?
\end{frame}}

... more stuff ...

\savedframe{future}{\begin{frame}{Future work}
  future stuff
\end{frame}}

\begin{frame}{Thank you!}
  \reuseframe{motivation}
  \reuseframe{future}
\end{frame}

答案3

对于需要再次插入前一帧的特殊情况,可以使用宏\insertslideintonotes{<scale>}

\documentclass{beamer}

\makeatletter
\edef\beamer@origlmargin{\Gm@lmargin}%
\edef\beamer@origrmargin{\Gm@rmargin}%
\makeatother

\begin{document}
\begin{frame}
normal frame
\end{frame}

\begin{frame}
\insertslideintonotes{0.3}
\end{frame}
\end{document}

如果要保存所讨论的框架以供以后重复使用,可以执行以下操作:

\documentclass{beamer}

\makeatletter
\edef\beamer@origlmargin{\Gm@lmargin}%
\edef\beamer@origrmargin{\Gm@rmargin}%
\makeatother

\newsavebox{\mybox}

\begin{document}
\begin{frame}
interesting frame
\end{frame}
\savebox{\mybox}{\insertslideintonotes{0.3}}

\begin{frame}
some other stuff
\end{frame}

\begin{frame}
\usebox{\mybox}
\end{frame}
\end{document}

相关内容