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:

  1. Dicas de saneamento de texto para a saída de arremesso que deve ser tratada como tex. Por exemplo, se alguém disser Your survey is awesome & I would take more surveys for $$$ 100% of the time! os personagens especiais &, $, % REAK Havok ao processar LaTeX. Existe algo mais eficiente do que uma lista de gsub chamadas para substituir os personagens ofensivos por algo benevolente?
  2. Sugestões para uma maneira melhor de imprimir esses longos comentários com Sweave & LaTeX.
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top