Beamer 讲义:在框架周围创建边框时出现问题

Beamer 讲义:在框架周围创建边框时出现问题

我正在尝试从Beamer。我希望在每张打印纸上都有多个框架,并且我希望框架有边框,比如用细线制作的边框。为了节省墨水,我不是想要一个阴影背景。

我有两个问题需要解决。首先,如何为讲义中的框架创建边框?下面标记的代码部分边界创建边框,但它也会为不存在的框架创建边框。下面代码中标记的部分打印 8 张合 1 张允许我在每张纸上放置八个框架,但部分顶部框架不会打印(它们被切掉了)。如何在不改变打印机设置的情况下解决这个问题?

\documentclass[10pt,handout,mathserif]{beamer}

\usepackage{amsmath,amssymb,amsfonts,amsthm}
\usepackage{graphics}
\usepackage{color}
\usepackage{framed}
\usepackage{amsthm, array}
\usepackage{yhmath}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfpages} 
%
% Prints 8 on 1
\pgfpagesuselayout{8 on 1}[letterpaper,border shrink=1mm]
%
%
% Border
\pgfpageslogicalpageoptions{1}{border code=\pgfusepath{stroke}}
\pgfpageslogicalpageoptions{2}{border code=\pgfusepath{stroke}}
\pgfpageslogicalpageoptions{3}{border code=\pgfusepath{stroke}}
\pgfpageslogicalpageoptions{4}{border code=\pgfusepath{stroke}}
\pgfpageslogicalpageoptions{5}{border code=\pgfusepath{stroke}}
\pgfpageslogicalpageoptions{6}{border code=\pgfusepath{stroke}}
\pgfpageslogicalpageoptions{7}{border code=\pgfusepath{stroke}}
\pgfpageslogicalpageoptions{8}{border code=\pgfusepath{stroke}}
%
%
\begin{document}

%Stuff goes here.

\end{document}

答案1

对于讲义,您可以注释掉所有主题修改并保留主题default,也可以使用命令指定不同的情况presentation、等。对于框架边框,可以使用在特殊节点边框上绘制的 TikZ 矩形article。这是一个简单的例子:handout\mode{}current page

\documentclass[10pt,handout,onlymath]{beamer}
\usepackage{tikz}
\usepackage{pgfpages} 
\usefonttheme{serif}
\setbeamertemplate{background canvas}{
    \tikz \draw (current page.north west) rectangle (current page.south east);
        }
\pgfpagesuselayout{8 on 1}[letterpaper,border shrink=5mm]
\begin{document}

\foreach \x in {1,...,8} {\begin{frame}{Title \x}The frame number \x\end{frame}}

\end{document}

在此处输入图片描述

答案2

我用pgfpages感谢我的beamer演示文稿也是如此。我有一个布局,在每个框架周围都放置一个边框,因为我发现这样更容易在视觉上区分框架。我还注意到末尾空白页周围有一个框架,但直到现在才想到要修复它(尽管我同意把它们放在那里看起来不太好,尤其是因为边框有点厚——因为实现的原因)。然而,有人问这个问题是摆脱这种烦恼的一大动力。所以这里有一个解决方案。

我使用自定义布局,在每个页面周围添加边框,并允许页面缩小。不过,在添加边框之前,它会测试页面上是否真的有内容。如果没有,它就不会添加边框。

\documentclass[handout]{beamer}

\usepackage{pgffor}

\makeatletter
\def\strokeifnotempty{%
\expandafter\ifvoid\csname pgfpages@box@\the\pgf@cpn\endcsname
\let\@next=\relax
\else
\let\@next=\pgfstroke
\fi
\@next%
}
\makeatother

