AKTUALISIEREN
Ab ESS 19.04 sind die Bibliotheken ess-noweb
und ess-swv
veraltet:
Folglich gilt meine ursprüngliche Antwort (unten) nicht mehr. Die Funktionen, die diese Bibliotheken zur Verfügung stellen, werden jetzt im Polymode bereitgestellt, und die Konfiguration ist einfacher. Um minimale Unterstützung zu erhalten, alles , was Sie brauchen , ist die Installation ess
, polymode
und poly-R
Pakete (von Melpa, oder von der Quelle , wenn das ist , wie Sie rollen).
Das ist es! Wenn Sie nun eine Rnw
Datei öffnen , sollten Sie PM-Rnw
die Markierung in der Modeline sehen und es wird ein Polymode
Menü oben angezeigt . Sie können Ihre Datei .tex
über M-n w
(oder das Polymode-Menü) in eine Datei verweben und .pdf
über M-n e
(oder das Menü) in eine Datei exportieren . Wenn Sie dies zum ersten Mal tun, werden Sie aufgefordert, einen Exporteur anzugeben. Ich habe gerade gepflückt knitr
.
HINWEIS: exporting ( M-n e
) führt Ihren Code automatisch aus, generiert das PDF und zeigt es auf einmal an. Ich konnte dieses "Ein-Klick" -Verhalten mit der alten, unten beschriebenen Version nicht erzielen.
Die erzeugten Dateien werden das Wort haben -woven
und -exported
angehängt. Wenn Ihnen das nicht gefällt, können Sie die Optionen polymode-weaver-output-file-format
und anpassen polymode-exporter-output-file-format
.
Der Vorgang ist für RMarkdown-Dateien ( .Rmd
) ähnlich .
Ausführliche Informationen finden Sie im Polymode-Handbuch
Ursprüngliche Antwort (veraltet nach ESS 19.04)
Drei Variablen müssen gesetzt werden:
ess-swv-pdflatex-commands
In der Anpassungsgruppe ess-sweave
muss "pdflatex" als erster Befehl angegeben werden. Das heißt, es sollte ungefähr so aussehen:("pdflatex" "texi2pdf" "make")
ess-swv-processor
sollte in der Anpassungsgruppe ess-R
der Wert sein"knitr"
ess-pdf-viewer-pref
in der Anpassungsgruppe ess
zu "emacsclient"
. Dies setzt voraus, dass Sie den Emacs-Server ausführen oder dass der Emacs im --daemon-Modus ausgeführt wird. Sie sollten nach Möglichkeit auch PDF-Tools verwenden , da dies dem integrierten Emacs-PDF-Viewer weit vorzuziehen ist.
Ich benutze einen Haken, um zwei Tastenkombinationen zum Aufrufen von BibTeX und texi2pdf hinzuzufügen:
(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"))))
Sobald dies erledigt ist, M-n s
wird Ihr Dokument gestrickt, M-n b
bibtex und M-n P
mit pdflatex verarbeitet.
Beachten Sie, dass es für Emacs keine einfache Möglichkeit gibt, festzustellen, wann das Stricken abgeschlossen ist. Sie können dies also nicht in einem Schritt auf Stricken und Latex einstellen. Sie müssen pdflatex manuell auslösen, nachdem Sie gesehen haben, dass das Stricken beendet ist.
Angesichts der vielen Schritte hier - Rnw -> Latex -> PDF, glaube ich nicht, dass Sie Synctex dazu bringen können, Ihre PDF- und Rnw-Dateien zusammen zu scrollen, aber ich würde mich freuen, wenn ich mich als falsch erweisen würde.
Was die Fensteranordnung betrifft, kann ich sie niemals dazu bringen, dort zu bleiben, wo ich sie haben möchte. Um das zu kompensieren, bin ich ziemlich geschickt darin geworden, Fenster und Puffer so zu mischen, wie ich sie brauche;)
Yihui hat ein kurzes Video auf der Knitr-Site gepostet, das einige davon demonstriert.
rmarkdown::render
(viashell-command
) auf dem aktuellenbuffer-file-name
, die das PDF im anderen Fenster aktualisiert.