如何将latexmk绑定到Emacs中的一个键并让它显示错误(如果有的话)

时间:2011-09-28 17:40:30

标签: emacs auctex latexmk

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

  1. 保存活动文件而不提示我。
  2. 在不提示我的情况下在活动文件上运行latexmk
  3. 如果latexmk遇到任何错误,则显示错误。
  4. 我的问题是如何绑定密钥(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。

3 个答案:

答案 0 :(得分: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为零时,它不会要求您进行确认。然后TeX-run-TeX使用通常用于运行TeX的机制运行latexmk,其中包括错误消息解析,但由于它通常启动异步过程,我们将TeX-process-asynchronous设置为nil以等待它结束。奇怪的plist-get表单是从TeX-run-TeX检查错误的文档化方法(请参阅tex-buf.el中的注释),如果有错误,我们跳转到第一个;如果没有错误,我们会在迷你缓冲区中显示一条消息,只是为了好玩。

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

答案 1 :(得分: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,但为了完成这项工作,您需要做的就是在TeX-command-list中切换用于latexmk的名称字符串的字符串“LaTeX”(这可能只是“latexmk”或“Latexmk”)。

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

答案 2 :(得分:2)

假设您已经使用How to call latexmk in emacs, and jump to 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可能会因您的错误而混淆并暂停等待输入