如果您想将 R 脚本的输出导出到 latex 并创建 pdf 文档,您可以使用 RStudio 中的 Knitr 包。但我想这只是为了获得短期结果而采取的良好做法。
如果我想写一本书、一篇 1000 页的论文该怎么办?
你该如何做相反的事情?
我的意思是,我可以在乳胶文件中包含 R 代码并直接从 TexStudio+LaTex/LuaTex 运行它吗?(为了在 pdf 中获取数值结果和图形)。
如何?
新功能:有人说可以使用 knitr 生成大型文档。即使可以,我认为从特定平台(如 TexStudio)创建 LaTex 文档更舒适、更灵活。
那么,最佳做法是什么?混合两种方法?:使用 Knitr 生成文档的各个部分,然后使用 TexStudio 进行混合和修改?怎么做?
有类似的包列表旨在正确显示代码但不能运行它。
答案1
在 ConTeXt 中,您可以使用筛选此类任务的模块。事实上,过滤器模块是 ConTeXt MkII 模块的泛化先生,它是专门为您的要求而设计的。
但是,使用过滤器模块可以轻松复制任何语言的功能,因此没有 MkIV 版本的先生。
这是一个简单的例子:
\usemodule[filter]
\defineexternalfilter
[R]
[
filtercommand={R CMD BATCH -q --save --restore \externalfilterinputfile\space \externalfilteroutputfile},
output=\externalfilterbasefile.out,
readcommand=\typefile,
read=no,
cache=yes,
]
\starttext
\startR
ushape <- c(rexp(500000), 12-rexp(500000))
pdf("ushape.pdf")
par(mfrow=c(1,2))
hist(ushape)
plot(density(ushape), main="Density")
dev.off()
\stopR
\startplacefigure[location=here, title={Output from R}]
\externalfigure[ushape.pdf][height=0.5\textheight]
\stopplacefigure
\stoptext
这使
请注意,文件已被缓存,因此后续运行非常快。
答案2
但我猜这只是为了短期结果而采取的一种好做法。
我认为这是一个错误的前提。我从来没有写过 1000 页的书,但我写过几份统计报告,有些接近 100 页,只有两栏,只有几段 LaTeX 文本,但有几十张表格 (xtables)、几十种不同类型的图表和几十个统计结果,所有这些都是由 R 块在一个文件中生成的,存在与较短文档相同的问题。
有了这样的经验,对我来说,规则恰恰相反:文档越大,Sweave
/knitr
块的便利性就越高(使用 Rstudio、LyX 或 TeXworks,这不是问题)。
如果预览中的编译时间太长,请尝试使用cache=TRUE
并knitr
考虑尽可能主要处理最终文档的子集。但是,我从来不需要这些解决方法,因为编译时间只够眼睛休息一下。