根据beamer
手册第 3.10 节,t
选项顶部对齐每个框架(用作类选项时)或单个框架(用作frame
环境的可选参数时)。根据第 12.7 节,t
还可用于顶部对齐环境columns
(框架内的多列区域)的列。但是,我没有成功结合这两个任务,即在顶部对齐的框架内顶部对齐列。我遗漏了什么吗?如何实现正确的对齐?
注意:对于列,还有一个T
选项(引用第 12.7 节)应该尝试“如果奇怪的事情似乎与该t
选项有关”。添加T
到第二列接近所需结果,但没有达到目的(第二列的位置略高于第一列)。
\documentclass{beamer}
\begin{document}
\begin{frame}[t]{Frame title}
\begin{columns}[t]
\begin{column}{0.5\textwidth}
\begin{itemize}
\item First column, first item
\item First column, second item
\end{itemize}
\end{column}
\begin{column}{0.5\textwidth}% Alternative A doesn't work
% \begin{column}[T]{0.5\textwidth}% Alternative B comes close
\begin{itemize}
\item Second column, first item
\end{itemize}
\end{column}
\end{columns}
\end{frame}
\end{document}
编辑:感谢 Stefan 发布了解决方法。我仍然对为什么需要这样的解决方法感兴趣,以及为什么顶部对齐的列默认在居中框架内工作。这是 中的错误吗beamer
?
答案1
您可以将\topsep
和设置\partopsep
为零。这是考虑到这一点的 itemize 版本的定义,可实现垂直顶部对齐。它类似于我记得 Uwe Lück 不久前在邮件列表中发布的解决方案。
\documentclass{beamer}
\makeatletter
\newenvironment{myitemize}{%
\setlength{\topsep}{0pt}
\setlength{\partopsep}{0pt}
\renewcommand*{\@listi}{\leftmargin\leftmargini \parsep\z@ \topsep\z@ \itemsep\z@}
\let\@listI\@listi
\itemize
}{\enditemize}
\makeatother
\begin{document}
\begin{frame}[t]{Frame title}
\begin{columns}[t]
\begin{column}{0.5\textwidth}
\begin{myitemize}
\item First column, first item
\item First column, second item
\end{myitemize}
\end{column}
\begin{column}{0.5\textwidth}
\begin{myitemize}
\item Second column, first item
\end{myitemize}
\end{column}
\end{columns}
\end{frame}
\end{document}
答案2
更新
此已知错误已解决前一段时间. 无需采用变通解决方案或在序言中包含特殊代码行。
\documentclass{beamer}
\begin{document}
\begin{frame}[t]{Test Columns}
\begin{columns}
\column{.5\linewidth}
First Column
\begin{itemize}
\item First Item First Item First Item First Item
\item Second Item Second Item Second Item Second Item
\end{itemize}
\column{.5\linewidth}
Second Column
\begin{itemize}
\item First Item First Item First Item First Item
\item Second Item Second Item Second Item Second Item
\end{itemize}
\end{columns}
\end{frame}
\begin{frame}{Test Columns}
\begin{columns}
\column{.5\linewidth}
First Column
\begin{itemize}
\item First Item First Item First Item First Item
\item Second Item Second Item Second Item Second Item
\end{itemize}
\column{.5\linewidth}
Second Column
\begin{itemize}
\item First Item First Item First Item First Item
\item Second Item Second Item Second Item Second Item
\end{itemize}
\end{columns}
\end{frame}
\end{document}
按预期工作
原始答案
此问题已报告(问题 #78),网址为Github beamer 开发仓库。建议的解决方案是:
我知道如何修复它,而且很容易,但我不确定它是否会破坏其他东西。如果您急需修复,请替换第 256-260 行,
beamerbaseframe.sty
其中的内容为:
\def\beamer@initfirstlineunskip{%
\def\beamer@firstlineitemizeunskip{%
\vskip-\partopsep\vskip-\topsep\vskip-\parskip%
\global\let\beamer@firstlineitemizeunskip=\relax}%
\everypar{\global\let\beamer@firstlineitemizeunskip=\relax}}
和
\def\beamer@initfirstlineunskip{}%
其状态仍为“暂停”。
我们不需要修改 beamer 文件,而是可以在序言中添加一些行。
\documentclass{beamer}
\makeatletter
\define@key{beamerframe}{t}[true]{% top
\beamer@frametopskip=.2cm plus .5\paperheight\relax%
\beamer@framebottomskip=0pt plus 1fill\relax%
\beamer@frametopskipautobreak=\beamer@frametopskip\relax%
\beamer@framebottomskipautobreak=\beamer@framebottomskip\relax%
\def\beamer@initfirstlineunskip{}%
}
\makeatother
\begin{document}
\begin{frame}[t]{Frame title}
\begin{columns}[t]
\begin{column}{0.5\textwidth}
\begin{itemize}
\item First column, first item
\item First column, second item
\end{itemize}
\end{column}
\begin{column}{0.5\textwidth}
\begin{itemize}
\item Second column, first item
\end{itemize}
\end{column}
\end{columns}
\end{frame}
\end{document}
答案3
这可能值得一试minipage
,而不是在序言中创建自定义修改,特别是如果它不经常使用:
\documentclass{beamer}
\begin{document}
\begin{frame}[t]{Frame title}
\begin{minipage}[t]{0.45\textwidth}
\vspace{0pt}
\begin{itemize}
\item First column, first item
\item First column, second item
\end{itemize}
\end{minipage}%
\hfill
\begin{minipage}[t]{0.45\textwidth}
\vspace{0pt}
\begin{itemize}
\item Second column, first item
\end{itemize}
\end{minipage}
\end{frame}
\end{document}
其中\vspace{0pt}
只是为了给 LaTeX 一个共同的参考,以对齐两者中的内容minipage
。