Imprima seqüências longas de látex de texto / suspeitam
Pergunta
No final de uma pesquisa que conduzi, damos aos entrevistados uma caixa de ponta aberta para nos dizer qualquer coisa que não cobrimos na pesquisa. Esses comentários geralmente abrangem várias páginas. Estou familiarizado com o longtable
Pacote para látex e aqui está a solução que zombei:
<<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}")
@
Embora essa solução funcione tecnicamente, ela não parece terrivelmente polida e precisa ser melhorada. Eu tenho duas perguntas relacionadas:
- Dicas de saneamento de texto para a saída de arremesso que deve ser tratada como
tex
. Por exemplo, se alguém disserYour survey is awesome & I would take more surveys for $$$ 100% of the time!
os personagens especiais&, $, %
REAK Havok ao processarLaTeX
. Existe algo mais eficiente do que uma lista degsub
chamadas para substituir os personagens ofensivos por algo benevolente? - Sugestões para uma maneira melhor de imprimir esses longos comentários com
Sweave & LaTeX
.
Solução
Você pode dar uma olhada no pacote Xtable para criar tabelas de látex, mas isso não funciona muito bem com a longtable, eu acho. Como alternativa, observe o látex da função no pacote HMISC, que possui uma opção "longTable" e permite mais controle sobre a saída.
Para adicionar uma barra para caracteres especiais, conforme usado no LATEX, você pode fazer algo assim:
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: O uso de [[: pontu:]] está errado, isso também muda de pontuação e assim por diante. O código é corrigido. As barris são realmente problemáticas.