Beamer 不考虑脚线高度的变化

Beamer 不考虑脚线高度的变化

看起来 Beamer忽略变化在里面尺寸模板元素。

我有以下最小示例:

\documentclass{beamer}
\usepackage{lipsum}

\setbeamertemplate{footline}[text line]{
\begin{beamercolorbox}[wd=\paperwidth,ht=3ex,dp=1ex]{}
FirstFoot
\end{beamercolorbox}
}

\begin{document}

\begin{frame}[allowframebreaks]{FirstSlide}
\lipsum[3-8]
\end{frame}

\setbeamertemplate{footline}[text line]{%
\begin{beamercolorbox}[wd=\paperwidth,ht=3ex,dp=1ex]{}%
SecondFoot
\end{beamercolorbox}
}

\begin{frame}[allowframebreaks]{SecondSlide}
\lipsum[3-8]
\end{frame}

\end{document}

本文档按预期呈现。

现在让我们做一个很小的改变,将第一个脚线的 ht 参数增加到 30。

\documentclass{beamer}
\usepackage{lipsum}

\setbeamertemplate{footline}[text line]{
\begin{beamercolorbox}[wd=\paperwidth,ht=30ex,dp=1ex]{}% Set
FirstFoot
\end{beamercolorbox}
}

\begin{document}

\begin{frame}[allowframebreaks]{FirstSlide}
\lipsum[3-8]
\end{frame}

\setbeamertemplate{footline}[text line]{%
\begin{beamercolorbox}[wd=\paperwidth,ht=3ex,dp=1ex]{}% Ignored
SecondFoot
\end{beamercolorbox}
}

\begin{frame}[allowframebreaks]{SecondSlide}
\lipsum[3-8]
\end{frame}

\end{document}

Beamer 尊重从第一个到第二个模板规范的页脚文本的更改,但是忽略第二个规格的高度。

现在我们进行反向测试:

\documentclass{beamer}
\usepackage{lipsum}

\setbeamertemplate{footline}[text line]{
\begin{beamercolorbox}[wd=\paperwidth,ht=3ex,dp=1ex]{}% Set
FirstFoot
\end{beamercolorbox}
}

\begin{document}

\begin{frame}[allowframebreaks]{FirstSlide}
\lipsum[3-8]
\end{frame}

\setbeamertemplate{footline}[text line]{%
\begin{beamercolorbox}[wd=\paperwidth,ht=30ex,dp=1ex]{}% Ignored
SecondFoot
\end{beamercolorbox}
}

\begin{frame}[allowframebreaks]{SecondSlide}
\lipsum[3-8]
\end{frame}

\end{document}

现在,beamer 再次遵守第一个脚注模板的高度。当稍后增加第二个脚注的高度时,布局会忽略此更改,因此第二个脚注的文本将被推离页面。

因此它看起来像投影机忽略脚线高度的变化。

这是一个错误吗?

如何我会改变脚注的高度吗?

答案1

随着当前 beamer 开发版本,beamer 现在会在每帧开始时计算头部和脚部的高度。此功能应包含在 beamer v3.70(或更新版本)中。

在此处输入图片描述

答案2

从 beamer 用户指南(第 8.2.1 节)中可以得知:

标题和页脚的大小按以下方式确定:它们的宽度始终为纸张宽度。它们的高度通过在命令后立即临时排版标题和页脚来确定\begin{document}。此时的标题和页脚的头部是冻结并且将在整个文档中使用,即使标题和脚注的高度后来发生变化(它们不应该发生变化)。

因此,关于您的目标的第一条评论是:您不应该尝试修改整个文档中的页脚高度。

快速修改文档以显示一些对比后,您实际上可以看到它beamer确实按照文档所述执行。

% arara: lwpdflatex
\documentclass{beamer}
\usepackage{lipsum}
\setbeamertemplate{navigation symbols}{}
\setbeamercolor{footlinecolor}{fg=white,bg=blue}

\setbeamertemplate{footline}[text line]{%
\begin{beamercolorbox}[wd=\paperwidth,ht=30ex,dp=1ex]{footlinecolor}%
FirstFoot%
\end{beamercolorbox}%
}

\begin{document}


\begin{frame}[allowframebreaks]{FirstSlide}
\lipsum[3-8]
\end{frame}

\setbeamertemplate{footline}[text line]{%
\begin{beamercolorbox}[wd=\paperwidth,ht=3ex,dp=1ex]{footlinecolor}%
SecondFoot%
\end{beamercolorbox}%
}

\begin{frame}[allowframebreaks]{SecondSlide}
\lipsum[3-8]
\end{frame}

\end{document}

第一张幻灯片:计算并冻结预期高度

在此处输入图片描述

第七张幻灯片:新的高度被激活,但其余部分仍按预期冻结

在此处输入图片描述

总结一下,它beamer实际上对脚注本身进行了更新,但是脚注框的顶部被文档锁定,给人的印象是它没有考虑到任何修改。

答案3

答案已经在 stackexchange 中了,只是我没有找到正确的搜索词。问题似乎是缺少对 footline 高度的重新计算。

在 \ifthenelse 内部使用 \setbeamertemplate{footline} 时出现问题

https://tex.stackexchange.com/a/78345/196228

https://tex.stackexchange.com/a/105753/196228

现在已经了解了这个机制,我认为这是 beamer 的一个错误/缺少的功能。

完整示例如下:

\documentclass{beamer}
\usepackage{lipsum}

\setbeamertemplate{footline}[text line]{
\begin{beamercolorbox}[wd=\paperwidth,ht=3ex,dp=1ex]{}% Set to a small value
FirstFoot
\end{beamercolorbox}
}

\begin{document}

\begin{frame}[allowframebreaks]{FirstSlide}
\lipsum[3-8]
\end{frame}

\setbeamertemplate{footline}[text line]{%

\begin{beamercolorbox}[wd=\paperwidth,ht=30ex,dp=1ex]{}% Set to a larger value
SecondFoot
\end{beamercolorbox}
}

%% and now have the footer size recalculated again
\makeatletter
\beamer@calculateheadfoot
\makeatother


\begin{frame}[allowframebreaks]{SecondSlide}
\lipsum[3-8]
\end{frame}

\end{document}

相关内容