Печать длинных строк текста LaTeX / Sweave
В конце опроса, который я провел, мы даем респондентам открытую рамку, чтобы сообщить нам все, что мы не освещали в опросе. Эти комментарии часто занимают несколько страниц. Я знаком с longtable
пакет для LaTeX и вот решение, которое я смоделировал:
<<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}")
@
Хотя это решение технически работает, оно не выглядит ужасно отточенным и нуждается в улучшении. У меня есть два связанных вопроса:
- Советы по обработке текста для вывода Sweave, который следует рассматривать как
tex
, Например, если кто-то говоритYour survey is awesome & I would take more surveys for $$$ 100% of the time!
специальные символы&, $, %
получи хавок при обработке черезLaTeX
, Есть ли что-то более эффективное, чем списокgsub
призывает заменить обидных персонажей чем-то доброжелательным? - Предложения для лучшего способа напечатать эти длинные комментарии с
Sweave & LaTeX
,
1 ответ
Вы можете взглянуть на пакет xtable для создания латексных таблиц, но я думаю, это не очень хорошо работает с longtable. В качестве альтернативы посмотрите на функцию latex в пакете Hmisc, которая имеет опцию "longtable" и позволяет больше контролировать вывод.
Чтобы добавить косую черту для специальных символов, используемых в латексе, вы можете сделать что-то вроде этого:
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 ,
РЕДАКТИРОВАТЬ: использование [[:punct:]] неправильно, что также меняет знаки препинания и так далее. Код исправлен. Обратная косая черта действительно проблематична.