2015-02-04 2 views
8

Dies ist eine Anpassung einer "klassischen" Rmd-Datei, die ich möchte stricken als pdf mit Emacs (Emacs sprechen Statistik) und polymode. Ich kann die richtigen Befehle nicht finden, um das zu tun. Es gibt wenig Dokumentation über Polymode. Ich benutze Emacs Starter Kit für die Sozialwissenschaften.Wie erstelle ich eine PDF aus einer Rmd-Datei mit Emacs, ESS, Pandoc-Modus und Polymode?

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

Antwort

6

Als doc says Verwendung M-n w und M-n W einzustellen/den Weber ändern. Mit ESS sollten Sie wahrscheinlich knitr-ESS Weber verwenden, wie es aktuellen *R* Prozess verwendet.

+1

Die Datei ist _sb_ex.Rmd_. Ich habe M-n W verwendet, um knitr-ESS und dann M-n w zu wählen, aber das Ergebnis ist ein Fehler: '> library (knitr); stricken ('sb_ex.Rmd', Ausgabe = 'sb_ex [gewebt] .md') Fehler in der Bibliothek (Knitr): Es gibt kein Paket namens 'knitr'' – sbac

+1

Es funktionierte nicht in Windows, sondern _ arbeitete in Mac OSX_. Das einzige Problem ist, dass, wenn ich versuche, "M-n e" zu verwenden, um _pandoc_ zu verwenden, um für pdf zu exportieren, ich pdf-Format als eine Option nicht sehen kann. Ich verwende dann _pandoc-mode_, um ein PDF im Emacs-Menü zu erstellen. – sbac

+0

@sbac, 'gibt es kein Paket namens \' knitr \ '' zeigt an, dass Sie dieses Paket installieren sollten, in ESS 'C-c C-e ich installiere es und dann' library (knitr) 'und du bist gesetzt. – doctorate

0

Sie rmarkdown::render() vom rmarkdown package kann eine .Rmd Datei stricken die Ausgabedatei (PDF, Word, HTML, etc.) mit einem einzigen Befehl Abschlag und macht!

war ich nicht sicher, ob die Unterstützung für einen Workflow bereits im ESS enthalten war (und ich versuche, in elisp dabble) so schrieb ich eine Funktion, die rmarkdown::render() und ermöglicht Anrufe mit einem der Eingänge rmarkdown::render() Funktionsaufruf Customizing Präfix arg (zB 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) 

Bitte beachte, dass ich einige spezifische Parameter wie output_dir = '../reports' haben aber die elisp kann leicht Ihre Bedürfnisse angepasst werden gerecht zu werden.

Damit in Ihrer init-Datei, müssen Sie nur C-c r aus Ihrem .Rmd Datei eingeben (oder C-u C-c r in ein anderes Format, Standort usw. zu machen). Der Befehl öffnet ein neues Fenster mit einem Puffer namens *compilation*, in dem Fehler angezeigt werden.

Dies könnte definitiv verbessert werden und ich würde gerne Vorschläge hören.