beamer:列 + [覆盖,记住图片] --> 额外的白色垂直空间

beamer:列 + [覆盖,记住图片] --> 额外的白色垂直空间
  • 我使用column环境来beamer缩短文本宽度。
  • 此外,我使用典型的解决方案向框架添加图片tikz[overlay, remember picture]
  • 当我在环境tikz之前有了这个解决方案column,我就会得到一个额外的垂直空间(参见 MWE)。
  • %我甚至屏蔽了代码中的所有换行符。

\documentclass[t]{beamer}
\usepackage{tikz}

\begin{document}

% ------------------------------
\begin{frame}
\frametitle{This Works (\texttt{tikzpicture} after \texttt{columns})}

\begin{columns}[onlytextwidth]
    \column{.60\textwidth}
    Text
\end{columns}

\begin{tikzpicture}[overlay, remember picture] 
\node at (current page.east) 
    [
    anchor=east,
    xshift=0mm,
    yshift=0mm
    ] 
{
\includegraphics[width=0.33\paperwidth]{example-image-a}
};
\end{tikzpicture}

\end{frame}

% ------------------------------
\begin{frame}
\frametitle{This Doesn't Works (\texttt{tikzpicture} before \texttt{columns})}
%
\begin{tikzpicture}[overlay, remember picture]% 
\node at (current page.east) %
    [%
    anchor=east,%
    xshift=0mm,%
    yshift=0mm%
    ] %
{%
\includegraphics[width=0.33\paperwidth]{example-image-a}%
};%
\end{tikzpicture}%
%
\begin{columns}[onlytextwidth]
    \column{.60\textwidth}
    Text
\end{columns}

\end{frame}

% ------------------------------
\begin{frame}
\frametitle{This Works Again(\texttt{tikzpicture} inside \texttt{columns})}
\begin{columns}[onlytextwidth]
    \column{.60\textwidth}
    %
    \begin{tikzpicture}[overlay, remember picture]% 
    \node at (current page.east) %
        [%
        anchor=east,%
        xshift=0mm,%
        yshift=0mm%
        ] %
    {%
    \includegraphics[width=0.33\paperwidth]{example-image-a}%
    };%
    \end{tikzpicture}%
    %    
    Text
\end{columns}

\end{frame}

\end{document}

在此处输入图片描述


有人能解释一下为什么我会得到额外的空间吗?

答案1

使用时remember picture,PGF会做一个标记,以便知道将图片放在哪里。

\ifpgfrememberpicturepositiononpage%
                \hbox to0pt{\pgfsys@markposition{\pgfpictureid}}%
              \fi% 

这是一个不可见的框,因为它的宽度为零并且不排版任何内容,但我认为就 TeX 而言,它足以算作某种东西。

此问题并非 Beamer 所特有。您可以使用该类重现此问题article

\documentclass[]{article}
\usepackage{tikz}
\begin{document}

This Works (\texttt{tikzpicture} after text)

Text

\begin{tikzpicture}[overlay, remember picture]
  \node at (current page.east)
  [
  anchor=east,
  xshift=0mm,
  yshift=0mm
  ]
  {
    \includegraphics[width=0.33\paperwidth]{example-image-a}
  };
\end{tikzpicture}

This Doesn't Work (\texttt{tikzpicture} before text)

\begin{tikzpicture}[overlay, remember picture]%
  \node at (current page.east) %
  [%
  anchor=east,%
  xshift=0mm,%
  yshift=0mm%
  ] %
  {%
    \includegraphics[width=0.33\paperwidth]{example-image-a}%
  };%
\end{tikzpicture}

Text


\end{document}

没有 Beamer 的示例

但是,在这种情况下,删除空行确实会阻止额外的空间。

在 Beamer 的环境中,这不起作用,columns因为该环境\par无论如何都会执行显式操作。

\newenvironment<>{columns}[1][]{%
  \begin{actionenv}#2%
  ...
  \par%
  ...

但您无需先排版图片以将其放在文本后面。您可以使用 Beamer 自己的工具将其放在背景中,例如使用背景模板。

\documentclass[t]{beamer}
\usepackage{tikz}
\begin{document}
\setbeamertemplate{background}{%
  \begin{tikzpicture}[overlay, remember picture]
    \node at (current page.east)
    [
    anchor=east,
    xshift=0mm,
    yshift=0mm
    ]
    {
      \includegraphics[width=0.33\paperwidth]{example-image-a}
    };
  \end{tikzpicture}%
}

\begin{frame}
  \frametitle{This Works (\texttt{tikzpicture} behind \texttt{columns})}

  \begin{columns}[onlytextwidth]
    \column{.60\textwidth}
    Text
  \end{columns}


\end{frame}



\end{document}

图片在文本后面

相关内容