在Emacs + AUCtex下一次性命令编织和latexmk

时间:2013-10-25 00:33:04

标签: emacs knitr auctex latexmk

我想使用一个AUCtex命令编织AND latexmk Knitr文档。 我不知道如何在lisp中编码,并且网络搜索没有出现这样的内容。

我有一些接近的东西。需要为latexmk更改文件的扩展名。 任何帮助将不胜感激。

以下行是我的.emacs文件。

(add-hook 'LaTeX-mode-hook (lambda () (push '
  ("KnitrLaTeX" "Rscript -e \"library(knitr)\; knit('%s')\" && latexmk -pdf %s" 
   TeX-run-TeX nil t :help "Run knitr and latexmk on file") 
   TeX-command-list)))

当我运行C-c C-c (KnitrLaTeX)时,emacs运行以下命令:

Running `KnitrLaTeX' on `slides.Rnw' with ``Rscript -e "library(knitr); knit('slides.Rnw')" && latexmk -pdf slides.Rnw''

哪个错了。它应该是"... && latexmk -pdf slides.tex"

提前致谢。

1 个答案:

答案 0 :(得分:5)

您似乎在编译命令的尾部如何解释%s第二次用法时遇到问题 - 即,您希望使用%s表示slides.tex而不是slides.Rnw

虽然我不熟悉knit,但我熟悉创建用于AUCTeX的自定义变量。下面列出了一些如何创建自定义变量并将其添加到TeX-expand-list

的示例

不是将%s用于第二时间(即编译命令尾部的 ),而是考虑使用{{1}而是。这假设您的* .tex文件在开始编译命令时在焦点缓冲区中打开 - 即,完整的文件名将插入到编译命令中。

如果您在运行编译命令时在缓冲区中打开了具有焦点的不同扩展名的文件,并且您希望基本名称相同(但具有不同的扩展名),那么您将执行与%(tex-file-name)的例子类似的东西 - 即删除那里的任何扩展名并将其替换为新的扩展名。

%(pdf-file-name)