2012-02-29 12 views
5

Pracuję z Emacsem 24 na Mac OS X 10.7.3 z R 2.14.0. Mam plik foo.Rnw zawierającyEmacs, R, Sweave: kodowanie UTF-8 nie jest rozpoznawane podczas uruchamiania Sweave przez 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} 

My .emacs do pracy z Sweave wygląda następująco:

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

Jeśli używam C-c C-c a następnie wybierz Sweave plik .tex wygląda następująco:

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

Jak widać, druga linia foo.Rnw zawierająca znak spoza ASCII × zostaje zastąpiony przez NA. Mogę dowiedzieć się, że ma to związek z lokalizacji, w których R trasy (patrz również wyjście locale: [1] C. Mogłem to wypowiedzi postaci export LC_MESSAGES="en_US.UTF-8" w moim .bashrc tak że R dostaje prawidłową locale. Mogę również doskonale wykorzystać R CMD Sweave foo.Rnwz terminala (który oczywiście ładuje .bashrc i tym samym ustawia locale poprawnie) .To pytanie brzmi: Jak mogę sprawić, aby działało przez Emacs, tak, że mogę uruchomić Sweave poprzez C-c C-c Sweave? Wiem, że Emacs nie jest świadomy zmiennych ustawionych w .bashrc, ale w jaki sposób mogę zagwarantować, że usługa R CMD Sweave wydana przez Emacs działa z tą samą lokalizacją, co podczas wykonywania jej z terminala?

Znalazłem kilka postów dotyczących tego problemu, ale nie znalazłem rozwiązania dla komputerów Mac i programu Emacs. Znowu zauważ, że mogę doskonale uruchomić R CMD Sweave foo.Rnw z terminala (z powodu moich ustawień w .bashrc) - większość postów rozwiązuje ten problem - po prostu nie działa z poziomu Emacsa (co jest dość denerwujące).

UPDATE:

My ~/.bashrc zawiera:

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" 

Idąc za radą Yihui, umieścić w następujących w moim ~/.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")) 

To rozwiązało problem.

+0

Jeśli jesteś bardzo pewny, że wszystkie twoje dokumenty są zakodowane w UTF8, możesz użyć 'Sys.setlocale()' w swoim '~/.Rprofile' (nie całkiem to polecam). Problemy z kodowaniem są trudne. Zastanawiam się, jak działa mój pakiet knitr w tym przypadku (nie mam komputera Mac, więc nie mogę powiedzieć). –

+0

Wielkie dzięki, Yihui. Jak widać z mojego ** UPDATE ** powyżej, rozwiązało to problem. –

+0

@MariusHofert: nawet jeśli jest już rozwiązany: czy 'Sweave (" foo.Rnw ", encoding =" utf8 ")' pomóc? – cbeleites

Odpowiedz

0

Ostateczna odpowiedź znajduje się pod UPDATE.

@cbeleites: Nie uruchamiam już Mac OS X (ani R 2-14), więc nie mogę powiedzieć.

Powiązane problemy