ESS / AucTeX / Sweave интеграция - PullRequest
7 голосов
/ 31 мая 2010

Я использую дистрибутив GNU / Linux (Arch, если это актуально), Emacs v23.2.1, ESS v5.9 и AucTeX v11.86.

Я хочу настроить AucTeX для распознавания .Rnw файлов, чтобы я мог запустить LaTeX для .Rnw файлов с 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 в «домашнюю» папку каждый раз) [ Edit: удалось это сделать; см. комментарий после ответа Дирка]
  • как настроить AucTeX для компиляции .Rnw файлов в .dvi

Ответы [ 2 ]

6 голосов
/ 31 мая 2010

Это два разных вопроса.

Во-первых, мои пакеты Debian R обеспечивают наличие мягкой ссылки из каталога $RHOME/share/texmf/ в дерево файловой системы TeX, например, как /usr/share/texmf/tex/latex/R.

По второму вопросу: не знаю. Я склонен запускать Sweave с помощью небольшого сценария оболочки, который я создал несколько лет назад, хотя я занимаюсь всем редактированием в Emacs.

Редактирование, несколько месяцев спустя: Используйте ESS, а не AucTeX. Затем M-n s (то есть Alt-n, а затем s) запускает шаг Sweave, а M-n P запускает компиляцию LaTeX с вызовом Bibtex, если это необходимо.

5 голосов
/ 01 июня 2010

После недолгого и эффективного поиска в Google, я нашел эту ссылку , и на первый взгляд все кажется в порядке, но pdf-файл искажается после Sweaving ... Поэтому я решил эту проблему по-другому: если сомневаешься, иди bash ! Я бесстыдно похитил функцию проверки ошибок из сценария Дирка Sweash 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))))

Конечно, вы можете изменить привязку клавиш в соответствии с вашими потребностями, и обязательно измените sweave с именем скрипта в /usr/bin/.

Имейте в виду, что это не ответ, а обходной путь. Если вы нашли способ справиться с интеграцией AucTeX / ESS / Sweave, опубликуйте его, и я поставлю галочку.

До этого обхода я должен был сделать M-n s для Sweave, а затем C-c C-c, который является привязкой по умолчанию в AucTeX для компиляции файла LaTeX. Произведенный файл ошибочен, поэтому мне пришлось попробовать его с bash. Это работает для меня, если у вас есть какие-либо предложения, пожалуйста, дайте мне знать.

С уважением,
aL3xa

EDIT:
Вставлено cd $FILEPATH

...