使用knitr创建多页pdf文件并将其拆分为多个文件

时间:2016-02-12 11:37:13

标签: r pdf report latex knitr

我正在创建一个由多个页面创建的报告,这些报告需要是不同的文件。

我制作了一个脚本,可以从一个rmd文件迭代创建许多pdf文件。但是这个过程很长很奇怪,有时这个过程会因为权限错误而随机阻塞(仅在Windows上,在我的个人mac上,相同的脚本没有问题)。

我注意到这个过程的很长一部分是创建pdf文件,而.rmd本身的渲染速度非常快,即使对于长报告也是如此。所以我想创建一个包含不同页面中所有报告的长PDF文件,然后将它们分开。

所以我的问题是:

  • 如何在乳胶中强制新页面?
  • 如何在R?
  • 中逐页拆分pdf

由于

1 个答案:

答案 0 :(得分:1)

你可能有一个解决方案,但我面临同样的问题,也可能是其他人。我正在使用.Rnw文件和.R文件。顺便说一下,这是我创建的问题: How to create multiple PDFs with different contents from a single data frame?

可以使用以下代码强制.Rnw文件中的新页面:\newpage//

要将数据框拆分为多个PDF,我已经使用了以下for循环,但它没有像预期的那样工作。牢记这一点!我还尝试创建嵌入在.Rnw文件中的全局变量。然后在for循环中更改这些变量。 这是一个例子:

for(i in 1:nrow(mtcars)) {
  g_title <- rownames(mtcars)[i]
  knit2pdf(input  = "template.Rnw", output = paste0("output\\", g_title, ".pdf"), quiet = TRUE)
}

修改

我解决了这个问题。实际上它非常简单,因为你可以全局使用函数/方法和变量。因此,您可以定义一个变量,并将其嵌入您的Sweave文件(.Rnw)中。

正如您在此示例中所看到的,我使用来自mtcars数据字段的汽车名称来创建多个PDF。我只是在for循环中创建多个PDF,我在其中更改变量g_title,然后在Sweave文件中使用该变量。

main.R

for(i in 1:nrow(mtcars)) {
  g_title <- rownames(mtcars)[i]
  knit2pdf(input  = "main.Rnw", 
           output = paste0("output\\", g_title, ".pdf"), 
           quiet  = FALSE, 
           envir  = parent.frame())
}

template.Rnw

\documentclass{article}
\usepackage[ngerman]{babel}

\begin{document}
\begin{titlepage}
  Titlepage
\end{titlepage}

\tableofcontents
\newpage

\section{Topic 1}
\newpage

\section{Topic 2}    

\end{document}