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.Rnw
desde 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.
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). –
Muchas gracias, Yihui. Como puede ver en mi ** ACTUALIZACIÓN ** anterior, esto resolvió el problema. –
@MariusHofert: a pesar de que ahora está resuelto: ¿'Sweave (" foo.Rnw ", encoding =" utf8 ")' ayuda? – cbeleites