2010-05-30 26 views
6

我使用的是GNU/Linux發行版(Arch,如果相關的話),Emacs v23.2.1,ESS v5.9和AucTeX v11.86。ESS/AucTeX/Sweave整合

我想設置AucTeX承認.Rnw文件,這樣我就可以C-c C-c.Rnw文件運行乳膠,並自動獲得的.dvi文件。我認爲通過編輯.emacs文件很容易管理,但我仍然沒有牢牢把握Elisp

另一個問題是很煩人的 - 不知何故,乳膠是不承認的文件前言\usepackage{Sweave},所以我真的需要複製Sweave.sty文件(在我的情況下,位於/usr/share/R/texmf/Sweave.sty)到.Rnw文件所在目錄( !和我成爲的事實,這是在Windows平臺上常見的錯誤愈挫)

我的問題可以歸結爲兩個問題:

  • 如何使晚X識別\usepackage{Sweave}(每次不復制Sweave.sty到「home」文件夾)[編輯:設法做到這一點;看到]德克的回答後評論
  • 如何設置AucTeX編譯.Rnw文件的.dvi

回答

6

這是兩個不同的問題。

對於第一個,我的Debian R軟件包確保有一個從$RHOME/share/texmf/目錄到TeX文件系統樹的軟鏈接,例如,如/usr/share/texmf/tex/latex/R

對於第二個問題:不知道。我傾向於通過幾年前製作的小型shell腳本運行Sweave,儘管我在Emacs中進行了所有編輯。

編輯,幾個月後:使用ESS,而不是AucTeX。然後M-n s(即Alt-n後跟s)運行Sweave步驟,M-n P運行LaTeX編譯,並根據需要調用Bibtex。

+0

感謝您的第一個信息。我設法通過將'Sweave.sty'文件放在'/ usr/share/texmf-dist/tex/latex/Sweave'中,從而更新'texconfig'數據庫。因此,我留下了#2。順便說一句,我看到你的腳本是這樣的,我正在考慮綁定一個bash命令來運行.Rnw作爲一個解決方法'直到我找出如何做AucTeX部分。 – aL3xa 2010-05-31 00:46:35

5

經過簡短而有效的谷歌搜索,我發現this link,乍一看,一切似乎都行,但pdf文件在清理後出現亂碼......所以我用另一種方式解決了這個問題:bash!我無恥地從Dirk的Sweave bash腳本here竊取了錯誤檢查功能。基本上,這是一個解決辦法: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集成的方法,請發佈它,然後我會給它一個複選標記。

在此解決方法之前,我必須對Sweave執行M-n s,然後執行C-c C-c這是AucTeX中用於LaTeX文件編譯的默認keybind。生成的文件是錯誤的,所以我不得不用bash嘗試一下。它適用於我,如果您有任何建議,請讓我知道。

親切的問候,
aL3xa

編輯:
插入cd $FILEPATH