我想要的是
我正在使用 pdflatex 和 beamer documentclass 创建演示文稿。
我在外部程序中创建了一个分步图。该图是一个 PDF 文件,其中的每一页都是一个步骤。
我想一次显示此图形的一个步骤。每个步骤的图形应替换前一步的图形。这基本上就是\multiinclude
fromxmpmulti.sty
所做的,只是所有步骤都取自单个 PDF 文件。
我使用以下 tex 代码进行了此操作:
\begin{frame}
Content before
\pause
\begin{overprint}
\onslide<+|handout:0>\includegraphics[page=1]{img}
\onslide<+|handout:0>\includegraphics[page=2]{img}
\onslide<+-|handout:1>\includegraphics[page=3]{img}
\end{overprint}
\onslide<+->
Content after
\end{frame}
因为我想包含许多这样的分步图形,所以我想先用 for 循环自动执行此过程,然后再使用命令。但是,我似乎做不到。
我拥有的
目前我有以下内容
\nonstopmode
\pdfsuppresswarningpagegroup=1
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{pgffor}
\begin{document}
\begin{frame}
\pdfximage{img.pdf}
\newcounter{laststep}
\setcounter{laststep}{\pdflastximagepages}
\begin{overprint}
\foreach \x in {1,...,\value{laststep}} {
%\onslide<+|handout:0>
\includegraphics[page=\x]{img}
}
\end{overprint}
\end{frame}
\end{document}
为了使这个例子独立起来:这是base64 img.pdf
。复制粘贴此内容base64 -d > img.pdf
到获取文件或使用在线服务。
所示的代码可img.pdf
同时编译并包含所有步骤,但是当我取消注释时,\onslide<+|handout:0>
我会一遍又一遍地收到以下错误。pdflatex 无休止运行。
! Missing number, treated as zero.
<to be read again>
p
l.19 \end{frame}
我花了几个小时尝试自动包含这些分步图形。在其他尝试中,我还使用了其他循环宏,例如forloop
但到目前为止没有任何效果。这是我迄今为止最好的尝试。
问题
如何从单个 PDF 中包含分步图形?要么通过修复损坏部分\foreach
,要么使用其他方法,甚至以包的形式提供现有解决方案。
答案1
这对我有用(我用不同的内容创建了自己的img.pdf
)。
\nonstopmode
\pdfsuppresswarningpagegroup=1
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\newcounter{laststep}
\newcounter{iloop}
\begin{document}
\begin{frame}
\pdfximage{img.pdf}
\setcounter{laststep}{\pdflastximagepages}
\begin{overprint}
\setcounter{iloop}{0}
\loop\stepcounter{iloop}
\onslide<+|handout:0>
\includegraphics[page=\number\value{iloop}]{img}
\ifnum\value{iloop}<\value{laststep}\repeat
\end{overprint}
\end{frame}
\end{document}
答案2
感谢用户薛定谔的猫我能够完成我的命令。我遇到了另一个小问题,\pause
我的命令之后的下一个命令会暂停两次,但我通过修改计数器解决了这个问题beamerpauses
。
最终命令是:
\nonstopmode
\pdfsuppresswarningpagegroup=1
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\newcounter{laststep}
\newcounter{step}
\newcommand{\stepwisegraphics}[1]{%
\pdfximage{#1.pdf}
\setcounter{laststep}{\pdflastximagepages}
\setcounter{step}{1}
\begin{overprint}
\loop
\onslide<+|handout:0>
\includegraphics[page=\thestep]{#1}
\stepcounter{step}\ifnum\value{step}<\value{laststep}\repeat
\addtocounter{beamerpauses}{-1} % workaround mystic double pause
\pause
\includegraphics[page=\thestep]{#1}
\end{overprint}
}
\begin{document}
\begin{frame}
top\par
\pause \stepwisegraphics{img}
\pause middle 1\par
\pause middle 2\par
\pause \stepwisegraphics{img}
\pause bottom
\end{frame}
\end{document}