16

我正在使用 AUCTeX,我想绑定一个键,例如C-0,它执行以下操作:

  1. 保存活动文件而不提示我。
  2. 在活动文件上运行latexmk而不提示我。
  3. latexmk如果遇到任何 by ,将向我显示错误。

我的问题不是如何绑定一个键(Tyler 在下面的评论中为此发布了一个链接),而是如何提出一个完成第 1-3 项的功能。


我打电话给 Latexmk

(add-hook 'LaTeX-mode-hook (lambda ()
  (push 
    '("Latexmk" "latexmk %s" TeX-run-TeX nil t
      :help "Run Latexmk on file")
    TeX-command-list)))

这是我的 .latexmkrc

$pdf_mode = 1;
$recorder = 1;
$latex = 'latex -recorder -halt-on-error -interaction=nonstopmode -shell-escape';
$pdflatex = 'pdflatex -recorder -halt-on-error -interaction=nonstopmode -shell-escape';

我正在使用 Emacs 23.3 和 AUCTeX 11.86。

4

3 回答 3

14

像这样的东西?

(require 'tex-buf)

(defun run-latexmk ()
  (interactive)
  (let ((TeX-save-query nil)
        (TeX-process-asynchronous nil)
        (master-file (TeX-master-file)))
    (TeX-save-document "")
    (TeX-run-TeX "latexmk" "latexmk" master-file)
    (if (plist-get TeX-error-report-switches (intern master-file))
        (TeX-next-error t)
      (minibuffer-message "latexmk done"))))

(add-hook 'LaTeX-mode-hook
          (lambda () (local-set-key (kbd "C-0") #'run-latexmk)))

编辑TeX-save-document保存你的主文件和任何子文件(如果你只有一个文件,那就是你的主文件),当TeX-save-query它是 nil 时,它不会要求你确认。然后TeX-run-TeX使用通常用于 running 的机制运行 latexmk TeX,其中包括错误消息解析,但是因为它通常启动一个异步进程,所以我们设置TeX-process-asynchronous为 nil 以等待它结束。奇怪的plist-get形式是检查错误的记录方法TeX-run-TeX(参见 注释tex-buf.el),如果有错误,我们跳到第一个;如果没有错误,我们会在 minibuffer 中显示一条消息,只是为了好玩。

最后,这local-set-key是将键绑定到函数的一种方法。

于 2011-10-18T17:24:21.867 回答
3

这是做你想做的吗?

(defun my-tex ()
"Saves the current buffer and runs LaTeX, all with no prompts or further interaction."
  (interactive)
  (save-buffer)
  (TeX-command "LaTeX" 'TeX-master-file -1))

我不使用latexmk,但要完成这项工作,您只需将字符串“LaTeX”切换为您用于latexmk 的名称字符串TeX-command-list(可能只是“latexmk”或“Latexmk”)。

我很高兴你问,因为这对我现在有用!

于 2011-10-18T14:49:38.070 回答
2

假设您已经使用了How to call latexmk in emacs 中的答案,并跳转到 next-error添加latexmk到 AUCTeX 的命令列表中,您可以使用以下函数:

(defun run-latexmk ()
  (interactive)
  (save-buffer)
  (TeX-command "Latexmk" 'TeX-master-file 0)
  (if (plist-get TeX-error-report-switches (intern (TeX-master-file)))
      (next-error))) ;; 0 -> suppress confirmation

并使用任何键绑定技术将其绑定到C-0; 这是 TeX 模式本地的一个:

(define-key TeX-mode-map (kbd "C-0") 'run-latexmk)

run-latexmk功能基于挖掘TeX-command-master,并根据您的需要对其进行简化。请注意,调用(next-error)可能并不总是发生,因为 LaTeX 可能会因您的错误而感到困惑并暂停等待输入

于 2011-10-18T14:50:37.970 回答