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

我在同一个文件夹中有两个文件:chapter1.Rmd和chapter2.Rmd,包含以下内容:

chapter1.Rmd

--- title: "Chapter 1" output: pdf_document --- ## This is chapter 1. {#Chapter1} Next up: [chapter 2](#Chapter2) 

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")不会。

我为什么要这样做? 把一个巨大的文件分解成逻辑文件。

我使用了@hadley的bookdown软件包来从.Rmd中构buildlatex,但是这对于这个特殊的任务来说似乎是过度的。 有没有一个简单的解决scheme,使用我缺less的knitr / pandoc / linux命令行? 谢谢。

我不确定这正是你想要的,但是当我想把一个大的报告分解成单独的Rmd时,我通常会创build一个父Rmd,并将这些章节作为子节点。 这种方法对于新用户也很容易理解。 它不会为每个章节创build一个好的标题,但是只要包含一个toc,就可以轻松地在章节之间导航。 这样做的一个缺点是所有父/子之间的所有块名称都必须是唯一的。

report.Rmd

 --- title: My Report output: pdf_document: toc: yes --- ```{r child = 'chapter1.Rmd'} ``` ```{r child = 'chapter2.Rmd'} ``` 

chapter1.Rmd

 # Chapter 1 This is chapter 1. ```{r} 1 ``` 

chapter2.Rmd

 # Chapter 2 This is chapter 2. ```{r} 2 ``` 

build立

 rmarkdown::render('report.Rmd') 

其中产生: 我的报告

如果你想快速的创build你的子文档块:

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

这对我工作:

 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) } 

想象一下,有一个更好的解决scheme,在rmarkdown或knitr软件包中有这样的东西会很好。