Одноразовая команда для вязания и 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))))) ))