首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Emacs,R,Sweave:通过Emacs启动Sweave时不识别UTF-8编码

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

Stack Overflow用户
提问于 2012-02-29 10:44:11
回答 1查看 1.2K关注 0票数 5

我在MacOSX10.7.3和R2.14.0上使用Emacs 24。我有一个文件foo.Rnw包含

代码语言:javascript
复制
\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}

我用于使用Sweave的.emacs如下所示:

代码语言:javascript
复制
(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文件如下所示:

代码语言:javascript
复制
\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}

如您所见,包含非ASCII字符×的第二行×NA替换。我可以发现这与R运行的本地化有关(请参见locale: [1] C的输出)。我可以在我的.bashrc中包含表单.bashrc的语句,这样R就可以得到正确的locale。我还可以从终端完美地使用R CMD Sweave foo.Rnw (当然,终端加载.bashrc,从而正确地设置locale )。问题是:如何使它通过Emacs工作,这样我就可以通过C-c C-c Sweave运行Sweave了?我知道Emacs不知道.bashrc中设置的变量,但是我如何保证从Emacs发出的R CMD Sweave与在终端执行时相同的本地化运行呢?

我找到了几个关于这个问题的帖子,但是对于Mac和Emacs内部没有解决方案。同样,请注意,我可以在终端上完美地运行R CMD Sweave foo.Rnw (由于我在.bashrc中的设置) --大多数帖子都解决了这个问题--它只是无法在Emacs内部工作(这很烦人)。

更新:

我的~/.bashrc包含:

代码语言:javascript
复制
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"

根据一辉的建议,我在我的~/.Rprofile中输入了以下内容

代码语言:javascript
复制
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"))

这解决了问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-22 13:25:52

最后的答案可以在更新下找到。

@cbeleites:我不再运行Mac (也不是R2-14),所以我无法判断。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9497621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档