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

N.N*_*.N. 16 emacs auctex latexmk

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

  1. 保存活动文件而不提示我.
  2. latexmk在没有提示我的情况下运行活动文件.
  3. 如果latexmk遇到任何问题,则显示错误.

我的问题不是如何绑定一个密钥(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)))
Run Code Online (Sandbox Code Playgroud)

这是我的.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';
Run Code Online (Sandbox Code Playgroud)

我正在使用Emacs 23.3和AUCTeX 11.86.

Jou*_*nen 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)))
Run Code Online (Sandbox Code Playgroud)

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

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

  • 在大多数情况下,您的代码似乎做了我想要的.但是,当我正在编辑一个大文件并执行"C-0"并且出现错误时,它会按预期弹出,但顶部缓冲区将更改为名为"TeX Live 2011"的缓冲区. (2认同)