2010-08-08 19 views
6

Estoy tratando de incorporar algunos trazados de R en mi documento LaTeX a través de Sweave.Sweave no imprime caracteres localizados

\SweaveOpts{eps = FALSE, pdf = TRUE, echo = FALSE, prefix = TRUE, prefix.string = data} 

<<label = abundanca:barplot, fig = TRUE, include = FALSE, results = hide>>= 
barplot(abund, xlab="Vzorčne postaje", ylab="Abundanca", main="", col="slategrey", names.arg=c("HM1", "HM2", "HM3", "HM4", "HM5", "HM6", "HM7", "HM8", "HM9", "HM10")) 
@ 

El dispositivo pdf en Sweave utiliza codificación nativa (tal como se establece en options("encoding")), que no reconoce caracteres locales (ščćž) en xlab (los reemplaza con dos puntos).

He intentado fijar la opción de algo que funciona en I:

options("encoding" = "CP1250.enc") 

pero me da un error:

Error in file() : unsupported conversion from 'CP1250.enc' to '' 

Cualquier soluciones, soluciones ...?

EDITAR

Correr Rnw de aL3xa través

R CMD Sweave report.Rnw 

no funciona.

Ejecución del mismo archivo a través de Eclipse + Statet embargo

Sweave("report.Rnw") 

, lo hace.

Mi archivo .Rnw y .pdf.

+0

Esto funciona para su problema: http://stackoverflow.com/questions/31221471/custom-graphical-device-in-sweave –

Respuesta

3

Éste no es tan simple como parece. Técnicamente, este problema es dependiente de OS/locale/pdf writer/Sweave (consulte "Instalación y administración de R", capítulo 7). Como estoy ejecutando GNU/Linux, esta "solución" no está dirigida a usuarios de Mac y Windows. Y solo para hacer las cosas un poco más complicadas, las distribuciones GNU/Linux son diferentes, por lo que hay una gran posibilidad de que si algo funciona, digamos, Ubuntu, no funcione en Arch Linux.

Voy a utilizar mtcars conjunto de datos. Vamos a crear algunos gráfico básico con caracteres localizados:

pdf("foo.pdf") 
boxplot(mpg ~ cyl, data = mtcars, ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") 
dev.off() 

(curso intensivo de idioma serbio: "Potrošnja goriva" se refiere a consumo de combustible, "broj cilindara" significa # de cilindros y "Dijagram raspršenja" es equivalente para el diagrama de dispersión)

Ahora, consigo montón de advertencias:

Warning messages: 
1: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <c5> 
2: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <a1> 
3: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <c5> 
4: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <a1> 
5: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <c5> 
6: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <a1> 
7: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <c5> 
8: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <a1> 

Mientras options(encoding = "CP1250") no hace el truco - consigo las mismas advertencias, pdf.options(encoding = "CP1250") vías de recuperación s it, y lo mismo significa pdf(file = "foo.pdf", encoding = "CP1250"). Por lo tanto, recuperaré mi codificación anterior con options(encoding = "native.enc"), configuré pdf.options como se indicó anteriormente y hago bien las cosas.

Algunos usuarios se escapan simplemente configurando pdf.options, y no tienen problemas con Sweave. Entonces, debes insertar esta parte del código en algún lugar de.Rnw archivo, antes de iniciar el trazado:

<<setOptions, echo = FALSE, results = hide>>== 
pdf.options(encoding = "CP1250") 
@ 

y más tarde, acaba de hacer:

<<plotTheFigure, echo = TRUE, fig = TRUE>>== 
# I've set echo to TRUE intentionally, to prove my point here 
boxplot(mpg ~ cyl, data = mtcars, ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") 
@ 

Y el mismo escenario representa gráficos ggplot2.

Algunos obtendrán la salida correcta, ¡pero yo no! Y como he dicho antes, si está ejecutando Ubuntu, hay una gran posibilidad de que esto funcione, pero por ahora, parece que no puedo hacerlo vivo y patear en Arch.

Y para guardar sus teclas, puede descargar Sweave file y/o PDF file (ejecutado en la máquina Arch). Como puede ver, los caracteres localizados se muestran correctamente dentro de la función de trazado, pero quedan distorsionados dentro de Sweave. Ahora, si intento guardar el gráfico en un archivo PDF (sin Sweaving), obtengo el correct output.

Por lo tanto, he resuelto algunos problemas, pero aún queda mucho trabajo de prueba y error.

Ejecuta el archivo .Rnw en tu máquina y dame tu opinión. Para facilitar las cosas, he creado Rscript que recopila la información del sistema (no la información personal) que considero relevante en este caso: aquí 'el source, y aquí está mi output.

+0

Por supuesto, hay una solución alternativa: debe crear un script separado que guarde los gráficos, por lo tanto cargue el PDF con caracteres localizados con '\ includegraphics'. ¡Eso funciona! – aL3xa

+0

¿Conoces una solución para usuarios de Windows? –