Knitr/RMarkdown 中准备的 Beamer 演示文稿中的参考文献被截断

References Truncated in Beamer Presentation prepared in Knitr/RMarkdown

我目前正在 RStudio 中准备一个演示文稿(使用 RMarkdown 和 Knitr,输出到 Beamer 演示文稿),其中有很多参考资料。

我使用的是非常典型的 YAML header:

---
title: "Title"
author: "Me"
date: "February 27th, 2016"
output: 
  beamer_presentation
csl: ../../apa.csl
bibliography: ../../RefenceDesk.bib 
---

此演示文稿已编译并且参考文献按应有的方式出现,但不幸的是它们都出现在一张幻灯片上(实际上 运行 离开了页面)。有没有办法让参考文献出现在多张幻灯片上?

{.allowframebreaks} 是 beamer 中多幻灯片参考书目的解决方案。它与常规 pandoc 模板开箱即用(参见 )。但是,knitr 有一个设置可以阻止它,通过在其 beamer 模板中重新定义 \widowpenalties。您可以验证是否使用 keep_tex: true.

检查 .tex 文件

在我看来,这是一个错误。一个快速的修复方法是将 \widowpenalties 重置为其默认值。它可以在你的 yaml 前端完成:

---
title: Title
header-includes:
  - \widowpenalties 1 150
output: 
  beamer_presentation
---

然后,您可以这样注明参考部分:

## References {.allowframebreaks}

虽然这超出了使用常规 pandoc 引文模板的范围,但我发现了另一种可用于将参考文献跨幻灯片放置的方法,但它依赖于 natbib 引文包。

在 YAML 前端,我添加了:

---
title: "Title"
output: 
  beamer_presentation:
    citation_package: natbib
bibliography: ../../RefenceDesk.bib 
biblio-style: "apalike"
---

参考幻灯片没有标题,我似乎无法调整字体大小(通过在 .Rmd 文件末尾使用 \scriptsize),但至少它们看起来连贯.

编辑:为了简洁,我删除了 csl: ../../apa.csl 行,因为 natbib 不需要它。

正如上面@David 在评论中所说:

For me it didnt work with ## References {.allowframebreaks} but it worked out with # References {.allowframebreaks}.

我想指出的是,显然要使参考幻灯片正常工作,您必须创建最后一张幻灯片,其标题级别与 slide_level: __YAML节。

因此,用户应设置以下其中一项:

  • # 引用 {.allowframebreaks}。对于使用 slide_level: 1
  • 的用户
  • ## 引用 {.allowframebreaks}。对于使用 slide_level: 2
  • 的用户
  • ### 引用 {.allowframebreaks}。对于那些使用 slide_level: 3 等等的人...