R - 转换为LaTeX时,在表格中处理形式[x,y]的剪切间隔

时间:2013-07-20 20:41:07

标签: r latex knitr pdflatex

我正在研究R中的文档,使用pdflatex的knitr并使用memisc的扩展版toLatex

当我生成一个带有剪切间隔的表时,由于存在[,方括号不会被清理,pdflatex作业会出错。

我尝试将sanitize=TRUE放入knitr chunk代码中,但这只适用于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)

更新

正在搜索我发现a post关于使用apply函数应用latexTranslate,但是这需要字符,所以我必须在因子之间取消分类。

我找到另一个标识knitr:::escape_latex函数的SO post但是,然后chunk将这些东西输出为标记而不是翻译它(使用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包装器,它将逃脱百分比等,但[符号仍然将乳胶推入数学模式和错误。

1 个答案:

答案 0 :(得分:2)

在tex SE上的人们提供,[直接在换行符之后(\\)被认为是数学模式的入口。通过在{}之前将[添加到输出中来防止此行为非常简单。我的功能如下:

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

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