当tex有方括号([)时,如何使用knitr / xtable输出到pdf?

时间:2013-10-08 13:33:22

标签: r pdf knitr xtable

我正在尝试使用knitr和xtable将cut生成的freq表输出到PDF文件。但是,当我包含选项include.rownames=FALSE时,不会处理输出并报告错误,而代码与include.rownames=TRUE一起使用。测试代码如下:

\documentclass[12pt]{article}

\begin{document}

<<test_table, results = "asis",echo=FALSE>>=
library(xtable)
x <- sample(10,100,replace=TRUE)
breaks <- c(1,2,5,10)
x.freq <- data.frame(table(cut(x, breaks, right=FALSE)))
print(xtable(x.freq),include.rownames=TRUE)
@

\end{document}

当我使用include.rownames=TRUE时,我会得到以下输出。

  

1 [1,2] 5
  2 [2,5] 35
  3 [5,10] 49

而当我使用include.rownames=FALSE时,我收到错误:

  

Test.tex:71:LaTeX错误:输入行58上的\ begin {tabular}以\ end {document}结束。

我认为由于文本源中存在方括号'['而导致错误。

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

问题是表中每行的结尾是\\,它有一个可选参数来指定在下一行之前留出多少空间,例如\\[1in]。在\\[之间允许有空格,因此在这种情况下,它会尝试将[2,5)作为该参数读取。

一个简单的解决方法是首先更改因子的标签以包含一些非打印空白字符,但是,如果您这样做,默认情况下,print.xtable将“清理”它以便实际执行此操作打印,所以你需要通过传递一个新的清理函数来关闭它; identity不会做任何修复。

levels(x.freq$Var1) <- paste0("{}", levels(x.freq$Var1))
print(xtable(x.freq),include.rownames=FALSE, sanitize.text=identity)