2012-02-29 2 views
5

Я работаю с Emacs 24 на Mac OS X 10.7.3 с R 2.14.0. У меня есть файл foo.Rnw содержащийEmacs, R, Sweave: кодировка UTF-8 не распознается при запуске Sweave через 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} 

Мои .emacs для работы с Sweave выглядит следующим образом:

(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"))) 

Если я использую C-c C-c, а затем выбрать Sweave, файл .tex выглядит следующим образом:

\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} 

Как вы можете видеть, вторая строка foo.Rnw, содержащая символ не ASCII × заменяется на NA. Я мог бы понять, что это связано с локализацией, в котором R работает (см также вывод locale: [1] C. Я мог бы включать заявления о форме export LC_MESSAGES="en_US.UTF-8" в моем .bashrc так что R получает правильный locale. Я также прекрасно использовать R CMD Sweave foo.Rnwот терминала (который, конечно же, загружает .bashrc и таким образом устанавливает locale). Вопрос в следующем: как я могу заставить его работать через Emacs, чтобы я мог запускать Sweave через C-c C-c Sweave? Я знаю, что Emacs не знает о переменных, установленных в .bashrc, но как я могу гарантировать, что R CMD Sweave, выпущенный Emacs, работает с той же локализацией, что и при его выполнении с терминала?

Я нашел несколько сообщений по этой проблеме, но не было решения для Mac и из Emacs. Еще раз отметим, что я отлично могу запустить R CMD Sweave foo.Rnw с терминала (из-за моих настроек в .bashrc) - большинство сообщений ссылаются на эту проблему - она ​​просто не работает из Emacs (что довольно неприятно).

UPDATE:

Мои ~/.bashrc содержит:

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" 

Следуя советам Yihui, я ставлю в следующее в моих ~/.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")) 

Это решило проблему.

+0

Если вы уверены, что все ваши документы закодированы в UTF8, вы можете использовать 'Sys.setlocale()' в вашем '~/.Rprofile' (я не совсем рекомендую это, хотя). Проблемы с кодированием сложны. Мне интересно, как работает мой пакет knitr в этом случае (у меня нет Mac, поэтому я не могу сказать). –

+0

Большое спасибо, Yihui. Как вы можете видеть из моего ** ОБНОВЛЕНИЯ ** выше, это решило проблему. –

+0

@MariusHofert: даже если он решен сейчас: 'Sweave (" foo.Rnw ", encoding =" utf8 ")' help? – cbeleites

ответ

0

Окончательный ответ может быть найден в ОБНОВЛЕНИЕ.

@cbeleites: Я больше не запускаю Mac OS X (ни R 2-14), поэтому я не могу сказать.

Смежные вопросы