使用knitr和texi2dvi编译多个PDF

时间:2015-11-02 20:42:15

标签: r latex knitr

我的目标是使用knitr为与数据集中每个因子级别相关的数据生成单独的PDF。但是,我遇到了各种错误(包含在下面),我无法编译生成的.tex文件。 我已尝试使用主题here以及Yihui的GitHub代码here上的主要SO帖子进行故障排除,但我仍未获得最终产品。 I怀疑可能还有其他用户在查看列出的资源后仍然在努力做到这一点。

这是一个虚拟示例,我一直在尝试隔离我在更长的脚本中遇到的错误。使用“钻石”数据集:

# test.Rnw ----------------------------------------------
\documentclass[10pt]{article}
\usepackage[margin=1.15 in]{geometry}
\begin{document}

<<setup, include=FALSE, results='hide', cache=FALSE>>=
library(ggplot2)
opts_chunk$set(echo=FALSE, warning = FALSE, message = FALSE, cache = FALSE, error = FALSE,
           fig.path = paste('~/Desktop/figure/diamonds', x, sep = '')))
@

<<loaddata, echo=FALSE, message=FALSE>>=
slice <- diamonds[ diamonds$cut == x,]
@

<<test_image>>==
mybars = ggplot(slice) + 
  geom_bar(aes(x = color, stat = "bin"))
@

<<print_image, results='asis'>>==
mybars 
@
\end{document}

# dispatcher.R -------------------------------------------
library(knitr)
diamonds = diamonds[diamonds$cut != "Very Good",]
# I did this ^ just in case the space caused problems in file paths. 

lapply(unique(diamonds$cut), function(x)
  knit("~/Desktop/test.Rnw",
       output=paste('~/Desktop/', x, '.tex', sep="")))

lapply(unique(diamonds$cut), function(x)  
  tools::texi2pdf(paste('~/Desktop/test/diamonds', x, '.tex',sep=""),
  clean = TRUE, quiet = TRUE, texi2dvi =  getOption("/usr/bin/texi2dvi")))

当我运行dispatcher.R时,我会获得每个剪切级别的.tex文件和图像(PDFS)。那很棒!但是,我仍然没有得到完全编译的PDF。这很重要,因为需要将具有多个块,文本,图像等的文档编译成一个PDF文档。

我也尝试使用knit2pdf,但结果相同:图像,.tex文件,没有编译的PDF。我的R控制台显示通常的编译消息,但PDF无处可寻。

for(x in unique(diamonds$cut)){
  knit2pdf("~/Desktop/test.Rnw", 
           output=paste0('~/Desktop/diamonds', x, '.tex'))
}


processing file: ~/Desktop/test.Rnw
  |.......                                                          |  11%
  ordinary text without R code

  |..............                                                   |  22%
label: setup (with options) 
List of 3
 $ include: logi FALSE
 $ results: chr "hide"
 $ cache  : logi FALSE

  |......................                                           |  33%
  ordinary text without R code

  |.............................                                    |  44%
label: loaddata (with options) 
List of 2
 $ echo   : logi FALSE
 $ message: logi FALSE

我做错了什么?这有足够的信息吗?

1 个答案:

答案 0 :(得分:0)

我原帖的问题主要与将乳胶指向.Rnw文件和opts_chunks()中的fig.path的路径问题有关。以下答案对我有用,我已经能够将其用作其他项目的模板。

#test.R
library("knitr")
diamonds = diamonds[diamonds$cut != "Very Good",]

for(x in unique(diamonds$cut)){
  setwd("/Users/me/Desktop/thing")
  knit2pdf("test.Rnw", 
           output=paste0(x, '.tex'))
}

%test.Rnw
\documentclass{article}
\usepackage[margin=.5in, landscape]{geometry}
\begin{document}

TEST TEXT! 

<<setup, include=FALSE, results='hide', cache=FALSE>>=
opts_chunk$set(echo=FALSE, warning = FALSE, message = FALSE, cache = FALSE, error = FALSE,
               fig.path = paste0('figure/', x))
library(ggplot2)
@

<<loaddata, message=FALSE>>=
slice <- diamonds[ diamonds$cut == x,]
head(slice)
@

<<test_image, echo = FALSE>>==
mybars = ggplot(slice) + 
  geom_bar(aes(x = color, stat = "bin"))
@

<<printplotscreen, results='asis'>>==
mybars
@

\end{document}