Imprimer les longues chaînes de texte LATEX / Sweave
Question
A la fin d'une enquête que j'ai mené, nous donnons des répondants une boîte ouverte pour nous ended dire tout ce que nous ne couvrons pas dans les commentaires survey.These va souvent couvrir plusieurs pages. Je connais le paquet longtable
pour LaTeX et voici la solution que j'ai raillé jusqu'à:
<<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:
- Conseils sanitaires de texte pour la sortie Sweave qui doit être traité comme
tex
. Par exemple, si quelqu'un ditYour survey is awesome & I would take more surveys for $$$ 100% of the time!
les caractères spéciaux&, $, %
Havok Reak lors du traitement parLaTeX
. Y at-il quelque chose de plus efficace qu'une liste des appelsgsub
pour remplacer les caractères offensants avec quelque chose bienveillante? - Suggestions pour une meilleure façon d'imprimer ces longs commentaires avec
Sweave & LaTeX
.
La solution
Vous pouvez jeter un oeil à la XTABLE paquet pour créer des tables de latex, mais cela ne fonctionne pas très bien avec longtable je suppose. Vous pouvez également regarder le latex de fonction dans le package Hmisc, qui a une option « longtable » et permet de mieux contrôler 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, qui change aussi ponctuations et ainsi de suite. Code est corrigé. Les barres obliques inverses sont vraiment problématiques.