2010-08-30 129 views
3

在我進行的一項調查結束時,我們向受訪者提供了一個開放式框,告訴我們在調查中沒有涉及的任何內容。這些評論通常會跨越多頁。我熟悉longtable包乳膠和這裏的解決方案,我已經嘲笑了:打印長字符串文本LaTeX/Sweave

<<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。例如,如果有人說通過LaTeX處理Your survey is awesome & I would take more surveys for $$$ 100% of the time!特殊字符&, $, % reak havok。有沒有比gsub調用列表更有效率的東西來替換有害的角色?
  2. 關於使用Sweave & LaTeX更好地打印這些長評論的建議。

回答

2

你可以看看用於創建乳膠表的軟件包xtable,但是這並不適用於我猜想的longtable。或者,查看包Hmisc中的函數latex,該函數具有「longtable」選項並允許對輸出進行更多控制。

要添加斜線特殊字符,如乳膠使用,你可以做這樣的事情:

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:]是錯誤的,也改變標點符號等等。代碼已更正。反斜槓確實存在問題。

+1

正如您所指出的,'xtable'不能很好地處理跨越多個頁面的表格。我使用'xtable'爲報表的其餘部分生成LaTeX格式的表格。我將不得不看看Hmisc包,看看我能不能找到一些工作。 'add.slash'函數將按照它應該的那樣工作。謝謝〜 – Chase 2010-08-30 17:58:35