如何使用Emacs,ESS,pandoc-mode和polymode从Rmd文件创建pdf?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Emacs,ESS,pandoc-mode和polymode从Rmd文件创建pdf?相关的知识,希望对你有一定的参考价值。

这是对“经典”Rmd文件的改编,我希望使用Emacs(Emacs Speak Statistics)和多态编码将其编织为pdf。我无法找到正确的命令来做到这一点。关于polymode的文档很少。我正在使用社交科学的Emacs入门套件。

---
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)
```
答案

由于doc says使用M-n w和M-n W来设置/改变编织者。使用ESS,您可能应该使用knitr-ESS weaver,因为它使用当前的*R*进程。

另一答案

您可以使用rmarkdown::render()中的rmarkdown package.Rmd文件编织为markdown并使用单个命令渲染输出文件(PDF,Word,html等)!

我不确定是否支持rmarkdown工作流程已经包含在ESS中(我试图涉及elisp)所以我编写了一个调用rmarkdown::render()的函数,并允许使用前缀arg自定义rmarkdown::render()函数调用的输入(例如,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可以很容易地定制,以满足您的需求。

在你的init文件中,你只需要从你的C-c r文件中输入.Rmd(或者C-u C-c r来渲染到不同的格式,位置等)。该命令将打开一个新窗口,其中包含一个名为*compilation*的缓冲区,其中将显示任何错误。

这肯定可以改善,我很乐意听到建议。

以上是关于如何使用Emacs,ESS,pandoc-mode和polymode从Rmd文件创建pdf?的主要内容,如果未能解决你的问题,请参考以下文章

Emacs和ESS的使用技巧。

是否有可能在 Emacs ESS 中获得类似于 Rstudio 中可用的 R 代码完成?

pandoc-mode:如何用pandoc-mode表达pandoc命令选项?

用于 R 项目/包开发的 ESS 工作流

如何让 Emacs 使用我的 .bashrc 文件?

如何修复 emacs 24 中的 javascript 模式更改?