【问题标题】:Create a multipage pdf file with knitr and split it in many files使用knitr创建一个多页pdf文件并将其拆分为多个文件
【发布时间】:2016-02-12 11:37:12
【问题描述】:

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

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

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

所以我的问题是:

  • 如何在 Latex 中强制新建页面?
  • 如何在 R 中按页拆分 pdf?

谢谢

【问题讨论】:

  • 您在哪个操作系统上进行拆分?
  • 应该可以在 windows 和 mac 上工作
  • 其实有一个类似的问题。我有一个大的 PDF 文件。我想每页拆分。我看过 pdftools 包。但渲染功能不适用于 Windows。你找到解决办法了吗?
  • 很遗憾没有……
  • @Arcoutte 添加了解决方案。

标签: r pdf report latex knitr


【解决方案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())
}

模板.Rnw

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

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

\tableofcontents
\newpage

\section{Topic 1}
\newpage

\section{Topic 2}    

\end{document}

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 2018-11-20
    • 2022-12-19
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多