global.par = TRUE не работает в knitr для bg в RSweave doc

Мне нужно изменить фон всех изображений TIFF, созданных моим документом R Sweave, и столкнулся с той же проблемой, как описано здесь:

Уважая глобальные параметры в 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 ответ

Решение

Представленный MWE не означает, что global.par не работает для bg, Причина, по которой на графике не используется указанный цвет фона, заключается в том, что global.par = TRUE влияет только на последующие куски.

Настройки Knitr должны быть установлены в чанке перед тем, как чанки, которые зависят от этих настроек, будут активны. [ источник]

Вы не можете полагаться на глобальную опцию, применяемую в блоке, который вы установили.

Следующий пример демонстрирует, что установка цвета фона в более позднем фрагменте заставляет его использовать график:

\documentclass{article}
\begin{document}

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

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

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

\end{document}
Другие вопросы по тегам