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.Rnw
z 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.
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ć). –
Wielkie dzięki, Yihui. Jak widać z mojego ** UPDATE ** powyżej, rozwiązało to problem. –
@MariusHofert: nawet jeśli jest już rozwiązany: czy 'Sweave (" foo.Rnw ", encoding =" utf8 ")' pomóc? – cbeleites