\mode<handout>
{
  \usepackage{pgf}
  \usepackage{pgfpages}

\pgfpagesdeclarelayout{8 on 1 boxed}
{
  \edef\pgfpageoptionheight{\the\paperheight} 
  \edef\pgfpageoptionwidth{\the\paperwidth}
  \edef\pgfpageoptionborder{0pt}
}
{
  \pgfpagesphysicalpageoptions
  {%
    logical pages=8,%
    physical height=\pgfpageoptionheight,%
    physical width=\pgfpageoptionwidth%
  }
  \pgfpageslogicalpageoptions{1}
  {%
    border code=\pgfsetlinewidth{2pt}\strokeifnotempty,%
    border shrink=\pgfpageoptionborder,%
    resized width=.5\pgfphysicalwidth,%
    resized height=.5\pgfphysicalheight,%
    center=\pgfpoint{.25\pgfphysicalwidth}{.875\pgfphysicalheight}%
  }%
  \pgfpageslogicalpageoptions{2}
  {%
    border code=\pgfsetlinewidth{2pt}\strokeifnotempty,%
    border shrink=\pgfpageoptionborder,%
    resized width=.5\pgfphysicalwidth,%
    resized height=.5\pgfphysicalheight,%
    center=\pgfpoint{.75\pgfphysicalwidth}{.875\pgfphysicalheight}%
  }%
  \pgfpageslogicalpageoptions{3}
  {%
    border code=\pgfsetlinewidth{2pt}\strokeifnotempty,%
    border shrink=\pgfpageoptionborder,%
    resized width=.5\pgfphysicalwidth,%
    resized height=.5\pgfphysicalheight,%
    center=\pgfpoint{.25\pgfphysicalwidth}{.625\pgfphysicalheight}%
  }%
  \pgfpageslogicalpageoptions{4}
  {%
    border code=\pgfsetlinewidth{2pt}\strokeifnotempty,%
    border shrink=\pgfpageoptionborder,%
    resized width=.5\pgfphysicalwidth,%
    resized height=.5\pgfphysicalheight,%
    center=\pgfpoint{.75\pgfphysicalwidth}{.625\pgfphysicalheight}%
  }%
  \pgfpageslogicalpageoptions{5}
  {%
    border code=\pgfsetlinewidth{2pt}\strokeifnotempty,%
    border shrink=\pgfpageoptionborder,%
    resized width=.5\pgfphysicalwidth,%
    resized height=.5\pgfphysicalheight,%
    center=\pgfpoint{.25\pgfphysicalwidth}{.375\pgfphysicalheight}%
  }%
  \pgfpageslogicalpageoptions{6}
  {%
    border code=\pgfsetlinewidth{2pt}\strokeifnotempty,%
    border shrink=\pgfpageoptionborder,%
    resized width=.5\pgfphysicalwidth,%
    resized height=.5\pgfphysicalheight,%
    center=\pgfpoint{.75\pgfphysicalwidth}{.375\pgfphysicalheight}%
  }%
  \pgfpageslogicalpageoptions{7}
  {%
    border code=\pgfsetlinewidth{2pt}\strokeifnotempty,%
    border shrink=\pgfpageoptionborder,%
    resized width=.5\pgfphysicalwidth,%
    resized height=.5\pgfphysicalheight,%
    center=\pgfpoint{.25\pgfphysicalwidth}{.125\pgfphysicalheight}%
  }%
  \pgfpageslogicalpageoptions{8}
  {%
    border code=\pgfsetlinewidth{2pt}\strokeifnotempty,%
    border shrink=\pgfpageoptionborder,%
    resized width=.5\pgfphysicalwidth,%
    resized height=.5\pgfphysicalheight,%
    center=\pgfpoint{.75\pgfphysicalwidth}{.125\pgfphysicalheight}%
  }%
}

\IfFileExists{\jobname.aux}{
  \pgfpagesuselayout{8 on 1 boxed}[a4paper, border shrink=5mm]
  \nofiles
 }{}
}

\begin{document}
\foreach \k in {1,...,5} {
\begin{frame}
Frame \k
\end{frame}}
\end{document}

\IfFileExists位是为了避免 Daniel 提到的干扰。第一次编译时,它不会进行多页布局,但会写入辅助文件。在后续运行中,它会进行多页布局,但不会写入辅助文件。这有助于绝对定位和标签等。

以下是上述操作的输出:

带大纲的 Beamer 讲义

答案3

我更喜欢不在演示源本身中弄乱pgfpages及其设置,而是让外部工具(如)pdfnup生成我需要的(通常是各种)带或不带边框、距离、缩放比例的 x-up 版本:

\documentclass[10pt,handout,onlymath]{beamer}
\usepackage{pgffor}
\usefonttheme{serif}
\begin{document}

\foreach \x in {1,...,7} {\begin{frame}{Title \x}The frame number \x\end{frame}}

\end{document}

如果你使用以下命令进行编译:

pdflatex presentation.tex
pdfnup --no-landscape --nup 2x4 --frame true --no-tidy --delta '5mm 5mm' --scale 0.95 presentation.pdf

结果将是presentation-nup.pdf如下所示的文件:

在此处输入图片描述

这种方法的优点是它不会干扰影响 shipout 级别的其他 LaTeX 包。textpos例如,与 不兼容pgfpages,即使 beamer 用户指南中提到它是实现绝对定位的方法。

相关内容