投影仪中 \only 和图形 (pdf) 对齐的问题

投影仪中 \only 和图形 (pdf) 对齐的问题

我一直尝试使用这个简单的命令将 pdf 图形包含在文档中:

\documentclass{beamer}

\begin{document}

\begin{frame}
    \only<1>{\includegraphics[width=\textwidth]{test}}
    \only<2>{\includegraphics[width=\textwidth]{test}}
    \only<3>{\includegraphics[width=\textwidth]{test}}
\end{frame}

\end{document}

不幸的是,这三张图片(应该是相同的)并没有完全对齐(从顶部开始)。

这是用于生成pdf的test.pdf:http://imgur.com/1nOiT

这是生成的pdf:http://imgur.com/UUu0v(正如您所见(没有?)),第一张和第二张图像没有对齐。


现在有人知道为什么它会这样吗?在这里我放了一个 VME,因为在我看来,除了 Beamer 类之外,没有其他包是必要的。我尝试过我的“常用”包,也许我只是错过了正确的包?

只是想让你知道,我目前能够做什么:如果我把一个放在~后面{test},那么它就会对齐(请注意,它不适用于这个最小的例子,缺少一些包)。

我还注意到了一件事(因为我第一次遇到这个问题时,我遇到了更多\only),总是倒数第二行出错!无论有多少行\only,最后一个行都会与前一个行对齐(这就是为什么我们至少需要三行)。

答案1

这是众所周知的事实;Beamer 文档在第9.5 动态更改文本或图像

这种方法(使用命令)的问题\only在于,它可能会导致线条高度出现轻微但令人讨厌的差异,这可能会导致整个框架在幻灯片之间“摆动”。如果替换文本有几行长,这个问题会变得更加严重。要解决这个问题,您可以使用两个环境:overlayarea 和 overprint。第一个更灵活,但不太方便用户使用。

因此,您可以使用overlayarea

\documentclass{beamer}

\begin{document}

\begin{frame}
\begin{overlayarea}{\textwidth}{\textheight}
    \only<1>{\includegraphics[width=\textwidth]{test}}
    \only<2>{\includegraphics[width=\textwidth]{test}}
    \only<3>{\includegraphics[width=\textwidth]{test}}
\end{overlayarea}
\end{frame}

\end{document}

答案2

这只是垂直模式下 whatsit 节点的常见问题。使用颜色变化(甚至没有beamer)也会出现同样的情况。

如果你确保它们处于水平模式,那么一切都会正常进行。

\documentclass{beamer}

\begin{document}

\begin{frame}
    \mbox{\only<1>{\includegraphics[width=\textwidth]{test}}%
    \only<2>{\includegraphics[width=\textwidth]{test}}%
    \only<3>{\includegraphics[width=\textwidth]{test}}}
\end{frame}

\end{document}

答案3

正如 Roly 指出的那样,我发现最有效的解决方案是在%除最后一个命令之外的所有命令末尾添加一个\includegraphics行末百分号(%)有什么用?)。

因此这是可行的:

\begin{frame}
  \frametitle{Slide 1}
  \begin{figure}[H]
    \centering
    \only<1>{\includegraphics[width=0.7\textwidth]{thinBody/thinBody0.png}}%
    \only<2>{\includegraphics[width=0.7\textwidth]{thinBody/thinBody1.png}}%
    \only<3>{\includegraphics[width=0.7\textwidth]{thinBody/thinBody2.png}}%
    \only<4>{\includegraphics[width=0.7\textwidth]{thinBody/thinBody3.png}}%
    \only<5>{\includegraphics[width=0.7\textwidth]{thinBody/thinBody4.png}}
    \caption{The caption}
    \label{fig:label}
  \end{figure}
\end{frame}

或者对于问题中的代码:

\begin{frame}
    \only<1>{\includegraphics[width=\textwidth]{test}}%
    \only<2>{\includegraphics[width=\textwidth]{test}}%
    \only<3>{\includegraphics[width=\textwidth]{test}}
\end{frame}

我不知道为什么会发生这种情况,但效果很好。也许有人可以给我们启发。

答案4

我认为\begin{overprint}\forloop更好的解决方案。编码和拟合更少:

\documentclass{beamer}

\usepackage{forloop} 
\newcounter{slideno}

\begin{document}
\begin{frame}
    \begin{figure}
    \centering
    \begin{overprint}
    \forloop{slideno}{1}{\value{slideno} < 27}{%
            \only<\value{slideno}>{
                \includegraphics[page=\value{slideno}]
                {tikz/my_standalone_beamer_slides}}}
    \end{overprint}
    \caption{Add caption here}
\end{figure}
\end{frame}
\end{document}

相关内容