如何将两个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软件包中有这样的东西会很好。