ОБНОВИТЬ
В СЗС 19.04, то ess-nowebи ess-swvбиблиотеки устарели:
Следовательно, мой оригинальный ответ (ниже) больше не применяется. Функции, которые эти библиотеки использовали для обеспечения, теперь предоставляются в режиме polymode, а конфигурация стала проще. Чтобы получить минимальную поддержку, все, что вам нужно, это установить пакеты ess, polymodeи poly-R(из MELPA или из исходного кода, если вы так работаете).
Это оно! Теперь, если вы откроете Rnwфайл, вы должны увидеть PM-Rnwфлаг на моделине, и Polymodeвверху будет меню. Вы можете ткать свой файл в .texфайл через M-n w(или в меню ПОЛИМОДЫ), и экспортировать его .pdfчерез M-n e(или в меню). Вам будет предложено для экспортера в первый раз, когда вы это сделаете; Я только что выбрал knitr.
ПРИМЕЧАНИЕ: export ( M-n e) автоматически запускает ваш код, генерирует PDF-файл и отображает его - все сразу. Мне не удалось получить такое поведение «одним щелчком» со старой версией, описанной ниже.
Сгенерированные файлы будут иметь слово -wovenи -exportedдобавлены. Если вам это не нравится, вы можете настроить параметры polymode-weaver-output-file-formatи polymode-exporter-output-file-format.
Процесс аналогичен для файлов RMarkdown ( .Rmd).
Полная информация приведена в руководстве по использованию полимодов.
Оригинальный ответ (устарел после ESS 19.04)
Три переменные должны быть установлены:
ess-swv-pdflatex-commands, в группе настройки ess-sweaveдолжна быть «pdflatex» в качестве первой команды. т.е. это должно выглядеть примерно так:("pdflatex" "texi2pdf" "make")
ess-swv-processorв группе настройки ess-Rдолжно быть значение"knitr"
ess-pdf-viewer-prefв группе настройки essна "emacsclient". Предполагается, что вы используете сервер emacs или emacs работает в режиме --daemon. Вам также следует использовать pdf-инструменты, если это вообще возможно, так как это гораздо предпочтительнее встроенного средства просмотра PDF Emacs.
Я использую ловушку, чтобы добавить две комбинации клавиш для вызова BibTeX и texi2pdf:
(add-hook 'ess-noweb-mode-hook 'my-noweb-hook)
(defun my-noweb-hook ()
(define-key ess-noweb-mode-prefix-map "b"
#'(lambda () (interactive) (TeX-command "BibTeX" 'TeX-master-file)))
(define-key ess-noweb-mode-prefix-map "P"
#'(lambda () (interactive)
(ess-swv-PDF "texi2pdf"))))
Как только это будет сделано, M-n sсвяжет ваш документ, M-n bскомпонует его и M-n Pобработает с помощью pdflatex.
Обратите внимание, что у Emacs нет простого способа узнать, когда вязание завершено, поэтому вы не можете настроить его на knit & latex за один шаг; Вы должны вручную запустить pdflatex после того, как увидите, что вязание закончено.
Учитывая несколько шагов здесь - Rnw -> Latex -> PDF, я не думаю, что вы можете заставить Synctex сохранить ваши pdf и Rnw файлы для совместной прокрутки, но я был бы рад, если бы я оказался неправ.
Что касается расположения окон, я никогда не смогу заставить их оставаться там, где я хочу. Поэтому, чтобы компенсировать это, я стал достаточно искусным в перетасовке окон и буферов, когда они мне нужны;)
Yihui разместил короткое видео на сайте knitr, демонстрирующее некоторые из них.
rmarkdown::render(черезshell-command) на текущемbuffer-file-name, которая обновит pdf в другом окне.