2011-11-09 143 views
7

假设我有一个.Rnw文件,其中包含通常与R代码块混合使用的LaTex。 (我特别感兴趣的是转换.Rnw幻灯片文档,但这个问题适用于任何.Rnw文档)。现在我想将它转换为一个文件,其中包含所有R代码,所有正常情况下由LaTex生成的文本,如评论。换句话说,我想要的功能类似于Stangle()所做的功能,但我也希望将LaTex的所有文本部分转换为纯文本,并将其注释到生成的.R文件中。Sweave,R,Beamer:如何将Rnw文件中的LaTex文本转换为R注释?

这将是一个非常方便的方式来自动生成评论的R文件,这很容易在您最喜欢的语法高亮编辑器(例如emacs)中查看。对于Sweave文档来说,这听起来不是一个好主意,它只是一小段R代码的长篇文章,但当.Rnw文档实际上是幻灯片演示文稿时(例如使用beamer),文档部分开始显得有吸引力的幻灯片会为R代码做出完美的评论。

任何人有任何想法如何做到这一点?提前致谢。

回答

8

以下是一种使用regex的方法。仍然有一些问题仍然存在,我将保留一份将通过决议更新的清单。

# READ LINES FROM RNW FILE 
lines <- readLines('http://users.stat.umn.edu/~charlie/Sweave/foo.Rnw') 

# DETECT CODE LINES USING SWEAVE CHUNK DEFINITIONS 
start_chunk <- grep("^<<.*=$", lines) 
end_chunk <- grep("^@" , lines) 
r_lines  <- unlist(mapply(seq, start_chunk + 1, end_chunk - 1)) 

# COMMENT OUT NON CODE LINES AND WRITE TO FILE 
lines[-r_lines] <- paste("##", lines[-r_lines]) 
writeLines(lines, con='codefile.R') 

问题剩余:

  1. 不使用<<chunk_name>>
+0

块叫其他块内处理好您可能要定义更加复杂的正则表达式来补块的命名问题,如: '“^ <<.*>> =?$”'为起始块。但它是非常整洁的方法,无论如何...'mapply'的很好用法。 – aL3xa

+0

这是一个很好的方法,是的,很好地使用'mapply'。还有一件更好的事情就是摆脱所有'LaTeX'标记(比如'\ begin {frame}','\ frametitle',...)来产生纯粹的纯文本评论 - 至少,摆脱所有的LaTeX关键字将是一个开始。我想可以写一个'regex'来用空字符串替换LaTeX的所有保留字。这将是一个开始,但我希望有一些方法可以利用LaTeX解析器,并以某种方式捕获latex生成的*文本*。 –

+0

@ Ramnath的想法与另一个SO问题的LaTeX到文本解决方案之一相结合(http://stackoverflow.com/questions/530121/how-do-i-convert-latex-to-plain-text-ascii)可能会得到我想要的。 –

相关问题