繁体   English   中英

ESS / AucTeX / Sweave集成

[英]ESS/AucTeX/Sweave integration

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

我想设置AucTeX以识别.Rnw文件,因此我可以使用Cc Cc.Rnw文件上运行LaTeX并自动获取.dvi文件。 我认为编辑.emacs文件非常易于管理,但我仍然没有牢牢掌握Elisp

还有一个问题很烦人 - 不知何故, LaTeXSweave.sty没有识别\\usepackage{Sweave} ,所以我实际上需要复制Sweave.sty文件(在我的案例中位于/usr/share/R/texmf/Sweave.sty )到.Rnw文件所在的目录(由于这是Windows平台上的常见错误,我变得更加沮丧!)

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

  • 如何使LaTeX识别\\usepackage{Sweave}Sweave.stySweave.sty复制到“home”文件夹)[ 编辑:设法做到这一点; 在Dirk回答后看评论]
  • 如何设置AucTeX.Rnw文件编译为.dvi

这是两个不同的问题。

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

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

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

简短而高效的谷歌搜索后,我发现这个链接 ,乍看之下,似乎一切都OK,但PDF文件被Sweaving后出现乱码......所以,我的另一种方式解决围绕这个问题: 有疑问时,去舞会 我从这里可用的Dirk的Sweave bash脚本中无耻地窃取了错误检查功能。 基本上,这是一个解决方法: R CMD Sweave.Rnw文件上执行,因此latex进来了,之后是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))))

当然,您可以更改键绑定以满足您的需求,并确保使用/usr/bin/脚本名称更改sweave

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

在此解决方法之前,我不得不将Mn s用于Sweave,然后是Cc Cc ,它是AucTeX中用于LaTeX文件编译的默认键绑定。 生成的文件是错误的,所以我不得不尝试使用bash。 这对我有用,如果您有任何建议,请告诉我。

亲切的问候,
aL3xa

编辑:
插入了cd $FILEPATH

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM