global.par = TRUE在RSweave doc中不适用于bg的knitr

时间:2016-03-01 14:21:19

标签: r graphics global-variables knitr rnw

我需要更改我的R Sweave文档生成的所有tiff图像的背景,并遇到与此处描述的相同的问题:

Respecting global options in knitr

但是使用par(bg =),据说根据评论工作。

MWE:

\documentclass{article}
\begin{document}

<<setup, cache = FALSE>>=
opts_chunk$set(dev = c('pdf','tiff'))
opts_knit$set(global.par = TRUE)
par(bg='cyan')
@

<<>>=
plot (3,3)
@

\end{document}

(我不允许发表评论或者我会留在那篇文章上。)

我也试过使用一个钩子,基于这里的例子: https://github.com/yihui/knitr/blob/master/inst/examples/knitr-graphics.Rnw

knit_hooks$set(par=function(before, options, envir){
if (before) par(bg='cyan')
})

但这也不起作用。

唯一有效的方法是在每个块中设置参数,例如:

<<test, dev = 'tiff'>>=
par(bg = 'cyan')
plot(3,2)
@

(我实际上想要一个白色的背景,但用颜色测试更容易。不是我选择使用TIFF顺便说一句。)

关于发生了什么的任何想法?

1 个答案:

答案 0 :(得分:1)

所提供的MWE并不意味着global.par不适用于bg。情节不使用指定背景颜色的原因是global.par = TRUE仅影响后续块。

  

必须在任何依赖这些设置激活的块之前将Knitr的设置设置在块中。 [source]

您不能依赖全局选项来应用您设置的块。

以下示例演示了在稍后的块中设置背景颜色会使绘图使用它:

\documentclass{article}
\begin{document}

<<setup, cache = FALSE>>=
opts_knit$set(global.par = TRUE)
@

<<>>=
par(bg='cyan')
@

<<>>=
plot (3,3)
@

\end{document}