我正在使用 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/