使用knitr处理Rnw文档

Rnw文档是保存了R代码的Latex文档。人们希望Latex中的R代码可以自动运行, 并将运行结果, 复制到Latex代码中。 同时, 给出绘制的图形等。

例如以下的代码, 是一篇Rnw文档的内容, 将其拷贝, 粘贴到记事本中, 另存为test.Rnw文件即可。 注意编码要选ANSI。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
\documentclass[CJK]{cctart}
\usepackage{verbatim}
\title{中文文章里面如何使用knitr? }
\author{张金龙}
\begin{document}
\maketitle
在本例子中, 我们将演示在R中, 如何调用 hclust() 并且将结果写入 LaTeX{} 文件中:
<<>>=
x<-c(1,2,6,8,11)
dim(x)<-c(5,1)
d<-dist(x)
d
hc<-hclust(d, "single")
dend<-as.dendrogram(hc)
@
绘制的树状图:, 目前,kintr程序包在处理Rnw文档时, 不允许注释中有中文
begin{center}
<<fig=TRUE,echo=FALSE>>=
par(mfrow = c(2, 2),mar = c(4,3,1,2))
plot(dend)
plot(dend, nodePar=list(pch = c(1,NA),
cex=0.8, lab.cex=0.8), type = "t",
center=TRUE)
plot(dend, edgePar=list(col = 1:2,
lty = 2:3), dLeaf=1,
edge.root = TRUE)
plot(dend, nodePar=list(pch = 2:1,
cex=.4*2:1, col=2:3),
horiz=TRUE)
@
\end{center}
\end{document}

在Rnw文档中, R代码需要放在 <<fig=TRUE,echo=TRUE>>=@ 之间。 其中的代码一定要可以执行。 在后续处理中,R的Sweave函数和knitr程序包中的knitr函数, 都能够生成相应的tex文件, 以及所需要包含的pdf图形。

fig=TRUE 表示, 要包括代码生成的图形;
echo=TRUE 表示, 要包括运行结果所生成的代码。

Sweave函数就是为了处理Rnw文件而生的。 但是Sweave在处理中文的Latex文档时, 需要设定的参数很多, 并且常常出错。幸运的是,我们还有谢益辉编写的knitr程序包。

kintr在处理Rnw文档非常方便。 假设Rnw文档放在

C:/Users/Jinlong/Desktop/Sweave

文件夹之下,名为test.Rmw, 则使用以下R代码:

1
2
3
setwd("C:/Users/USER/Desktop/Sweave") ### 转换到工作目录,
library(kintr) ###导入kintr程序包
knit("test.Rnw")

即可在该目录下, 生成.tex文档, 以及需要包含的文件。

用TexWorks编译成pdf文档即可。

注意:kintr程序包在处理Rnw文档时,R代码的注释中不允许注释中有中文