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

在Knitr/RMarkdown中准备的Beamer演示文稿中截断的参考,r,latex,knitr,r-markdown,beamer,R,Latex,Knitr,R Markdown,Beamer,我目前正在RStudio中准备一个演示文稿(使用RMarkdown和Knitr,输出到Beamer演示文稿),其中有很多参考资料 我使用的是一个非常典型的YAML头: --- title: "Title" author: "Me" date: "February 27th, 2016" output: beamer_presentation csl: ../../apa.csl bibliography: ../../RefenceDesk.bib --- 本演示文稿进行了编译,引用按

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

我使用的是一个非常典型的YAML头:

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

本演示文稿进行了编译,引用按其应有的方式显示,但不幸的是,它们都出现在一张幻灯片上(实际上从页面上消失)。有没有办法让参考资料出现在多张幻灯片上?

{.allowframebreaks}
是beamer中多幻灯片参考书目的解决方案。它与常规pandoc模板一起开箱即用(请参阅)。但是,
knitr
有一个设置,通过在其beamer模板中重新定义
\widowpopulations
来阻止它。如果使用
keep_tex:true
检查
.tex
文件,则可以验证这一点

在我看来,这是一个错误。一个快速修复方法是将
\widowpopulations
重置为其默认值。这可以在您的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在评论中所说:

对我来说,它不适用于##引用{.allowframebreaks},但它适用于#引用{.allowframebreaks}

我想指出的是,显然,要使参考幻灯片发挥作用,您必须创建最后一张幻灯片,其标题级别与YAML部分的
slide\u level:__
设置的标题级别相同

因此,用户应设置以下选项之一:

  • #引用{.allowframebreaks}。对于那些使用
    幻灯片的人:1
    ,或
  • ##引用{.allowframebreaks}。对于使用
    幻灯片的人,级别:2
    ,或
  • ###引用{.allowframebreaks}。对于那些使用
    幻灯片\u级别:3
    等的人

有趣!昨晚我发现了
{.allowframebreaks}
,但它什么也没做。我刚刚尝试添加头includes,但它实际上似乎没有改变.tex文件中的值。编译后,如果我打开.tex文件,它仍然会显示
\widow1 10000
。对我来说,它不适用于
##引用{.allowframebrakes}
,但它适用于
#引用{.allowframebrakes}
。对我来说是有效的!如果有人收到natbib引起的错误
!LaTeX错误:\newblock undefined.
然后只添加这一行
\newcommand{\newblock}{}
如果有人因为拼写错误而失败,那么它是{.allowframebreaks}而不是{.allowframebrakes}。是否可以为所有幻灯片(所有级别)设置allowframebreaks?是的,是的。只需在每个幻灯片标题后附加选项{.allowframebreaks}。(可能有一种方法可以更改所有幻灯片的yaml选项,但我不知道。