让Emacs在编织后自动乳胶化您的Rnw文件

我想在编织.Rnw文件后启动一个LaTeX.元代码应该是这样的:

(defun knit ()
  (interactive)
  (setq rproc (ess-get-process ess-current-process-name))
  (setq c "knit('foo.rnw')\n")
  (process-send-string rproc c)
  ;; Wait for ESS to finish 
  (shell-command-to-string   "cd foo/path & pdflatex foo"))

主要问题是让Emacs等待劣质缓冲区完成编织,并且只有在开始胶乳之后.我找到了几个有趣的函数:(ess-wait-for-process …)和(劣质ess-mark-as-busy ……)`,这可能有用,但我无法理解如何.

请注意(shell-command-to-string …仅用于说明.最终选择可能是:

(TeX-command "LaTeX" 'rnw-to-tex-ext -1))

knit2pdf()可能是另一条路,但我将失去AUCTeX的好处.

PS:我的问题被SE机器人视为“主观且可能被关闭”!

最佳答案 我使用texi2pdf并且在编织后让R做它,但这显然相当于knit2pdf.我想知道你是否可以使用系统在编织命令之后调用你想要的任何tex命令,类似于我如何使用texi2pdf.

我不是emacs专家,但是我在.emacs文件中的功能是值得的.

; use knitr (was Sweave) script as compile function for Rnw files
(defun ess-swv-SweaveSh ()
  "Use knitr script to knit an Rnw file and create a pdf."
  (interactive)
  (let 
    ((compilation-buffer-name-function (function (lambda(ign)(concat "*" (buffer-file-name) "*")))))
    (compile  (concat "Rscript -e \".n <- '" (buffer-file-name) "'; library(knitr); knit(.n); library(tools); texi2pdf(sub('Rnw$','tex',.n))\"" ))
  )
)
点赞