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

vad*_*vad 2 pdf r xtable knitr

我正在尝试cut使用knitr和xtable将生成的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}
Run Code Online (Sandbox Code Playgroud)

当我使用时,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}结束.

我相信我得到错误是因为文本源中存在方括号'['.

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

Aar*_*ica 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)
Run Code Online (Sandbox Code Playgroud)