在某些投影机主题中,帧数显示为件数/总数在右下角,日期后面。由于帧数的宽度不是恒定的,这会使日期从一帧“移动”到另一帧,这让我很烦。(使用默认字体时,我只有在数字变化时才能看到它。但使用舱我正在使用的字体,我能看到每一帧变化的效果。
我不想定义自己的脚线,但我可以通过简单的重新定义强制帧号采用固定宽度,并在 MWE 中注释掉:
\documentclass{beamer}
\usepackage[sfdefault]{cabin} % this makes the effect worse
\usetheme{Boadilla} % for footer
%% Proper formatting with:
%\let\ofn\insertframenumber
%\renewcommand{\insertframenumber}{\protect\makebox[1em]{\ofn}}
\begin{document}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\end{document}
这解决了我所描述的问题,但却产生了另一个(小)问题:PDF 查看器中显示的页码被搞乱了(例如,“[1em]1”)。
当然,我可以接受这一点。此时我问这个问题更多的是出于好奇,而不是为了解决实际问题。有没有更好的方法来实现预期的效果?
答案1
使用
\let\ofn\insertframenumber
\renewcommand{\insertframenumber}{%
\texorpdfstring{\protect\makebox[1em]{\ofn}}{\ofn}%
}
因此框仅用于打印,而裸号则用于书签。
这是一个可能更好的想法:
\documentclass{beamer}
\usepackage[sfdefault]{cabin} % this makes the effect worse
\usetheme{Boadilla} % for footer
\makeatletter
\defbeamertemplate*{footline}{infolines theme changed}
{
\leavevmode%
\hbox{%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{author in head/foot}%
\usebeamerfont{author in head/foot}\insertshortauthor\expandafter\beamer@ifempty\expandafter{\beamer@shortinstitute}{}{~~(\insertshortinstitute)}
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}%
\usebeamerfont{title in head/foot}\insertshorttitle
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,right]{date in head/foot}%
\usebeamerfont{date in head/foot}\insertshortdate{}\hspace*{2em}
\makebox[4em][r]{\insertframenumber{} / \inserttotalframenumber\hspace*{2ex}}%
\end{beamercolorbox}}%
\vskip0pt%
}
\makeatother
%\setbeamertemplate{footline}[infolines theme changed]
\begin{document}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\begin{frame}{test}
\end{frame}
\end{document}