参考文献后,Pandoc插入附录

luc*_*ano 27 markdown r pandoc knitr

我在R中使用knitr包和pandoc将.Rmd文件转换为PDF.Pandoc链接到.bib文件并自动在PDF末尾插入参考书目.bib文件中的条目如下所示,取自http://johnmacfarlane.net/pandoc/demo/biblio.bib:

@Book{item1,
        author="John Doe",
        title="First Book",
        year="2005",
        address="Cambridge",
        publisher="Cambridge University Press"
  }

@Article{item2,
         author="John Doe",
         title="Article",
         year="2006",
         journal="Journal of Generic Studies",
         volume="6",
         pages="33-34"
}
Run Code Online (Sandbox Code Playgroud)

为了构建我的参考书目,我使用以下函数,取自:http://quantifyingmemory.blogspot.co.il/2013/02/reproducible-research-with-r-knitr.html

knitsPDF <- function(name) {
  library(knitr)
  knit(paste0(name, ".Rmd"), encoding = "utf-8")
  system(paste0("pandoc -o ", name, ".pdf ", name, ".md --bibliography /Users/.../Desktop/test.bib --csl /Users/.../Desktop/taylor-and-francis-harvard-x.csl"))
}
Run Code Online (Sandbox Code Playgroud)

我的.Rmd文件的内容是:

This is some text [@item1]

This is more text [@item2]

# References
Run Code Online (Sandbox Code Playgroud)

输出的PDF看起来像这样:

在此输入图像描述

如果我尝试插入附录,则引用仍会在文档末尾打印,如下所示:

在此输入图像描述

如何在引用后插入附录?

sco*_*coa 39

使用较新的pandoc版本,您可以使用source指定参考书目的位置<div id="refs"></div>

This is some text [@item1]

This is more text [@item2]

# References

<div id="refs"></div>

# appendix
Run Code Online (Sandbox Code Playgroud)

  • 这似乎对我不起作用。我的 Rmarkdown 文档的输出格式是 `bookdown::pdf_document2`。 (2认同)

Joh*_*ane 13

最终引用处理将改变,以便可以将引用放在任何你喜欢的地方(https://github.com/jgm/pandoc/issues/771),但是现在没有简单的方法可以做到这一点.

如此处所示,您可以将附录放在单独的文件中,使用pandoc将其转换为LaTeX片段,然后使用该--include-after-body标志包含该片段.它将在参考书目之后出现.

  • 很高兴这就是它.我怀疑Yihui已经为编织者设置了一个后端,并用它来窃取人们的数据. (3认同)
  • 但是,正如 NOON SILK 在您引用的链接中所说,“如果附录引用了参考文献,这将不起作用。” :-( (2认同)
  • 现在已经实施了,参见。https://pandoc.org/MANUAL.html#placement-of-the-bibliography 您还可以参考 /sf/answers/4075873651/ 的示例。 (2认同)

ncr*_*aig 6

在处理 Rmarkdown 文档时,在要放置引文的位置输入以下文本。它可以放置在文档的任何部分,以便根据需要添加其他材料(例如附录)。该方法依赖于 pandoc 的受防护的 div,它将在 Rmarkdown 中工作。

\n
::: {#refs}\n:::\n
Run Code Online (Sandbox Code Playgroud)\n

上述代码不应位于 R 代码块中,而应单独放置在空行中。一旦 pandoc 通过 kitter 处理,该代码将产生与<div id="refs"></div>@soca 的答案中提到的相同的结果。这两行代码始终允许将引用精确放置在文档的任何部分中。

\n

在下面的示例中,引用首先放置在同名标题下,而文档中的所有代码块随后放置在代码附录中。这是放置在 Rmarkdown 中的 pandoc fenced div,可用于生成下面的图像。

\n
# References\n::: {#refs}\n:::\n\n# Appendix A: R Code\n```{r ref.label=knitr::all_labels(), echo=TRUE, eval=FALSE}\n\n```\n
Run Code Online (Sandbox Code Playgroud)\n

如果 yaml frontmatter 中标识了 .bib 文件,则前面的 Rmarkdown 会生成类似于以下内容的输出:\n在此输入图像描述

\n

有用的网址:

\n\n