![beamer:列 + [覆盖,记住图片] --> 额外的白色垂直空间](https://linux22.com/image/352008/beamer%EF%BC%9A%E5%88%97%20%2B%20%5B%E8%A6%86%E7%9B%96%EF%BC%8C%E8%AE%B0%E4%BD%8F%E5%9B%BE%E7%89%87%5D%20--%3E%20%E9%A2%9D%E5%A4%96%E7%9A%84%E7%99%BD%E8%89%B2%E5%9E%82%E7%9B%B4%E7%A9%BA%E9%97%B4.png)
- 我使用
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 的环境中,这不起作用,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}