【问题标题】:How to output to pdf using knitr/xtable when tex has square braces ( [ )?当tex有方括号([)时,如何使用knitr / xtable输出到pdf?
【发布时间】:2013-10-08 13:33:21
【问题描述】:

我正在尝试使用 knitr 和 xtable 将cut 生成的频率表输出到 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} 结尾。

我相信我收到错误是因为文本源中存在方括号“ [ ”。

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

【问题讨论】:

  • 一种简单的手动解决方法是将labels 提供给您的cut 函数。

标签: r pdf knitr xtable


【解决方案1】:

问题在于表中每一行的末尾都是一个\\,它有一个可选参数来指定在下一行之前要留多少空间,例如\\[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)

【讨论】:

  • 一个错字-我想你的意思是include.rownames=FALSE,对吧?该解决方案完美无缺。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 2014-08-15
  • 2015-11-22
  • 1970-01-01
  • 2017-09-30
  • 2015-08-12
相关资源
最近更新 更多