El látex generado por la función xtable no se analiza en busca de caracteres especiales como corchetes

El látex generado por la función xtable no se analiza en busca de caracteres especiales como corchetes

Estoy usando el knitrpaquete para poner mi Rsalida en PDF. Tengo dos problemas al usar xtable:

  1. Cuando los datos de mi tabla tienen caracteres como este: [, ]en ellos, la conversión de .texa .pdffalla con error

  2. Cuando uso el paquete seqinr:stresc()para escapar de dichos caracteres, puedo al menos mostrar el contenido (mejor que la situación 1 anterior). Pero sigue existiendo el problema de que el PDF final acaba mostrándose así: \lbrack{}ABD\rbrack{} r22en lugar de mostrarse así: [ABD] r22.

¿Alguien podría arrojar alguna luz sobre cómo podemos resolver esto?

Respuesta1

Esto puede suceder si los nombres de las filas comienzan con un corchete izquierdo, en cuyo caso se produce el problema que David describió en su comentario. No he visto que haya un problema con los corchetes en el cuerpo de la tabla (pero puede suceder en algún caso). Si eso es lo que está viendo, puede agregar un sanitize.rownames.functionargumento personalizado a la print.xtablefunción para envolverlos entre llaves.

\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}

Este .texarchivo generado a partir de este (no se muestra) dará un PDF válido, donde sin el sanitize.rownames.function, dará un error:

[....] 
! 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!
[....]

Tenga en cuenta que si tiene otros caracteres especiales que también deben desinfectarse en los nombres de sus filas, también deberá incluirlos en su función personalizada, ya que la función de desinfección predeterminada no se utiliza si proporciona una.

información relacionada