Imprimir largas cadenas de texto LaTeX / Sweave
Pregunta
Al final de una encuesta que he realizado, damos a los encuestados una caja abierta para decirnos algo que no cubrimos en los comentarios survey.These a menudo abarcar varias páginas. Estoy familiarizado con el paquete longtable
para LaTeX y aquí está la solución que he burlado a:
<<results = tex>>=
cat("\\begin{longtable}{p{14cm}}\n")
cat("\\hline\n")
write.table(toBePrinted, eol = "\\\\\n", col.names = FALSE)
cat("\\hline\n")
cat("\\end{longtable}")
@
Mientras que esta solución funciona técnicamente, no se ve terriblemente pulido y necesita mejorarse. Tengo dos preguntas relacionadas:
- consejos de saneamiento de texto para la salida Sweave que ha de ser tratado como
tex
. Por ejemplo, si alguien diceYour survey is awesome & I would take more surveys for $$$ 100% of the time!
los caracteres especiales&, $, %
Havok reak cuando se procesan a travésLaTeX
. ¿Hay algo más eficiente que una lista de llamadasgsub
para reemplazar los caracteres problemáticos con algo benévolo? - Las sugerencias para una mejor forma de imprimir estos largos comentarios con
Sweave & LaTeX
.
Solución
Se puede echar un vistazo a la xtable paquete para la creación de tablas de látex, pero que no funciona muy bien con conjetura que Longtable. Alternativamente, el látex vistazo a la función en el paquete Hmisc, que tiene una opción "Longtable" y permite un mayor control sobre la salida.
Para añadir una barra de caracteres especiales tal como se utiliza en el látex, se podría hacer algo como esto:
add.slash <- function(x){
where <- embed(c(1,gregexpr("[&#$%]",x)[[1]],nchar(x)+1),dim=2)
out <- paste(apply(where,1,function(y){substr(x,y[2],y[1]-1)}),collapse="\\")
return(out)
}
> x <- "I print $ and % and & and # and . and ! and ,"
> cat(add.slash(x),"\n")
I print \$ and \% and \& and \# and . and ! and ,
EDIT: el uso de [[: punct:]] está mal, que también cambia signos de puntuación y así sucesivamente. Código se corrige. Las barras invertidas son muy problemáticos.