mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 19:07:45 +00:00
More elegant knitr support and bug fix
Implement a more simple and elegant integration of the R package knitr. Now, lyxknitr.R does not need to move or copy files at all. This also fixes a bug: when /tmp was on a different file system (e.g. encrypted home), lyxknitr.R failed to move files to /tmp because it relied on R's 'file.rename' function, which in turn relied on the rename function in <stdio.h>, which was failing with the EXDEV errno. Patch from Yihui Xie.
This commit is contained in:
parent
e55aa4359f
commit
f7928f48a6
@ -182,7 +182,7 @@ status collapsed
|
|||||||
|
|
||||||
\begin_layout Plain Layout
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
http://yihui.github.com/knitr
|
http://yihui.name/knitr
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\end_inset
|
\end_inset
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#\DeclareLyXModule[knitr->latex]{Rnw (knitr)}
|
#\DeclareLyXModule[knitr->latex]{Rnw (knitr)}
|
||||||
#DescriptionBegin
|
#DescriptionBegin
|
||||||
#Uses the knitr package in R for dynamic report generation. This R package has to be installed for this module to work: install.packages('knitr'). Note it depends on R >= 2.14.1.
|
#Uses the knitr package in R for dynamic report generation. This R package has to be installed for this module to work: install.packages('knitr'). Note it depends on R >= 2.14.1.
|
||||||
#For more info see http://yihui.github.com/knitr
|
#For more info see http://yihui.name/knitr
|
||||||
#DescriptionEnd
|
#DescriptionEnd
|
||||||
#Category: literate
|
#Category: literate
|
||||||
#Excludes: lilypond | sweave
|
#Excludes: lilypond | sweave
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
## author Yihui Xie
|
## author Yihui Xie
|
||||||
|
|
||||||
## knitr is an alternative package to Sweave, and has more features
|
## knitr is an alternative package to Sweave, and has more features
|
||||||
## and flexibility; see https://yihui.github.com/knitr
|
## and flexibility; see https://yihui.name/knitr
|
||||||
|
|
||||||
## Rscript $$s/scripts/lyxknitr.R $$p$$i $$p$$o $$e $$r
|
## Rscript $$s/scripts/lyxknitr.R $$p$$i $$p$$o $$e $$r
|
||||||
## $$p the path of the output (temp dir)
|
## $$p the path of the output (temp dir)
|
||||||
@ -31,18 +31,7 @@ options(encoding = .cmdargs[3])
|
|||||||
## can put your data files there and functions like read.table() can
|
## can put your data files there and functions like read.table() can
|
||||||
## work correctly without specifying the full path
|
## work correctly without specifying the full path
|
||||||
setwd(.cmdargs[4])
|
setwd(.cmdargs[4])
|
||||||
|
opts_knit$set(root.dir = getwd())
|
||||||
|
|
||||||
## copy the Rnw file to the current working directory if it does not exist
|
|
||||||
.tmp.file = tempfile(); .rnw.file = basename(.cmdargs[1])
|
|
||||||
.rnw.exists = file.exists(.rnw.file)
|
|
||||||
if (.rnw.exists) file.rename(.rnw.file, .tmp.file)
|
|
||||||
file.copy(.cmdargs[1], '.')
|
|
||||||
## run knit() to get .tex or .R
|
## run knit() to get .tex or .R
|
||||||
knit(.rnw.file, tangle = 'tangle' %in% .cmdargs)
|
knit(.cmdargs[1], output = .cmdargs[2], tangle = 'tangle' %in% .cmdargs)
|
||||||
|
|
||||||
setwd(.cmdargs[4])
|
|
||||||
## remove the copied .Rnw if it did not exist, otherwise move the original one back
|
|
||||||
if (.rnw.exists) file.rename(.tmp.file, .rnw.file) else unlink(.rnw.file)
|
|
||||||
file.rename(basename(.cmdargs[2]), .cmdargs[2]) # move .tex to the temp dir
|
|
||||||
rm(.tmp.file, .rnw.file, .rnw.exists) # clean up these variables
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user