在 Rstudio 中合并 rmarkdown 生成的 latex 文档,而无需手动删除序言

Combine rmarkdown generated latex documents in Rstudio without having to manually delete preambles

问题:

我有几个 Rmarkdown 文档代表我论文的不同部分(例如第 1 章结果,第 2 章结果),我想将这些文档的编织乳胶版本与其他 TeX 文件组合成一个主 TeX 'thesis' 文档。问题是,当编织成 PDF 并将 TeX 文件包含在主 TeX 文档中时,Rstudio auto-generates 一堆序言最终与我在 master.TeX 文档中的序言发生冲突。

不太理想的解决方法:

我一直在解决这个问题,方法是在将针织输出包含到 master.tex 文件之前手动删除此序言。

目前我的工作流程如下:

问题:

我想将 Rmd 转换为 LaTeX,而不必在将编织的 TeX 文件包含到主 TeX 文件之前手动删除序言。我该怎么做?

摆动不是一种选择:

我确信我可以通过使用 Sweave 来实现这一点,但是我喜欢 Rmarkdown 提供的输出格式的灵活性:我可以编成 html 并在我写作时在浏览器中查看,可以快速查看自己的工作进度,确保没有bug,还可以选择knit to word分享给只在word工作的主管。然后,当我准备好将所有内容编译到我的主 LaTeX 文档中进行打印时,我可以 select 在 Rstudio 中编织成 PDF 以获得乳胶输出。

我想出了一个解决方法:

create_latex <- function(f){
  knitr::knit(f, 'tmp-outputfile.md');
  newname <- paste0(tools::file_path_sans_ext(f), ".tex")
  mess <- paste('pandoc -f markdown -t latex -p -o', shQuote(newname),"tmp-outputfile.md")
  system(mess)}

上面的函数将 Rmd 文件作为输入,将文件编入 md,然后通过从命令行调用 pandoc 将其转换为 TeX

秘密成分在于 pandoc 调用...使用 Rstudio 编织时,Rstudio 在编译 pdf 时必须调用 pandoc 独立 -s 标志。这会生成一个 'standalone' 文档,即包含乳胶序言的文档。当你想查看PDF时,这显然是必需的,但与我的需求冲突。

我正在寻求使用 knitr 从 Rmd 生成乳胶 'fragment',稍后可以将其合并到我的主乳胶文件中。所以解决方案只是创建一个省略 -s 独立标志的 pandoc 命令行调用。我通过在上述函数中使用 system() 从 R 调用 pandoc 来实现这一点。

希望这可以帮助遇到此问题的任何人,但如果我能够更改 Rstudio 的设置以避免打扰这个 hack,那就太好了。欢迎提出建议和反馈。

这是一个使用 LaTeX 包的更简单的解决方案 docmute

您的主要 Rmarkdown 文档(例如,main.Rmd)应该加载 docmute 包并包含您的其他文件(例如,part1.Rmdpart.Rmd),一次编织并位于同一目录中,与 \input\include 像这样:

---
title: "Main"
output: pdf_document 
header-includes:
- \usepackage{docmute}
---
# Part 1
\input{part1.tex}
# Part 2
\input{part1.tex}

然后你的其他文件只需要在 YAML 前面有一个 keep_tex 参数。像这样:

---
title: "Part 1"
output: 
  pdf_document:
    keep_tex: true
---

Something

还有这个:

---
title: "Part 2"
output: 
  pdf_document:
    keep_tex: true
---

Something else

那么你需要做的就是在main.Rmd之前编织part*.Rmd,所有内容都会出现在main.texmain.pdf中。 docmute 包从输入 .tex 文件中删除了前导码,因此您需要确保在输入文件 \begin{docunent} 之前您需要的任何内容也在 main.Rmd.[= 中29=]