Нет, но это не так уж сложно построить из source(file, echo=TRUE)
. С помощью приведенных ниже функций следующая функция создает файл LaTeX. Попробуйте!
latexR("code.R")
Я пробовал это со следующим code.R
файлом:
c("hi",
"there")
1+1
a <- 5
plot(1:a) # a plot
# hi there
data.frame(a=1:5, b=LETTERS[1:5])
Ниже приведены функции. Метод latex
S3 - это способ заставить его выводить специальное форматирование LaTeX для данного типа объекта, в противном случае он просто выводит дословно. Он также устанавливает графическое устройство по умолчанию для сохранения в формате PDF и вывода имени файла.
latex <- function(obj) {
UseMethod("latex")
}
latex.data.frame <- function(obj) {
print(xtable(obj), floating=FALSE)
}
latex.default <- function(obj) {
cat("\\begin{Soutput}\n")
if (isS4(obj))
methods::show(obj)
else print(obj)
cat("\\end{Soutput}\n")
}
fig <- function(...) {
i <<- i+1
n <- paste(nam, formatC(i, width=3, flag="0"), sep="-")
f <- paste(n, "pdf", sep=".")
cat("\\includegraphics{", n, "}\n",sep="")
pdf(file=f, ...)
}
stopfig <- function() { if(dev.cur()!=1) dev.off() }
latexR <- function(file, base=sub(".R","", file)) {
eval.with.vis <- function(expr, envir = parent.frame(), enclos = if (is.list(envir) ||
is.pairlist(envir)) parent.frame() else baseenv())
.Internal(eval.with.vis(expr, envir, enclos))
on.exit(sink())
sink(paste(base,"tex",sep="."))
cat("\\documentclass{article}\n\\usepackage{Sweave}\n\\begin{document}\n")
environment(fig) <- list2env(list(i=0, nam=base))
options(device=fig)
exprs <- parse(file)
srcrefs <- attr(exprs,"srcref")
lastshown <- 0
for(i in seq_along(exprs)) {
srcref <- srcrefs[[i]]
dep <- getSrcLines(attr(srcref, "srcfile"), lastshown+1, srcref[3L])
lastshown <- srcref[3L]
cat("\\begin{Sinput}\n", paste(dep, collapse="\n"), "\n\\end{Sinput}\n", sep="")
yy <- eval.with.vis(exprs[i])
stopfig()
if(yy$visible) latex(yy$value)
}
cat("\\end{document}")
}