不使用 [allowframebreaks] 将 \printbibliography 拆分为多个框架

不使用 [allowframebreaks] 将 \printbibliography 拆分为多个框架

我正在使用 mtheme 制作 Beamer 演示文稿,其中包含 XeLaTeX 和 Biber,并且我的参考书目非常拥挤。但是当我尝试添加时,[allowframebreaks]我收到“超出 TeX 容量”错误。我发现这是主题的一个明显错误(https://github.com/matze/mtheme/issues/20)。

我想修改\printbibliography命令,使其\framebreak每 5 个条目后插入一个。我该如何实现?

答案1

我向你介绍的是:大锤方法。

幸运的是,biblatex它允许我们用 bibmacro 挂接到参考书目条目的最后finentry,默认情况下定义为\newbibmacro*{finentry}{\finentry}

我们定义是

\renewbibmacro*{finentry}{\finentry\brf}

我们定义\brf如下

\newcounter{bibitmctr}
\newcommand{\brf}{%
  \stepcounter{bibitmctr}%
  \ifnum\value{bibitmctr}=5%
    \setcounter{bibitmctr}{0}
    \framebreak
  \fi
}

平均能量损失

\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}

\usepackage[backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}

\newcounter{bibitmctr}
\newcommand{\brf}{%
  \stepcounter{bibitmctr}%
  \ifnum\value{bibitmctr}=5%
    \setcounter{bibitmctr}{0}
    \framebreak
  \fi
}

\renewbibmacro*{finentry}{\finentry\brf}
\begin{document}
  \nocite{maron,geer,cicero,wilde,knuth:ct:a,moore,nussbaum,vizedom:related,worman,
          knuth:ct:b,knuth:ct:c,knuth:ct:d,knuth:ct:e,knuth:ct:related,massa}
  \printbibliography
\end{document}

在此处输入图片描述

答案2

没有必要对每页的 bib 条目数进行硬编码(如果五个条目放不下,则会导致页面上出现孤立的条目)。如果您愿意像 moewes 示例一样将参考书目设置在框架之外,则只需稍微调整页面几何形状即可:

\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}

\usepackage[backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}

\begin{document}
\begin{frame} a normal frame \end{frame}

\topskip=2cm\advance\textheight by -2cm\enlargethispage{-1cm}
  \nocite{maron,geer,cicero,wilde,knuth:ct:a,moore,nussbaum,vizedom:related,worman,
          knuth:ct:b,knuth:ct:c,knuth:ct:d,knuth:ct:e,knuth:ct:related,massa}

  \printbibliography

\end{document}

相关内容