我想在某些框架中将文本放置在投影仪幻灯片的右下角。我创建了一个命令,通过 放置此文本\vfill\hfill
。在普通类(如文章)中,它可以完美运行。但对于投影仪,\vfill
似乎没有标准行为。
比较以下 MWE 中的第 1 帧和第 2 帧
\documentclass[handout]{beamer}
\def\position#1#2{\vfill\hfill #1-#2}
\begin{document}
\begin{frame}
\begin{itemize}\item a
\item a
\item a
\end{itemize}
\position{2}{2}
\end{frame}
\begin{frame}
\begin{itemize}\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\end{itemize}
\position{2}{2}
\end{frame}
\end{document}
任何想法?
答案1
我同意 @egreg 的观点,这似乎不是实现你意图的正确方法。我认为 @Peter Grill 的答案是更好的选择。无论如何,如果你坚持,以下是我的建议。
Beamer 使用\vfill
来垂直对齐幻灯片。您可以这样想:\vfill
幻灯片内容上方有一个 ,下方还有一个。因此,粗略地说,\vfill
您引入的 仅使用幻灯片垂直未使用空间的三分之一。
要使用所有这些空间,您需要下一级 TeX 胶水拉伸:
\def\position#1#2{\vskip 0pt plus 1filll\hfill #1-#2}
这样一来,幻灯片的顶部和底部就没有空间了,但这可能就是您想要的。
答案2
根据beamer
手册,您可以使用该textpos
包将内容绝对定位在页面上:
12.8 绝对定位文本和图形
通常,beamer 使用 TEX 的常规排版机制来定位页面上的文本和图形。在某些情况下,您可能希望某个文本或图形出现在绝对指定的页面位置。这意味着该位置是相对于幻灯片的左上角指定的。该包
textpos
提供了几个用于绝对定位文本的命令,它与 beamer 一起工作。使用此包时,您通常必须指定选项overlay
和可能absolute
。
代码:
\documentclass[handout]{beamer}
\usepackage[absolute,overlay]{textpos}
\newcommand*{\XOffsetFromBottomRight}{-2.0em}%
\newcommand*{\YOffsetFromBottomRight}{2.0ex}%
\newcommand*{\BottomRightText}[2]{%
\par%
\begin{textblock*}{5.0cm}(\dimexpr\textwidth-\XOffsetFromBottomRight\relax,\dimexpr\textheight-\YOffsetFromBottomRight\relax)
#1-#2%
\end{textblock*}%
}%
\begin{document}
\begin{frame}
\begin{itemize}\item a
\item a
\item a
\end{itemize}
\BottomRightText{2}{1}
\end{frame}
\begin{frame}
\begin{itemize}\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\end{itemize}
\BottomRightText{2}{2}
\end{frame}
\end{document}
答案3
\vspace{\stretch{100}}
会做这样的事:
\vfill
(幻灯片的上半部分)
\vfill\vfill...\vfill
(那\vspace{\stretch{100}}
部分)
(幻灯片的下半部分)
\vfill
因此几乎可以模拟预期的\vfill
结果。
现在,你可以只更改 \position 命令的定义,如下所示
\def\position#1#2{\vspace{\stretch{100}}\hfill #1-#2}
或者定义自己的 \myvfill 供 BEAMER 使用
\def\myvfill{\vspace{\stretch{100}}}
\def\position#1#2{\myvfill\hfill #1-#2}
答案4
事实上,如果您使用s
可伸缩框架,则可以将您的宏与投影仪一起使用(\vfill
如果您希望您的框架居中,则可能在开始时使用):
\documentclass[handout]{beamer}
\def\position#1#2{\vfill\hfill #1-#2}
\begin{document}
\begin{frame}[s]
\begin{itemize}
\item a
\item a
\item a
\end{itemize}
\position{2}{2}
\end{frame}
\begin{frame}[s]
\vfill
\begin{itemize}
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\end{itemize}
\position{2}{2}
\end{frame}
\end{document}
不过就我个人而言,我认为如果将文本附加到框架底部某些已经存在的元素上会更容易,navigation symbols
例如footline
:
\documentclass[
handout
]{beamer}
\newcommand{\position}[2]{
\addtobeamertemplate{navigation symbols}{}{{\color{black}\normalsize #1-#2}}
}
\begin{document}
\begingroup
\position{2}{2}
\begin{frame}
\begin{itemize}
\item a
\item a
\item a
\end{itemize}
\end{frame}
\begin{frame}
\begin{itemize}
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\end{itemize}
\end{frame}
\endgroup
\end{document}