打印长文本LaTeX / Sweave

时间:2010-08-30 13:15:25

标签: 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。例如,如果有人说Your survey is awesome & I would take more surveys for $$$ 100% of the time!,则在通过&, $, %进行处理时,特殊字符LaTeX会重新出现。是否有一些比gsub调用列表更有效的东西,用一些仁慈的东西来代替违规字符?
  2. 有关使用Sweave & LaTeX打印这些长评论的更好方法的建议。

1 个答案:

答案 0 :(得分:2)

你可以看看用于创建乳胶表的包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:]]是错误的,这也改变了标点符号等等。代码已更正。反斜杠确实存在问题。