我想要的是

我想要的是

我想要的是

我正在使用 pdflatex 和 beamer documentclass 创建演示文稿。

我在外部程序中创建了一个分步图。该图是一个 PDF 文件,其中的每一页都是一个步骤。

我想一次显示此图形的一个步骤。每个步骤的图形应替换前一步的图形。这基本上就是\multiincludefromxmpmulti.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}

生成的幻灯片动画

相关内容