r - 打印长文本字符串 LaTeX/Sweave

标签 r latex sweave longtable

在我进行的一项调查结束时,我们会给受访者一个开放式框,让他们告诉我们调查中未涵盖的任何内容。这些评论通常会跨越几页。我熟悉 LaTeX 的 longtable 包,这是我模拟的解决方案:

<<results = tex>>=
cat("\\begin{longtable}{p{14cm}}\n")
cat("\\hline\n")
write.table(toBePrinted, eol = "\\\\\n", col.names = FALSE)
cat("\\hline\n")
cat("\\end{longtable}")
@

虽然此解决方案在技术上可行,但它看起来并不完美,需要改进。我有两个相关的问题:

  1. Sweave 输出的文本卫生提示将被视为 tex。例如,如果有人说 你的调查很棒 & 我会花 $$$ 100% 的时间做更多的调查! 特殊字符 &, $, % reak havok当通过 LaTeX 处理时。有没有比 gsub 调用列表更有效的方法来用善意的东西替换有问题的字符?
  2. 有关使用 Sweave & LaTeX 打印这些长注释的更好方法的建议。

最佳答案

您可以查看用于创建 latex 表的包 xtable,但我猜这对 longtable 不太适用。或者,查看包 Hmisc 中的函数 latex,它有一个选项“longtable”并允许对输出进行更多控制。

要为 Latex 中使用的特殊字符添加斜杠,您可以这样做:

add.slash <- function(x){
    where <- embed(c(1,gregexpr("[&#$%]",x)[[1]],nchar(x)+1),dim=2)
    out <- paste(apply(where,1,function(y){substr(x,y[2],y[1]-1)}),collapse="\\")
    return(out)
}

> x <- "I print $ and % and & and # and . and ! and ,"

> cat(add.slash(x),"\n")
I print \$ and \% and \& and \# and . and ! and , 

编辑: [[:punct:]] 的使用是错误的,它也改变了标点符号等等。代码已更正。反斜杠确实有问题。

关于r - 打印长文本字符串 LaTeX/Sweave,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3600658/

相关文章:

r - 使用 knitr 自动转义字符 ('_' ,'\' 等的方法

emacs - 独立于平台的路径(在 LaTex 和 Elisp 中)?

r - knitr_child 升级到 R 3.0 后抛出错误

r - 如何阻止 knitr 添加基于 documentClass 的 tex 包?

r - 如果单元格包含大于 x 的值,则删除 R 中的行

R demo() 和 example() 方法?

R 在具有 dplyr 或 RPostgreSQL 的模式下访问 redshift 表

r - 在 R 中保存多个 pdf 文件时出现问题

latex - latex 投影仪标题页中的并排机构

r - 如何让 Sweave 将图形放在单独的文件夹中并以 Rnw 文件命名它们