7

我正在使用 GNU/Linux 发行版(Arch,如果相关)、Emacs v23.2.1、ESS v5.9 和 AucTeX v11.86。

我想设置AucTeX来识别.Rnw文件,所以我可以在.Rnw文件上运行LaTeX并自动获取.dvi文件。我认为通过编辑 .emacs 文件很容易管理,但我仍然没有牢牢掌握ElispC-c C-c

还有一个问题很烦人 - 不知何故,LaTeX无法在序言中识别\usepackage{Sweave},所以我实际上需要将Sweave.sty文件(在我的情况下位于/usr/share/R/texmf/Sweave.sty)复制到.Rnw文件所在的目录(而且我越来越沮丧的是这是 Windows 平台上的常见错误!)

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

  • 如何使LaTeX识别\usepackage{Sweave}(无需Sweave.sty每次都复制到“主”文件夹)[编辑:设法做到这一点;见德克回答后的评论]
  • 如何设置AucTeX.Rnw文件编译为.dvi
4

2 回答 2

6

这是两个不同的问题。

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

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

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

于 2010-05-31T00:04:32.850 回答
5

经过简短而有效的谷歌搜索,我找到了这个链接,乍一看,一切似乎都很好,但是在 Sweaving 之后 pdf 文件变得乱码......所以我用另一种方式解决了这个问题:当有疑问时,去bash!我从这里提供的 Dirk 的 Sweave bash 脚本中无耻地窃取了错误检查功能。基本上,这是一种解决方法:R CMD Sweave.Rnw文件上执行,因此乳胶进入,然后是pdflatex ......

我将发布一个为我完成这项工作的 bash 脚本。我必须声明我不是高级 bash 程序员,而且我什至不是职业程序员,所以这个脚本很有可能被优化/正确编写。开始:

#!/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文件中:

(global-set-key (kbd "C-c s")
        (lambda ()
          (interactive)
          (shell-command (concat "sweave " buffer-file-name))))

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

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

在此解决方法之前,我必须使用M-n sSweave,然后C-c C-c是 AucTeX 中用于 LaTeX 文件编译的默认键绑定。生成的文件是错误的,所以我不得不尝试使用 bash。它对我有用,如果您有任何建议,请告诉我。

亲切的问候,
aL3xa

编辑:
插入cd $FILEPATH

于 2010-05-31T22:03:17.957 回答