如果 Beamer-color frametitle 的背景为空,为什么需要 \nointerlineskip?

如果 Beamer-color frametitle 的背景为空,为什么需要 \nointerlineskip?

我正在尝试读取 Beamer 默认外部主题的源代码(文件beamerouterthemedefault.sty)。第 144 行有以下代码:

\defbeamertemplate*{frametitle}{default}[1][left]
{
  \ifbeamercolorempty[bg]{frametitle}{}{\nointerlineskip}%
  % more things here
}

我的问题很简单:这样做的目的是什么?这与Beamer 颜色\nointerlineskip的背景有何关联?frametitle

编辑:我检查了 Bitbucket 上的存储库,但没有找到任何提示(我希望通过“责备”找到一些有启发性的提交消息 - 但什么也没有。)

答案1

beamer@frameslide在 的环境定义中,上方beamerbaseframe.sty有一个空白:vboxframetitle

\ifx\beamer@frametitle\@empty%
  \setbox\beamer@frametitlebox=\box\voidb@x%
\else%
  \setbox\beamer@frametitlebox=\vbox{
    \vbox{}%
    {\parskip0pt\usebeamertemplate***{frametitle}\vskip0.25em}%
  }%
\fi%

现在假设我们\nointerlineskip从 的模板代码中删除 行,那么和frametitle之间将会有垂直空间:vboxframetitle

.\vbox(0.0+0.0)x0.0
.\glue(\lineskip) 1.0
.\hbox(19.136+0.0)x324.79259

垂直空间来自\lineskip,因为默认情况下盒子的高度frametitle大于\baselineskip

当背景颜色为frametitle空时,这个额外的垂直空间通常不显眼。但如果背景颜色存在,而且标题也存在,这个空间就显得多余了:

在此处输入图片描述在此处输入图片描述

为了摆脱这个多余的空间,我们还可以修补beamer@frameslide,删除多余的vbox{}

在此处输入图片描述

\documentclass{beamer}
\usepackage{xpatch}
\usetheme{Copenhagen}
\begin{document}

\section{First Section}

\begin{frame}
\frametitle{Default frame title}
\end{frame}

\makeatletter
% remove \nointerlineskip in frametitle template
\xpatchcmd{\beamer@@tmpl@frametitle}{\nointerlineskip}{\relax}{}{}
\makeatother

\begin{frame}
\frametitle{Frame title without nointerlineskip}
\end{frame}

\makeatletter
% undo the above patch
%\xpatchcmd{\beamer@@tmpl@frametitle}{\relax}{\nointerlineskip}{}{}
% patch in another way: modify beamer@frameslide environment
\xpatchcmd{\endbeamer@frameslide}{\vbox{}}{}{}{}
\makeatother

\begin{frame}
\frametitle{Frame title without empty vbox}
\end{frame}

\end{document} 

相关内容