Convert Sweave to knitr documents
This function converts an Sweave document to a knitr-compatible document.
Sweave2knitr( file, output = gsub("[.]([^.]+)$", "-knitr.\\1", file), text = NULL )
file |
Path to the Rnw file (must be encoded in UTF-8). |
output |
Output file path. By default, ‘file.Rnw’ produces
‘file-knitr.Rnw’); if |
text |
An alternative way to provide the Sweave code as a character
string. If |
The pseudo command \SweaveInput{file.Rnw} is converted to a code
chunk header <<child='file.Rnw'>>=
.
Similarly \SweaveOpts{opt = value} is converted to a code chunk
opts_chunk$set(opt = value) with the chunk option include =
FALSE
; the options are automatically fixed in the same way as local chunk
options (explained below).
The Sweave package \usepackage{Sweave} in the preamble is removed because it is not required.
Chunk options are updated if necessary: option values true
and
false
are changed to TRUE
and FALSE
respectively;
fig=TRUE
is removed because it is not necessary for knitr (plots
will be automatically generated); fig=FALSE
is changed to
fig.keep='none'
; the devices pdf/jpeg/png/eps/tikz=TRUE
are
converted to dev='pdf'/'jpeg'/'png'/'postscript'/'tikz'
;
pdf/jpeg/png/eps/tikz=FALSE
are removed;
results=tex/verbatim/hide
are changed to
results='asis'/'markup'/'hide'
; width/height
are changed to
fig.width/fig.height
; prefix.string
is changed to
fig.path
; print/term/prefix=TRUE/FALSE
are removed; most of the
character options (e.g. engine
and out.width
) are quoted;
keep.source=TRUE/FALSE
is changed to tidy=FALSE/TRUE
(note the
order of values).
If a line @
(it closes a chunk) directly follows a previous
@
, it is removed; if a line @
appears before a code chunk and
no chunk is before it, it is also removed, because knitr only uses one
@ after <<>>= by default (which is not the original Noweb
syntax but more natural).
If text
is NULL
, the output
file is written and
NULL
is returned. Otherwise, the converted text string is returned.
If \SweaveOpts{} spans across multiple lines, it will not be
fixed, and you have to fix it manually. The LaTeX-style syntax of Sweave
chunks are ignored (see ?SweaveSyntaxLatex
); only the Noweb syntax
is supported.
The motivation of the changes in the syntax: https://yihui.org/knitr/demo/sweave/
Sweave2knitr(text = "<<echo=TRUE>>=") # this is valid Sweave2knitr(text = "<<png=true>>=") # dev='png' Sweave2knitr(text = "<<eps=TRUE, pdf=FALSE, results=tex, width=5, prefix.string=foo>>=") Sweave2knitr(text = "<<,png=false,fig=TRUE>>=") Sweave2knitr(text = "\\SweaveOpts{echo=false}") Sweave2knitr(text = "\\SweaveInput{hello.Rnw}") # Sweave example in utils testfile = system.file("Sweave", "Sweave-test-1.Rnw", package = "utils") Sweave2knitr(testfile, output = "Sweave-test-knitr.Rnw") if (interactive()) knit("Sweave-test-knitr.Rnw") # or knit2pdf() directly unlink("Sweave-test-knitr.Rnw")
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.