Drucken lange Textzeichenfolgen LaTeX / Sweave
Frage
Am Ende einer Umfrage, die ich durchgeführt habe, geben wir die Befragten eine am Ende offene Box uns etwas zu sagen, wir deckten oft nicht über mehrere Seiten erstrecken in den survey.These Bemerkungen werden. Ich bin mit dem longtable
Paket für LaTeX vertraut und hier ist die Lösung, die ich verspottet haben:
<<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}")
@
Während diese Lösung technisch funktioniert, sieht es nicht sehr poliert und muss verbessert werden. Ich habe zwei ähnliche Fragen:
- Text Hygiene-Tipps für Sweave Ausgabe, die als
tex
behandelt werden. Zum Beispiel, wenn jemand sagt,Your survey is awesome & I would take more surveys for $$$ 100% of the time!
die Sonderzeichen&, $, %
reak havok wenn durchLaTeX
Verarbeitung. Gibt es etwas effizienter als eine Liste vongsub
Anrufen, die beanstandeten Zeichen mit etwas wohlwollender zu ersetzen? - Vorschläge für einen besseren Weg, um diese langen Kommentare mit
Sweave & LaTeX
zu drucken.
Lösung
Sie können einen Blick auf das Paket XTABLE nehmen Latex-Tabellen für die Erstellung, aber das funktioniert nicht sehr gut mit long I guess. Alternativ Blick auf der Funktion Latex im Paket Hmisc, die eine Option „long“ und erlaubt mehr Kontrolle über die Ausgabe.
einen Schrägstrich für Sonderzeichen hinzufügen, wie in Latex verwendet, können Sie so etwas tun könnte:
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: die Verwendung von [[: punct:]] ist falsch, das ändert sich auch die Interpunktion und so weiter. Code korrigiert. Schrägstriche sind wirklich problematisch.