Печать длинных строк текста 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}")
@

Хотя это решение технически работает, оно не выглядит ужасно отточенным и нуждается в улучшении. У меня есть два связанных вопроса:

  1. Советы по обработке текста для вывода Sweave, который следует рассматривать как tex, Например, если кто-то говорит Your survey is awesome & I would take more surveys for $$$ 100% of the time! специальные символы &, $, % получи хавок при обработке через LaTeX, Есть ли что-то более эффективное, чем список gsub призывает заменить обидных персонажей чем-то доброжелательным?
  2. Предложения для лучшего способа напечатать эти длинные комментарии с 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:]] неправильно, что также меняет знаки препинания и так далее. Код исправлен. Обратная косая черта действительно проблематична.

Другие вопросы по тегам