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

标签 r latex knitr pdflatex

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

然而,当我生成一个带有切割间隔的表格时,方括号没有被清理,并且由于存在 [ 导致 pdflatex 作业错误。 .

我试着把 sanitize=TRUE在 knitr block 代码中,但这仅适用于 tikz。

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

例子

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 ,但这需要字符,所以我必须从一个因素到另一个字符。

我找到了另一个 SO post标识knitr:::escape_latex然而,功能 block 然后将内容作为标记输出而不是翻译它(使用结果='asis')或在代码块内生成一个 R 样式表(使用结果='标记')。我尝试在我的父文档中将它配置为一个钩子(Hook)函数,它具有将所有文档内容作为标记输出的效果。这对我来说是一个全新的领域,所以我可能实现不正确。
<<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 包装器,它将转义百分比等,但是 [ 符号仍然将 latex 插入数学模式和错误。

最佳答案

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

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

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

关于R - 转换为 LaTeX 时处理表格中 [x,y] 形式的切割间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17766501/

相关文章:

r - 用 "call by reference"修改对象的内容

r - 在绘图的 x 轴上添加美元符号

LaTeX 书籍类 : Twosided document with wrong margins

r - 如何保存和编辑电缆打印的内容?

r - 如何在 Rmarkdown 渲染中使用 kable 或任何其他表格包作为默认值

r - 在R中绘制分组的条形图

r - 如何创建我的数据的地铁 map 可视化

latex - 在 Latex 中添加/查找样式文件

r - knitr 有时会不恰本地将代码包装成 block

r - Knit 和父子 R 代码块 : A child's chunk can't recognize parent's variables within loop