knitr / rmarkdown / Latex:如何交叉引用2个不同pdf文件中的图形和表格?

时间:2018-09-27 07:25:19

标签: latex r-markdown pandoc bookdown

我正在尝试使用rmarkdown在RStudio中完全撰写科学文章和相关的补充材料。

很显然,本书是在文件(https://stackoverflow.com/a/38884378/576684)之间进行交叉引用的一种方式,但是我也希望能够在另一个pdf中引用一个pdf中产生的图形。

尽管我的乳胶随着时间的流逝已经很生锈,但我认为可以通过以下方式实现:

  1. 第一次使用rmarkdown :: render()编译文章tex和SuppMat tex
  2. 从命令行编译这些tex文件,以便将相应的.aux文件与它们的引用一起保存(丢失的引用目前不会解决)
  3. 另一次从命令行重新编译2 tex文件,现在应该解析所有引用

这样做是否合理?我可以忽略一些更简单的东西吗? 无论如何,它都需要:

  • 每个pdf文件中的数字编号不同(由https://stackoverflow.com/a/51337664/576684覆盖)
  • 为防止rmarkdown破坏.aux文件(pandoc不允许这样做,因此需要使用独立的乳胶创建aux文件)
  • 告诉乳胶(如果找到)使用其他.aux文件(可能使用YAML标头中的header-includes:)。我该如何实现?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

事实证明,xr软件包是一种解决方法:https://texblog.org/2016/08/23/adding-references-from-an-external-file/

所以这在R中有效:

rmarkdown::render("myarticle_ms.Rmd", 
                  bookdown::pdf_book(base_format=rticles::plos_article),
                  clean=FALSE)

rmarkdown::render("myarticle_SM.Rmd", 
                  bookdown::pdf_book(base_format=rticles::plos_article),
                  clean=FALSE)

tinytex::pdflatex("myarticle_ms.tex", clean=FALSE)
tinytex::pdflatex("myarticle_SM.tex", clean=FALSE)

tinytex::pdflatex("myarticle_ms.tex")
tinytex::pdflatex("myarticle_SM.tex")

在myarticle_ms.Rmd的YAML头中包含以下内容(以及对应的一个SuppMat文件头):

header-includes:
  \usepackage{xr} \externaldocument{myarticle_SM}

希望这会使其他一些人的生活更轻松:)