【问题标题】:{Soutput} environment for asis with render_sweave hooks in knitrknitr 中带有 render_sweave 钩子的 asis 的 {Soutput} 环境
【发布时间】:2019-12-25 13:28:57
【问题描述】:

我正在使用 knitr 处理 Rnw 文件,并希望包含结果 "asis"。在普通的knitr 这工作正常,但在启用render_sweave 挂钩后,{Soutput} 环境被包裹在"asis" 结果周围。由于Sweave() 没有这种行为,这对我来说似乎不一致。这是预期/记录的行为吗?我在任何地方都找不到这种描述(例如,https://yihui.name/knitr/demo/sweave/)。这让我感到困惑的原因是我没有直接在输出上运行 LaTeX,而是先部分解析它(在 R/exams 包中)。

knitr 样式的最小foo.Rnw 文件说明了这个问题,首先用普通的knitr::knit() 处理:

writeLines('
<<echo=FALSE, results="asis">>=
writeLines("Hello World!")
@
', "foo.Rnw")

knitr::knit("foo.Rnw", quiet = TRUE)
writeLines(readLines("foo.tex"))
##
## Hello World!
##

但是,设置render_sweave()钩子后:

knitr::render_sweave()
knitr::knit("foo.Rnw", quiet = TRUE)
writeLines(readLines("foo.tex"))
## 
## \begin{Soutput}
## Hello World!
## \end{Soutput}
## 

相比之下,以Sweave 样式执行此操作会产生:

writeLines('
<<echo=FALSE, results=tex>>=
writeLines("Hello World!")
@  
', "foo.Rnw")

utils::Sweave("foo.Rnw", quiet = TRUE)
writeLines(readLines("foo.tex"))
## 
## Hello World!

我可以做些什么来避免这种行为,例如,手动修改 render_sweave 挂钩吗?

【问题讨论】:

    标签: r knitr sweave


    【解决方案1】:

    这是 knitr(非常感谢您的报告)和 Github 上的 I just fixed it 的错误。基本上我忘了在output 钩子中考虑results='asis'。现在,你可以试试knitr的开发版:

    remotes::install_github('yihui/knitr')
    

    【讨论】:

    • 谢谢!我已经在我的 R/exams 设置中对其进行了测试,它就像一个魅力。
    猜你喜欢
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2021-12-09
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    相关资源
    最近更新 更多