我的问题:
knitr是否有选项可以使每个代码块都能够设置R的width
选项?
如果没有,是否有一个很好的理由(即根据knitr模型的一些基本限制)它为什么不支持?
我尝试过:
为了展示我所希望的,这里有一个手动编写的钩子函数,基本上做到了我想要的。(虽然我不是很喜欢它,(a)因为它很丑陋,依赖于将变量.width
赋值给全局环境中,以及(b)因为它不像fig.width
,out.width
等预设选项那样可以直接使用。)
\documentclass[preview=true,width=3mm]{standalone}
\begin{document}
<<setup, include=FALSE, cache=FALSE>>=
options(width=60)
knit_hooks$set(width = function(before, options, envir) {
if(before) {
.width <<- options(width=options$width) ## Set width and save 'old' value
} else {
options(.width)} ## Restore width's 'old' value
})
@
First chunk uses default width
<<A>>=
c("aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee", "fffff", "ggggg", "hhhhh")
@
Second chunk uses narrower supplied width, but then resets width to
pre-existing value \dots
<<B, width=20>>=
c("aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee", "fffff", "ggggg", "hhhhh")
@
\noindent \dots as shown by results of the third chunk
<<C>>=
c("aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee", "fffff", "ggggg", "hhhhh")
@
\end{document}
.width
分配到全局环境中。我尝试过但无法找到避免这种情况的解决方法。这些就是我提出问题的原因,尽管我已经拼凑出了一个基本可行的解决方案... - Josh O'Brienoutput.width
选项,那么这样做会更简单一些。 - Josh O'Brienlocal
来解决 #a(全局变量)的问题,在您的设置调用中替换为类似knit_hooks$set(width=local({ .width <- 0 ; function(before, options, envir) { if (before) .width <<- options(width=options$width) else options(.width) } ; }))
的东西。 - r2evansknit_hooks$set()
期望传递三个参数(before
、options
和envir
)的函数定义,这不是你提出的要交给它的东西... - Josh O'Brien