xtable 函数生成的 latex 不会解析方括号等特殊字符

xtable 函数生成的 latex 不会解析方括号等特殊字符

我正在使用该knitr包将输出转换R为 PDF。使用时遇到两个问题 xtable

  1. 当我的表格数据包含如下字符时:[,从到 的]转换失败并出现错误.tex.pdf

  2. 当我使用该包seqinr:stresc()转义此类字符时,我至少能够显示内容(比上面的情况 1 更好)。但仍然存在问题,即最终的 PDF 最终显示如下:\lbrack{}ABD\rbrack{} r22而不是显示如下:[ABD] r22

有人能告诉我们如何解决这个问题吗?

答案1

如果您的行名以左括号开头,则可能会发生这种情况,在这种情况下,您会遇到 David 在他的评论中描述的问题。我还没有看到表格主体中的括号存在问题(但在某些情况下可能会发生)。如果您看到这种情况,您可以向函数添加自定义sanitize.rownames.function参数print.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!
[....]

请注意,如果您的行名中可能有其他需要清理的特殊字符,那么您还必须将其包含在自定义函数中,因为如果您提供了默认的清理函数,则不会使用默认的清理函数。

相关内容