Emacs+;下的knit和latexmk一次性命令;AUCtex

Emacs+;下的knit和latexmk一次性命令;AUCtex,emacs,knitr,auctex,latexmk,Emacs,Knitr,Auctex,Latexmk,我想使用一个AUCtex命令编织和更新xmk Knitr文档。 我不知道如何用lisp编写代码,web搜索也没有出现类似的情况 我有点事。需要为latexmk更改文件的扩展名。 任何帮助都将不胜感激 下面一行是我的.emacs文件 (添加钩子'LaTeX模式钩子(lambda()(推' (“KnitrLaTeX”“Rscript-e\”库(knitr)\;knit(“%s”)\”和&latexmk-pdf%s TeX run TeX nil t:help“在文件上运行knitr和latexmk”

我想使用一个AUCtex命令编织和更新xmk Knitr文档。 我不知道如何用lisp编写代码,web搜索也没有出现类似的情况

我有点事。需要为latexmk更改文件的扩展名。 任何帮助都将不胜感激

下面一行是我的
.emacs
文件

(添加钩子'LaTeX模式钩子(lambda()(推'
(“KnitrLaTeX”“Rscript-e\”库(knitr)\;knit(“%s”)\”和&latexmk-pdf%s
TeX run TeX nil t:help“在文件上运行knitr和latexmk”)
TeX命令列表)
当我运行
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”


提前感谢。

看来您在编译命令末尾解释
%s
的第二次用法时遇到了问题,也就是说,您希望第二次使用
%s
是指
slides.tex
而不是
slides.Rnw

虽然我不熟悉
knit
,但我熟悉创建用于AUCTeX的自定义变量。下面是一些如何创建自定义变量并将其添加到
TeX扩展列表中的示例

而不是第二次使用<代码> %s>代码>(即,在编译命令的末尾),也许可以考虑使用<代码> %(TEX文件名)< /C>。这假设在开始编译命令时,*.tex文件在缓冲区中以焦点打开,即,完整文件名将插入编译命令

如果在运行编译命令时在缓冲区中打开了一个具有不同扩展名的文件,并且该文件具有焦点,并且如果希望基名称相同(但扩展名不同),则可以执行类似于
%(pdf文件名)
--示例的操作。,拆下任何延长件,并将其更换为新的延长件

(加载“tex”后评估)(程序
(添加到列表“TeX扩展列表”(“%(TeX文件名)”(lambda()
(concat“\”(缓冲区文件名“\”))
(添加到列表“TeX扩展列表”(“%(pdf文件名)”)(lambda()
(康卡特)
“\”(car(拆分字符串(缓冲区文件名)\\.tex)
“.pdf”“\”))
(添加到列表“TeX扩展列表”(“%(行号)”(lambda)()
(格式为“%d”(位置‘‘‘‘‘)’处的行号)

我认为这可能更适合这项工作,非常好!我添加了
(添加到列表'TeX expand list'(“%(ppp文件名)”(lambda()(concat“\”(car(分割字符串(缓冲区文件名)”\\\.Rnw”)))”.TeX“\”))
,并将编译命令修改为
(添加钩子'LaTeX模式钩子(lambda()(push'('KnitrLaTeX”“Rscript-e\'library(knitr)\\);knit('%s')\”)&&latexmk-pdf%(ppp文件名)TeX run TeX nil t:help“在文件上运行knitr和latexmk”(TeX命令列表))
。修改后运行完整命令emacs的一个示例是:
Rscript-e“library(knitr);knit('slides.Rnw')”&&latexmk-pdf“[path]/slides.tex”
非常感谢!