首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ESS/AucTeX/Sweave一体化

ESS/AucTeX/Sweave一体化
EN

Stack Overflow用户
提问于 2010-05-30 23:49:08
回答 2查看 3.1K关注 0票数 7

我使用的是GNU/Linux发行版(Arch,如果相关的话)、Emacsv23.2.1、ESSv5.9和AucTeX v11.86。

我想设置AucTeX来识别.Rnw文件,这样我就可以使用C-c C-c.Rnw文件上运行LaTeX,并自动获得.dvi文件。我认为通过编辑.emacs文件是很容易管理的,但我仍然没有对Elisp有一个确切的掌握。

还有一个问题很烦人--不知怎么的,LaTeX没有在序言中识别\usepackage{Sweave},所以我实际上需要将Sweave.sty文件(在我的例子中位于/usr/share/R/texmf/Sweave.sty中)复制到.Rnw文件所在的目录中(这是Windows平台上常见的bug,这让我越来越沮丧!)

我的问题归结为两个问题:

  • 如何使LaTeX识别\usepackage{Sweave} (每次不将Sweave.sty复制到"home“文件夹)编辑:成功地做到了这一点;参见Dirk回答后的评论
  • 如何设置AucTeX将.Rnw文件编译为.dvi
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-31 00:04:32

这是两个不同的问题。

对于第一个,我的Debian包确保有一个从$RHOME/share/texmf/目录到TeX文件系统树的软链接,例如/usr/share/texmf/tex/latex/R

关于第二个问题:不知道。我倾向于通过我几年前制作的一个小shell脚本运行Sweave,尽管我在Emacs中做了所有的编辑工作。

编辑,几个月后:使用ESS,而不是AucTeX。然后M-n s (即Alt后面跟着s)运行Sweave步骤,M-n P运行LaTeX编译,并在需要时调用Bibtex。

票数 6
EN

Stack Overflow用户

发布于 2010-05-31 22:03:17

在简单高效的谷歌搜索之后,我找到了此链接,乍一看,一切似乎都还好,但是pdf文件在Sweaving之后被混淆了。因此,我以另一种方式解决了这个问题:当有疑问时,请转到bash!我无耻地从Dirk的Sweave bash脚本中窃取了错误检查功能,提供了这里。基本上,这是一种解决办法:R CMD Sweave.Rnw文件上执行,因此latex进入,pdflatex之后.

我会发布一个bash脚本来完成我的工作。我必须声明,我不是一个高级bash程序员,而且我甚至不是一个职业程序员,所以这个脚本很有可能被适当地优化/编写。下面是:

代码语言:javascript
复制
#!/bin/bash

FILEBASE=${1%.*}
FILEXT=${1##*.}
FILEPATH=${1%/*}

TEXFILE=$FILEBASE.tex
PDFFILE=$FILEBASE.pdf

# errorexit

function errorexit () {
    echo "Error: $1"
    exit 1
}

# check if file exists
if [ ! -f $1 ]; then
    errorexit "File $1 not found!"
else
# check for filename length
    if [ ${#1} -lt 1 ]; then
    errorexit "Need to specify argument file!"
    else
    # if filelength OK, check extension
    if [ $FILEXT != "Rnw" ]; then
        errorexit "You must pass Sweave (.Rnw) file!"
        # finally, run Sweave
    else
        cd $FILEPATH && R CMD Sweave $1
        # latex $TEXFILE
        pdflatex $TEXFILE
        # xdg-open $PDFFILE
    fi
    fi
fi

然后将此脚本保存/复制/移动到任何echo $PATH文件夹中(我的脚本保存在/usr/bin/中),并确保它的名称为sweave,或者选择您喜欢的任何名称,然后将这些行放在.emacs文件中:

代码语言:javascript
复制
(global-set-key (kbd "C-c s")
        (lambda ()
          (interactive)
          (shell-command (concat "sweave " buffer-file-name))))

当然,您可以更改键绑定以满足您的需要,并确保将sweave的脚本名称放在/usr/bin/中。

记住,这不是的一个答案,而是一个解决办法。如果您已经找到了处理AucTeX/ESS/Sweave集成的方法,那么发布它,我会给它一个复选标记。

在这个解决方法之前,我必须对Sweave执行M-n s,然后是C-c C-c,这是AucTeX中用于LaTeX文件编译的默认键绑定。生成的文件是错误的,所以我不得不尝试使用bash。这对我有用,如果你有什么建议,请告诉我。

致以亲切的问候,

aL3xa

编辑:

插入cd $FILEPATH

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

https://stackoverflow.com/questions/2940756

复制
相关文章

相似问题

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