4

我正在使用 R 中的文档,将 knitr 转换为 pdflatex,并且正在使用toLatexfrom memisc 的扩展版本。

然而,当我生成一个具有切割间隔的表格时,方括号没有被清理,并且 pdflatex 作业错误,因为[.

我尝试sanitize=TRUE输入 knitr 块代码,但这仅适用于 tikz。

以前,我使用 gsub 并替换了 R 对象本身中的字符串,这是相当不雅的。我希望有人能指出我缺少的 memisc 或 knitr 的细微差别,或者其他可以轻松处理乳胶特殊字符的函数/方法。

例子

library("memisc")
library("Hmisc")
example<-data.frame(cbind(x=1:100,y=1:100))
example$x<-cut2(example$x,m=20)
toLatex(example)

更新

搜索所以我发现了一篇关于使用 apply 函数应用 latexTranslate 的帖子,但这需要字符,所以我必须从一个因素到另一个字符。

我找到了另一个标识该函数的SO 帖子knitr:::escape_latex,然后该块将这些内容作为标记输出而不是翻译它(使用 results='asis')或在代码块内生成一个 R 样式表(使用 results='markup')。我尝试在我的父文档中将它配置为一个钩子函数,它具有将所有文档内容作为标记输出的效果。这对我来说是一个全新的领域,所以我可能实施不正确。

<<setup,include=FALSE>>=
hook_inline = knit_hooks$get('inline')
knit_hooks$set(inline = function(x) {
  if (is.character(x)) x = knitr:::escape_latex(x)
  hook_inline(x)
})
@
...
<<tab-example,echo=FALSE,cache=TRUE,results='asis',sanitize=TRUE,inline=TRUE>>=
library("Hmisc")
library("memisc")
    example<-data.frame(cbind(x=1:100,y=1:100))
    example$x<-cut2(example$x,m=20)
    toLatex(example)
@

根据@yihui,这是错误的方法

更新 2

我创建了一个 gsub 包装器,它将转义百分比等,但是 [ 符号仍然将乳胶推入数学模式和错误。

4

1 回答 1

2

感谢 tex SE 上的人,在换行符 (\\) 之后的 [ 直接被视为进入数学模式。{}通过在 a 之前添加到输出中来防止这种行为非常简单[。我的功能如下:

escapedLatex<-function (df = NULL) 
{
    require("memisc")
    gsub(gsub(x = toLatex(df, show.xvar = TRUE), pattern = "%", 
        replacement = "\\%", fixed = TRUE), pattern = "[", replacement = "{}[", 
        fixed = TRUE)
}

我很高兴看到任何替代的、更优雅的解决方案,并将其开放几天。

于 2013-07-21T18:17:11.863 回答