如何将两个 RMarkdown (. Rmd)文件组合成一个输出?

我在同一个文件夹中有两个文件: Chapter1.Rmd 和 Chapter2.Rmd,它们的内容如下:

第一章 RMD

---
title: "Chapter 1"
output: pdf_document
---


## This is chapter 1. {#Chapter1}


Next up: [chapter 2](#Chapter2)

第二章 RMD

---
title: "Chapter 2"
output: pdf_document
---


## This is chapter 2. {#Chapter2}


Previously: [chapter 1](#Chapter1)

我如何编织这些,使他们结合成一个单一的 pdf 输出?

当然,render(input = "chapter1.Rmd", output_format = "pdf_document")的工作完美,但 render(input = "chapter1.Rmd", input = "chapter2.Rmd", output_format = "pdf_document")不。

Why do I want to do this? To break up a 大型文件 into logical files.

我用@hadley 的 记账软件包来制造乳胶。Rmd,但是对于这个特定的任务来说,这似乎有些过头了。是否有一个简单的解决方案,使用 knyr/pandoc/linux 命令行,我错过了吗?谢谢。

38891 次浏览

这对我很有效:

Rmd_bind <-
function(dir = ".",
book_header = readLines(textConnection("---\ntitle: 'Title'\n---")))
{
old <- setwd(dir)
if(length(grep("book.Rmd", list.files())) > 0){
warning("book.Rmd already exists")
}
write(book_header, file = "book.Rmd", )
cfiles <- list.files(pattern = "*.Rmd", )
ttext <- NULL
for(i in 1:length(cfiles)){
text <- readLines(cfiles[i])
hspan <- grep("---", text)
text <- text[-c(hspan[1]:hspan[2])]
write(text, sep = "\n", file = "book.Rmd", append = T)
}
render("book.Rmd", output_format = "pdf_document")
setwd(old)
}

想象一下有一个更好的解决方案,如果在降价或针织包装中有这样的东西就好了。

2018年8月更新: 这个答案是在 记账出现之前写的,记账是一种更强大的基于 Rmarkdown 的书籍写作方法。看看@Mikey-Harper 的 回答中最小的 记账例子!

当我想把一个大的报告分解成单独的 Rmd 时,我通常会创建一个父 Rmd,并将这些章节作为子节包含进来。这种方法对于新用户来说很容易理解,并且如果您包含一个目录(toc) ,就很容易在章节之间导航。

报告

---
title: My Report
output:
pdf_document:
toc: yes
---


```{r child = 'chapter1.Rmd'}
```


```{r child = 'chapter2.Rmd'}
```

第一章 Rmd

# Chapter 1


This is chapter 1.


```{r}
1
```

第二章 RMD

# Chapter 2


This is chapter 2.


```{r}
2
```

建造

rmarkdown::render('report.Rmd')

结果是: My report

如果您想要快速地为子文档创建块:

rmd <- list.files(pattern = '*.Rmd', recursive = T)
chunks <- paste0("```{r child = '", rmd, "'}\n```\n")
cat(chunks, sep = '\n')
# ```{r child = 'chapter1.Rmd'}
# ```
#
# ```{r child = 'chapter2.Rmd'}
# ```

我建议人们使用 记账包从多个 R Markdown 文件创建报告。它添加了许多有用的特性,比如交叉引用,这对于较长的文档非常有用。

改编自 @Eric的示例,下面是 bookdown设置的最小示例。主要的细节是主文件必须被称为 index.Rmd,并且必须包含额外的 YAML 行 site: bookdown::bookdown_site:

索引 Rmd

---
title: "A Minimal bookdown document"
site: bookdown::bookdown_site
output:
bookdown::pdf_document2:
toc: yes
---

01-序言 Rmd :

# Chapter 1


This is chapter 1.


```{r}
1
```

02-序言 Rmd :

# Chapter 2


This is chapter 2.


```{r}
2
```

If we Knit the index.Rmd 记账 will merge all the files in the same directory in alphabetical order (this behaviour can be changed using an extra _bookdown.yml file).

enter image description here

一旦您熟悉了这个基本设置,就可以很容易地使用其他配置文件(比如 _bookdown.yml_output.yml)来自定义簿记文档和输出格式

进一步阅读