
Я использую knitr
пакет для перевода моего R
вывода в PDF. У меня есть две проблемы при использовании xtable
:
Когда в моих табличных данных есть такие символы:
[
,]
преобразование из в.tex
завершается.pdf
ошибкойКогда я использую пакет
seqinr:stresc()
для экранирования таких символов, я могу по крайней мере отобразить содержимое (лучше, чем в ситуации 1 выше). Но остается проблема, что окончательный PDF в конечном итоге отображается так:\lbrack{}ABD\rbrack{} r22
вместо того, чтобы отображаться так:[ABD] r22
.
Может ли кто-нибудь пролить свет на то, как можно решить эту проблему?
решение1
Это может произойти, если имена ваших строк начинаются с левой скобки, в этом случае вы получаете проблему, которую Дэвид описал в своем комментарии. Я не видел, чтобы это было проблемой со скобками в теле таблицы (но это может произойти в некоторых случаях). Если это то, что вы видите, вы можете добавить пользовательский 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!
[....]
Обратите внимание: если в именах строк есть другие специальные символы, которые также необходимо очистить, вам придется включить их в пользовательскую функцию, поскольку функция очистки по умолчанию не будет использоваться, если вы ее укажете.