在编写 beamer 演示文稿时,我经常使用包含单个包含图形的文本块将图片自由放置在幻灯片上,例如
\begin{textblock*}{0.51\textwidth}(10.8mm,56.8mm)
\includegraphics[width=50mm]{picture}
\end{textblock*}
不幸的是,图片在 Z 轴顺序上总是位于幻灯片文本主体的上方,也就是说图片会与文本重叠并遮盖文本。有时这非常不方便,尤其是当图片本身不是正方形时。
我读到过使用 beamer 背景模板作为解决方案,但这对我而言不起作用。我们的公司 beamer 风格也使用背景模板,这会干扰此解决方案。此外,在 beamer 背景模板中使用文本块似乎不起作用。
我还读过关于将所有内容包装在 tikz 中以获得正确的 z 顺序的文章。但是当你在每张幻灯片上都需要它时,这个额外的层代码也非常不方便。
那么,有没有更简单的解决方案可以将图片放在幻灯片的任何位置并位于文本后面?
答案1
backgroundblock
您可以像这样定义自定义环境:
\documentclass{beamer}
% For demonstration purposes only, can be removed without harm
\usetheme{Ilmenau}
\usepackage{lipsum}
% beamer: How to place images behind text (z-order)
% (http://tex.stackexchange.com/a/134311)
\makeatletter
\newbox\@backgroundblock
\newenvironment{backgroundblock}[2]{%
\global\setbox\@backgroundblock=\vbox\bgroup%
\unvbox\@backgroundblock%
\vbox to0pt\bgroup\vskip#2\hbox to0pt\bgroup\hskip#1\relax%
}{\egroup\egroup\egroup}
\addtobeamertemplate{background}{\box\@backgroundblock}{}
\makeatother
\begin{document}
\begin{frame}
\begin{backgroundblock}{10mm}{10mm}
\includegraphics[width=50mm]{example-image-a}
\end{backgroundblock}
\lipsum
\begin{backgroundblock}{60mm}{47.5mm}
\includegraphics[width=50mm]{example-image-b}
\end{backgroundblock}
\end{frame}
\end{document}
它的用法非常类似于textpos
环境textblock(*)
模式absolute
,即
\begin{backgroundblock}{<hpos>}{<vpos>}
<Content>
\end{backgroundblock}
放置在相对于幻灯片左上角的<Content>
坐标处的框中。(<hpos>,<vpos>)
代码解释
模板\@backgroundblock
中添加了一个框,稍后会用环境内容填充该框。这不会干扰自定义主题,因为可以确保框不占用任何空间。beamer
background
backgroundblock