我正在尝试创建一个 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
没有 时,该模板将被调用。此模板将添加一些空白。您可以根据自己的喜好修改该模板,我只是在那里放置了一个宽度为 的(因此它是不可见的),高度是我从反复试验中获得的,以匹配带有标题的框架的间距。\frametitle
noframetitle
\rule
0pt
\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}