beamer:顶部对齐框架内的顶部对齐列

beamer:顶部对齐框架内的顶部对齐列

根据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

相关内容