3

我想使用一个 AUCtex 命令编织和 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"

提前致谢。

4

1 回答 1

5

看来您在编译命令的末尾如何解释第二次使用 of时遇到了麻烦——即,您希望第二次使​​用 of表示而不是.%s%sslides.texslides.Rnw

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

与其第二次使用(即在编译命令%s末尾),不如考虑使用。这假设您的 *.tex 文件在您开始编译命令时已在缓冲区中以焦点打开 - 即,完整的文件名将插入到您的编译命令中。%(tex-file-name)

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

(eval-after-load "tex" '(progn

  (add-to-list 'TeX-expand-list '("%(tex-file-name)" (lambda ()
    (concat "\"" (buffer-file-name) "\""))))

  (add-to-list 'TeX-expand-list '("%(pdf-file-name)" (lambda ()
    (concat
      "\"" (car (split-string (buffer-file-name) "\\.tex"))
      ".pdf" "\""))))

  (add-to-list 'TeX-expand-list '("%(line-number)" (lambda ()
    (format "%d" (line-number-at-pos))))) ))
于 2013-10-25T01:02:03.853 回答