2012-02-29 11 views
5

trabajo con Emacs 24 en Mac OS X 10.7.3 con R 2.14.0. Tengo un archivo foo.Rnw contieneEmacs, R, Sweave: codificación UTF-8 no se reconoce cuando el lanzamiento de Sweave través de Emacs

\documentclass[ 
paper=a4,% 210mm × 297mm 
pagesize% write page size to dvi 
]{article} 

\usepackage[american]{babel} 
\usepackage{fancyvrb} 

\usepackage[utf8]{inputenc} 

\SweaveOpts{engine=R} 
\SweaveOpts{pdf=TRUE} 

\begin{document} 
Some text 
<<>>= 
sessionInfo() 
@ 
\end{document} 

Mi .emacs para trabajar con Sweave se parece a esto:

(add-hook 'Rnw-mode-hook 
    (lambda() 
    (add-to-list 'TeX-command-list 
     '("Sweave" "R CMD Sweave %s" 
      TeX-run-command nil t :help "Run Sweave") t) 
    (add-to-list 'TeX-command-list 
     '("Stangle" "R CMD Stangle %s" 
      TeX-run-command nil t :help "Run Stangle") t) 
    (setq TeX-command-default "Sweave"))) 

Si uso C-c C-c y luego elegir Sweave, el archivo .tex se ve así:

\documentclass[ 
NA 
pagesize% write page size to dvi 
]{article} 

\usepackage[american]{babel} 
\usepackage{fancyvrb} 

\usepackage[utf8]{inputenc} 




\usepackage{Sweave} 
\begin{document} 
Some text 
\begin{Schunk} 
\begin{Sinput} 
> sessionInfo() 
\end{Sinput} 
\begin{Soutput} 
R version 2.14.0 (2011-10-31) 
Platform: x86_64-apple-darwin11.2.0/x86_64 (64-bit) 

locale: 
[1] C 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

loaded via a namespace (and not attached): 
[1] tools_2.14.0 
\end{Soutput} 
\end{Schunk} 
\end{document} 

Como se puede ver, la segunda línea de foo.Rnw que contiene el carácter no ASCII × se reemplaza por NA. Podría darse cuenta de que esto tiene que ver con la localización en la que R carreras (véase también la salida de locale: [1] C. Podría incluir declaraciones de forma export LC_MESSAGES="en_US.UTF-8" en mi .bashrc modo que R tiene la correcta locale. También puedo usar perfectamente R CMD Sweave foo.Rnwdesde el terminal (que por supuesto muchas .bashrc y por lo tanto establece locale correctamente) la pregunta es:. ¿Cómo puedo hacer que funcione a través de Emacs, de modo que pueda funcionar Sweave través C-c C-c Sweave sé que Emacs no tiene conocimiento de las variables establecidas en? .bashrc, pero ¿cómo puedo garantizar que R CMD Sweave emitido desde Emacs se ejecuta con la misma localización que cuando lo ejecuto desde el terminal?

Encontré varias publicaciones para este problema, pero no hay solución para Mac y dentro de Emacs. Nuevamente, tenga en cuenta que puedo ejecutar perfectamente R CMD Sweave foo.Rnw desde el terminal (debido a mi configuración en .bashrc) - la mayoría de las publicaciones abordan este problema - simplemente no funciona desde dentro de Emacs (lo cual es bastante molesto).

ACTUALIZACIÓN:

Mi ~/.bashrc contiene:

export LC_COLLATE="en_US.UTF-8" 
export LC_CTYPE="en_US.UTF-8" 
export LC_MONETARY="en_US.UTF-8" 
export LC_TIME="en_US.UTF-8" 
export LC_MESSAGES="en_US.UTF-8" 

Siguiendo el consejo de Yihui, me puso en el siguiente en mi ~/.Rprofile:

invisible(Sys.setlocale("LC_COLLATE", "en_US.UTF-8")) 
invisible(Sys.setlocale("LC_CTYPE", "en_US.UTF-8")) 
invisible(Sys.setlocale("LC_MONETARY", "en_US.UTF-8")) 
invisible(Sys.setlocale("LC_TIME", "en_US.UTF-8")) 
invisible(Sys.setlocale("LC_MESSAGES", "en_US.UTF-8")) 

Esto resolvió el problema.

+0

Si está muy seguro de todos sus documentos están codificados en UTF-8, puede utilizar 'Sys.setlocale()' 'en su ~/.Rprofile' (no acabo recomiendo esto, sin embargo). Los problemas de codificación son complicados. Me pregunto cómo funciona mi paquete knitr en este caso (no tengo una Mac así que no puedo decir). –

+0

Muchas gracias, Yihui. Como puede ver en mi ** ACTUALIZACIÓN ** anterior, esto resolvió el problema. –

+0

@MariusHofert: a pesar de que ahora está resuelto: ¿'Sweave (" foo.Rnw ", encoding =" utf8 ")' ayuda? – cbeleites

Respuesta

0

La respuesta final se pueden encontrar en ACTUALIZACIÓN.

@cbeleites: que no se ejecutan Mac OS X más (ni R 2-14) así que no puedo decir.

Cuestiones relacionadas