xtable 函數產生的 La​​tex 不會解析特殊字符,例如方括號

xtable 函數產生的 La​​tex 不會解析特殊字符,例如方括號

我正在使用該knitr套件將我的R輸出放入 PDF 中。我使用時遇到兩個問題 xtable

  1. 當我的表格資料有這樣的字元時:[在其中,從到 的]轉換失敗並出現錯誤.tex.pdf

  2. 當我使用包seqinr:stresc()來轉義此類字元時,我至少能夠顯示內容(比上面的情況 1 更好)。但仍存在這樣的問題:最終的 PDF 最終顯示如下:\lbrack{}ABD\rbrack{} r22而不是顯示如下:[ABD] r22

誰能告訴我們如何解決這個問題?

答案1

如果您的行名稱以左括號開頭,則可能會發生這種情況,在這種情況下您會遇到大衛在評論中描述的問題。我還沒有發現表體中的括號有問題(但在某些情況下可能會發生)。如果這就是您所看到的,您可以sanitize.rownames.functionprint.xtable函數添加自訂參數以將它們括在大括號中。

\documentclass{article}
\begin{document}

<<>>=
library("xtable")
DF <- data.frame(x=c("[]", "bleah", "foo[", "[", "]"),
                 stringsAsFactors = FALSE)
rownames(DF)[1:2] <- c("[1,2]", "[3,4]")
@

<<results="asis">>=
print(xtable(DF),
      sanitize.rownames.function = function(x) paste0("{",x,"}"))
@

\end{document}

由此產生的文件.tex(未顯示)將給出一個有效的 PDF,如果沒有sanitize.rownames.function,它將給出錯誤:

[....] 
! Illegal unit of measure (pt inserted).
<to be read again> 
                   >
l.83   [3,4]
             & bleah \\
? 
! Emergency stop.
<to be read again> 
                   >
l.83   [3,4]
             & bleah \\
!  ==> Fatal error occurred, no output PDF file produced!
[....]

請注意,如果您的行名稱中可能還需要清理其他特殊字符,則也必須將其包含在自訂函數中,因為如果您提供了預設清理函數,則不會使用預設清理函數。

相關內容