看起来 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}