2010-08-30 22 views
3

À la fin d'une enquête que j'ai menée, nous donnons aux répondants une boîte ouverte pour nous dire tout ce que nous n'avons pas couvert dans le sondage. Ces commentaires couvriront souvent plusieurs pages. Je connais le paquet longtable pour LaTeX et voici la solution que j'ai raillé jusqu'à:Imprimer de longues chaînes de texte LaTeX/Sweave

<<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}") 
@ 

Bien que cette solution fonctionne sur le plan technique, il ne semble pas très poli et doit être améliorée. J'ai deux questions connexes:

  1. Conseils d'assainissement de texte pour la sortie de Sweave qui doit être traitée comme tex. Par exemple, si quelqu'un dit Your survey is awesome & I would take more surveys for $$$ 100% of the time! les caractères spéciaux &, $, % hack reak lors du traitement par LaTeX. Y at-il quelque chose de plus efficace qu'une liste d'appels gsub pour remplacer les caractères fautifs par quelque chose de bienveillant?
  2. Suggestions pour une meilleure façon d'imprimer ces longs commentaires avec Sweave & LaTeX.

Répondre

2

Vous pouvez jeter un oeil au paquet xtable pour créer des tables en latex, mais cela ne fonctionne pas très bien avec longtable je suppose. Alternativement, regardez la fonction latex dans le paquet Hmisc, qui a une option "longtable" et permet plus de contrôle sur la sortie.

Pour ajouter une barre oblique pour les caractères spéciaux utilisés dans Latex, vous pourriez faire quelque chose comme ceci:

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: l'utilisation de [[: punct:]] est faux, que modifie également les ponctuations et ainsi de suite. Le code est corrigé. Les antislashs sont vraiment problématiques.

+1

Comme vous l'avez noté, 'xtable' ne gère pas bien les tables qui tentent de s'étendre sur plusieurs pages. J'utilise 'xtable' pour générer des tables au format LaTeX pour le reste du rapport. Je vais devoir regarder le paquet 'Hmisc' et voir si je peux obtenir quelque chose pour travailler. La fonction 'add.slash' fonctionnera comme il se doit. Merci ~ – Chase