Функция xtable, сгенерированная latex, не анализируется на наличие специальных символов, таких как квадратные скобки.

Функция xtable, сгенерированная latex, не анализируется на наличие специальных символов, таких как квадратные скобки.

Я использую knitrпакет для перевода моего Rвывода в PDF. У меня есть две проблемы при использовании xtable:

  1. Когда в моих табличных данных есть такие символы: [, ]преобразование из в .texзавершается .pdfошибкой

  2. Когда я использую пакет 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!
[....]

Обратите внимание: если в именах строк есть другие специальные символы, которые также необходимо очистить, вам придется включить их в пользовательскую функцию, поскольку функция очистки по умолчанию не будет использоваться, если вы ее укажете.

Связанный контент