使用 expl3 和 beamer 时出现奇怪的行为

使用 expl3 和 beamer 时出现奇怪的行为

我正在尝试创建一个 beamer 模板,其中所有内容默认为顶部对齐。对于那些没有标题的幻灯片,我想自动添加顶部边距。案例 2下面的 MWE 中的是我想到的。不幸的是,它无法增加顶部边距。相比之下,我包括情况1,它仅在添加边距方面正常工作。我不确定为什么将minipage一些if块放在里面会改变输出。

CASE 1 的输出

在此处输入图片描述

CASE 2 的输出

在此处输入图片描述

\documentclass[t]{beamer}
\usepackage{expl3}

\ExplSyntaxOn
% CASE 1:
% works normally
\setbeamertemplate{headline}{
  \begin{minipage}[t][1cm][t]{0.8\paperwidth}
  abc\par
  def\par
  ghi\par
  \end{minipage}  
}

% CASE 2:
% not working
\setbeamertemplate{headline}{
  % get frame number
  \tl_set:Nx \l_tmpa_tl {\insertframenumber}
  % do not add margin to the title page
  \tl_if_eq:NnF \l_tmpa_tl {1} {
    \cs_if_exist:NT \insertframetitle {
      \hcoffin_set:Nn \l_tmpa_coffin {\insertframetitle}
      \dim_compare:nNnT {\coffin_wd:N \l_tmpa_coffin} < {0.1pt} {
        % add spacing when there is no title
        \begin{minipage}[t][1cm][t]{0.8\paperwidth}
        abc\par
        def\par
        ghi\par
        \end{minipage}  
      }
    }
  }
}


\ExplSyntaxOff
\begin{document}

\maketitle

\begin{frame}{title}
conten...
\end{frame}

\begin{frame}
content...
\end{frame}

\end{document}


答案1

这不是我创建的,我只是根据这个用例进行了调整。如果你认为这值得点赞,那么你真的应该点赞@samcarter 的原始答案

以下重复使用来自@samcarter 的想法(但修补了环境,就像那里提议的那样)。

我们修补了beamer的内部结构,以添加一个模板,当框架中noframetitle没有 时,该模板将被调用。此模板将添加一些空白。您可以根据自己的喜好修改该模板,我只是在那里放置了一个宽度为 的(因此它是不可见的),高度是我从反复试验中获得的,以匹配带有标题的框架的间距。\frametitlenoframetitle\rule0pt

\documentclass[t]{beamer}

\makeatletter
\patchcmd\endbeamer@frameslide
  {\setbox\beamer@frametitlebox=\box\voidb@x}
  {%
    % no change for title page
    \ifnum\c@framenumber=1
      \setbox\beamer@frametitlebox=\box\voidb@x
    \else
      \setbox\beamer@frametitlebox=\vbox{%
        \vbox{}%
        {\parskip0pt\usebeamertemplate***{noframetitle}\vskip0.25em}%
      }%
    \fi
  }
  {}
  {\GenericError{}{Error: Failed to patch beamer's frameslide}{}{}}
\makeatother
\setbeamertemplate{noframetitle}{\rule{0pt}{6.7mm}}

\begin{document}

\maketitle

\begin{frame}{title}
  content\ldots
\end{frame}

\begin{frame}
  content\ldots
\end{frame}

\end{document}

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

相关内容