I'm trying to set a global chunk option outside my call to knit
like so:
opts_chunks$set(dev='pdf')
knit(input)
However, it isn't working, as knit
seems to use a fresh set of opts_chunks
within knit
.
Is it possible to set a global chunk option outside a call to knit
, and have it apply for the call to knit
?
Reason I'm doing this:
I'm writing Rmd
(R markdown) documents, and I want to be able to knit these to pdf or HTML, my choice, like so:
knit2 <- function (input, out=c('pdf', 'html')) {
# set the appropriate output image format
opts_chunk$set(dev=ifelse(out == 'pdf', 'pdf', 'svg')) # <--
# knit to md
o <- knit(input)
# knit md to html or pdf
pandoc(input=o, format=ifelse(out == 'pdf', 'latex', 'html'))
}
So the idea is that I can knit2('mydoc.Rmd', 'pdf')
OR knit2('mydoc.Rmd', 'html')
and I don't have to change the Rmd depending on the output.
The problem I encountered was that I want my images to be SVG for HTML output, and PDF for PDF output (I wanted vector graphics but SVG doesn't work in Latex, and pdf doesn't work in HTML, so I need to modify this based on the output format), i.e.
opts_chunk$set(dev=ifelse(out == 'pdf', 'pdf', 'svg'))
I know that if I put this in a chunk in my Rmd file along with a definition of out
, it will work.
However, I don't want to embed this within mydoc.Rmd
, as I can't assign output
until knit2
is called an I know what output I actually want.
Hence, I want knit2 to somehow set the dev
option for me before calling knit
and have that option apply for th duration of the knit
. (I would also accept embedding my opts_chunk$set(dev=ifelse(out=='pdf', 'pdf', 'svg'))
into my Rmd file, provided that I could define out
outside the Rmd file, i.e. in knit2
, although if I can handle it all from knit2
I'd prefer that)