pgfpages 添加页码

pgfpages 添加页码

4 on 1我正在使用的布局为我的 Beamer 演示文稿创建讲义pgfpages。我希望每个物理页面(包含讲义的四个“页面”)在页面底部中央都有一个页码。添加\pagestyle{plain}会在每个逻辑页面上放置一个页码(因此,每个物理页面有四个页码)。

有一个简单的解决办法吗?

提供 MWE 似乎不值得,但是这里是:

\documentclass{beamer}
\usepackage{pgfpages}
\pgfuselayout{4 on 1}[landscape]
\begin{document}
\frame{foo}
\frame{bar}
\frame{baz}
\frame{bazbarfoo}
\end{document}

我想要一个位于页面底部中央的页码。

答案1

这里有一个解决方案……\rule[-.5cm]{0pt}{0pt}在页码下方添加一些额外的垂直空间。

\documentclass{beamer}
\usepackage{pgfpages}
\pgfpagesuselayout{4 on 1}[a4paper,landscape]
\makeatletter \def\pgfsys@endpicture{%
\makebox[\pgfphysicalwidth]{\the\numexpr\value{page}/4\relax}\rule[-.5cm]{0pt}{0pt}}
\makeatother
\begin{document}
\frame{foo}
\frame{bar}
\frame{baz}
\frame{bazbarfoo}
\end{document}

答案2

重新定义的问题\pgfsys@endpicture在于,它会在您使用的每个 PGF 图形的末尾调用(包括每个投影仪幻灯片上的六个微小导航符号)。它还用于在您使用某些驱动程序时保存特殊指令;因此,如果您使用 XeLaTeX,您会发现幻灯片在第二页及以后的页面上的位置不正确。最好不要管它。

为了减少意外发生,您需要将用于写入页码的代码直接注入pgfpages输出例程中。\patchcmd来自的命令etoolbox可以实现这一点。

虽然直接使用\makebox是可行的,但它也会占用垂直空间,因此第一行幻灯片的顶部可能会被推离页面。下面的代码使用与pgfpages在页面上定位数字而不占用空间相同的技术。要移动它,请更改 中的距离\pgfpoint(从左下角测量):

\documentclass{beamer}
\usepackage{etoolbox,pgfpages}
\pgfpagesuselayout{4 on 1}[a4paper,landscape]
\newcounter{physicalpage}
\makeatletter
\patchcmd{\pgfpages@buildshipoutbox}{%
  \pgfsys@endpicture
}{%
  \stepcounter{physicalpage}%
  \setbox0\vbox{\makebox[0pt][c]{\arabic{physicalpage}}}%
  \pgfsys@beginscope
  \pgflowlevel{\pgftransformshift{\pgfpoint{.5\pgfphysicalwidth}{5mm}}}%
  \wd0=0pt%
  \dp0=-\ht0%
  \pgfsys@hbox0%
  \pgfsys@endscope
  \pgfsys@endpicture
}{}{}
\makeatother
\begin{document}
\frame{foo}
\frame{bar}
\frame{baz}
\frame{bazbarfoo}
\end{document}

相关内容