【问题标题】:ESS/AucTeX/Sweave integrationESS/AucTeX/Sweave 集成
【发布时间】:2010-05-30 23:49:08
【问题描述】:

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

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

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

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

  • 如何让LaTeX 识别\usepackage{Sweave}(无需每次都将Sweave.sty 复制到“home”文件夹)[编辑: 设法做到了;见 Dirk 回答后的评论]
  • 如何设置 AucTeX 以将 .Rnw 文件编译为 .dvi

【问题讨论】:

    标签: emacs r latex sweave ess


    【解决方案1】:

    这是两个不同的问题。

    对于第一个,我的 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。

    【讨论】:

    • 感谢您提供关于第一个的信息。我设法通过将Sweave.sty 文件放入/usr/share/texmf-dist/tex/latex/Sweave 来做到这一点,因此从texconfig 更新数据库。所以这给我留下了#2。顺便说一句,我在 SO 上看到了你的脚本,我正在考虑绑定一个 bash 命令以在 .Rnw 上运行作为一种解决方法,直到我弄清楚如何做 AucTeX 部分。
    【解决方案2】:

    经过简短有效的谷歌搜索后,我找到了this link,乍一看,一切似乎都很好,但 pdf 文件在 Sweaving 后出现乱码......所以我用另一种方式解决了这个问题:when in怀疑,去bash!我从可用的 Dirk 的 Sweave bash 脚本here 中无耻地窃取了错误检查功能。基本上,这是一种解决方法: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))))
    

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

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

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

    亲切的问候,
    aL3xa

    编辑:
    插入cd $FILEPATH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      相关资源
      最近更新 更多