Emacs,R,Sweave:通过Emacs启动Sweave时无法识别UTF-8编码

Mar*_*ert 5 emacs r sweave

我使用R 2.14.0在Mac OS X 10.7.3上使用Emacs 24.我有一个foo.Rnw包含的文件

\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}
Run Code Online (Sandbox Code Playgroud)

.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")))
Run Code Online (Sandbox Code Playgroud)

如果我使用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}
Run Code Online (Sandbox Code Playgroud)

如您所见,包含非ASCII字符的第二行foo.Rnw ×被替换为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中没有工作(这非常烦人).

更新:

我的~/.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"
Run Code Online (Sandbox Code Playgroud)

按照一会的建议,我在下面提到~/.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"))
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题.

Mar*_*ert 0

最终答案可以在UPDATE下找到。

@cbeleites:我不再运行 Mac OS X(也不再运行 R 2-14),所以我无法判断。