簡體   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