Как создать PDF из файла Rmd, используя Emacs, ESS, pandoc-mode и polymode?

Это адаптация "классического" Rmd-файла, который я хочу связать в формате PDF, используя Emacs (Emacs Speak Statistics) и полимод. Я не могу найти правильные команды для этого. Существует немного документации о многомоде. Я использую Emacs Starter Kit для общественных наук.

---
title: "Untitled"
author: "SB"
date: "Wednesday, February 04, 2015"
output: pdf_document
---

You can embed an R code chunk like this:

```{r}
summary(cars)
```

You can also embed plots, for example:

```{r, echo=FALSE}
plot(cars)
```

2 ответа

Решение

Как говорит доктор, используйте Mn w и Mn W, чтобы установить / изменить ткача. С ESS вы, вероятно, должны использовать knitr-ESS ткач, как он использует ток *R* процесс.

Ты можешь использовать rmarkdown::render() из пакета rmarkdown вязать .Rmd файл для уценки и визуализации выходного файла (PDF, Word, HTML и т. д.) с помощью одной команды!

Я не был уверен, если поддержка rmarkdown рабочий процесс уже был включен в ESS (и я пытаюсь побаловать себя в elisp), поэтому я написал функцию, которая вызывает rmarkdown::render() и позволяет настроить входы rmarkdown::render() вызов функции с префиксом arg (например, C-u).

;; spa/rmd-render
;; Global history list allows Emacs to "remember" the last
;; render commands and propose as suggestions in the minibuffer.
(defvar rmd-render-history nil "History list for spa/rmd-render.")
(defun spa/rmd-render (arg)
  "Render the current Rmd file to PDF output.
   With a prefix arg, edit the R command in the minibuffer"
  (interactive "P")
  ;; Build the default R render command
  (setq rcmd (concat "rmarkdown::render('" buffer-file-name "',"
                 "output_dir = '../reports',"
                 "output_format = 'pdf_document')"))
  ;; Check for prefix argument
  (if arg
      (progn
    ;; Use last command as the default (if non-nil)
    (setq prev-history (car rmd-render-history))
    (if prev-history
        (setq rcmd prev-history)
      nil)
    ;; Allow the user to modify rcmd
    (setq rcmd
          (read-from-minibuffer "Run: " rcmd nil nil 'rmd-render-history))
    )
    ;; With no prefix arg, add default rcmd to history
    (setq rmd-render-history (add-to-history 'rmd-render-history rcmd)))
  ;; Build and evaluate the shell command
  (setq command (concat "echo \"" rcmd "\" | R --vanilla"))
  (compile command))
(define-key polymode-mode-map (kbd "C-c r")  'spa/rmd-render)

Обратите внимание, что у меня есть некоторые конкретные настройки параметров, такие как output_dir = '../reports' но elisp можно легко настроить в соответствии с вашими потребностями.

С этим в вашем файле инициализации, вам нужно всего лишь ввести C-c r изнутри вашего .Rmd файл (или C-u C-c r для рендеринга в другой формат, местоположение и т. д.). Команда откроет новое окно с буфером *compilation* где любые ошибки появятся.

Это, безусловно, можно улучшить, и я хотел бы услышать предложения.

Другие вопросы по тегам