r - Knit asis 不适用于钩子(Hook)的输出

标签 r templates latex knitr rnw

在 Rnw/LaTeX 中,knitr hooks 的常见输出的一种用途可能是用一些奇特的环境来装饰来自 block 的数据。
例如,特定于 block 的代码可以生成表的核心数据,并且前后的钩子(Hook)代码提供重复的装饰。

考虑以下代码片段:

\documentclass{article}
\begin{document}

<<myhooks,  include=FALSE>>=
printhook=function(before, options, envir) {
    if (before) {

        return('\nCommon R \\LaTeX\\ in before-hook')
    } else {
        return('\nCommon R \\LaTeX\\ in after-hook')
    }
}

knit_hooks$set(lprint = printhook)

@ 


<<test, results='asis', lprint=TRUE,  echo=FALSE>>=
cat("R \\LaTeX\\ in current chunk\n")
@ 

\end{document}

问题是 LaTeX 输出大约如下:

   \begin{kframe}
   Common R \LaTeX\ in before-hook
   \end{kframe}

   R \LaTeX\ in current chunk

   \begin{kframe}
   Common R \LaTeX\ in after-hook
   \end{kframe}

Hook 代码实际上并不是 asis,但它被包装在 kframe 环境中,从而防止将三个部分粘合在一起。

我们如何删除封闭的kframe

最佳答案

对于这个问题我没有一个优雅的解决方案。以下是一种可能的解决方案。基本思想是当 results == 'asis' 时替换输出钩子(Hook) chunk,没有源代码回显,并且代码块中不生成任何绘图:

\documentclass{article}
\begin{document}

<<myhooks, include=FALSE>>=
local({
  hook_chunk = knit_hooks$get('chunk')
  knit_hooks$set(chunk = function(x, options) {
    x = hook_chunk(x, options)
    if (options$results == 'asis' && !options$echo && options$fig.num == 0) {
      # remove all kframe's
      gsub('\\\\(begin|end)\\{kframe\\}', '', x)
    } else x
  })
})
printhook=function(before, options, envir) {
    if (before) {
        return('\nCommon R \\LaTeX\\ in before-hook')
    } else {
        return('\nCommon R \\LaTeX\\ in after-hook')
    }
}
knit_hooks$set(lprint = printhook)
@

<<test, results='asis', lprint=TRUE,  echo=FALSE>>=
cat("R \\LaTeX\\ in current chunk\n")
@

\end{document}

关于r - Knit asis 不适用于钩子(Hook)的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24845731/

相关文章:

python - pdflatex 在大量数字后挂起

r - 使用 R(DBI 包)从 SQL Server 表中删除行

R 管道 (%>%) 功能 - 存储和部分使用?

php - CodeIgniter 查询结果仅在 View 中显示最后一行

c++ - 如何使用模板模板参数专门化模板类的成员

r - 针织/rmarkdown/ latex : How to cross-reference figures and tables?

r - 在ggplot中使用相同的数据源覆盖两个geom_sf但变量类型不同

r - 条形图位置上的ggplot标签

c++ - 模板类型的 ADL 和友元函数

Latex无法添加作者