Одноразовая команда для вязания и latexmk под Emacs + AUCtex

Я хочу связать документы AND latexmk Knitr с помощью одной команды AUCtex. Я не знаю, как кодировать на lisp, и веб-поиск ничего подобного не дал.

У меня есть что-то близкое. Расширение файла необходимо изменить на latexmk. Любая помощь будет оценена.

Следующая строка для моего .emacs файл.

(add-hook 'LaTeX-mode-hook (lambda () (push '
  ("KnitrLaTeX" "Rscript -e \"library(knitr)\; knit('%s')\" && latexmk -pdf %s" 
   TeX-run-TeX nil t :help "Run knitr and latexmk on file") 
   TeX-command-list)))

Когда я бегу C-c C-c (KnitrLaTeX), emacs запускает следующую команду:

Running `KnitrLaTeX' on `slides.Rnw' with ``Rscript -e "library(knitr); knit('slides.Rnw')" && latexmk -pdf slides.Rnw''

Что не так. Следует читать "... && latexmk -pdf slides.tex"

Заранее спасибо.

1 ответ

Решение

Похоже, что у вас возникли проблемы с тем, как второе использование %s интерпретируется в конце вашей команды компиляции - т.е. вы хотите второе использование %s означать slides.tex вместо slides.Rnw,

Хотя я не знаком с knitЯ знаком с созданием пользовательских переменных для использования с AUCTeX. Ниже приведены некоторые примеры того, как создавать собственные переменные и добавлять их в TeX-expand-list,

Вместо того, чтобы использовать %s во второй раз (т. е. в хвостовой части команды компиляции), возможно, стоит рассмотреть возможность использования %(tex-file-name) вместо. Это предполагает, что ваш *.tex файл открыт в буфере с фокусом, когда вы начинаете свою команду компиляции - т.е. полное имя файла будет вставлено в вашу команду компиляции.

Если у вас есть файл с другим расширением, который открывается в буфере с фокусом при запуске команды компиляции, и если вы хотите, чтобы базовое имя было таким же (но с другим расширением), то вы бы сделали что-то похожее на пример %(pdf-file-name) - то есть, удалите любое расширение и замените его новым.

(eval-after-load "tex" '(progn

  (add-to-list 'TeX-expand-list '("%(tex-file-name)" (lambda ()
    (concat "\"" (buffer-file-name) "\""))))

  (add-to-list 'TeX-expand-list '("%(pdf-file-name)" (lambda ()
    (concat
      "\"" (car (split-string (buffer-file-name) "\\.tex"))
      ".pdf" "\""))))

  (add-to-list 'TeX-expand-list '("%(line-number)" (lambda ()
    (format "%d" (line-number-at-pos))))) ))
Другие вопросы по тегам