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

问题描述 投票:0回答:4

我正在使用 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。

emacs auctex latexmk
4个回答
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
是将按键绑定到函数的一种方法。


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”切换为您在

TeX-command-list
中用于 Latexmk 的名称字符串(可能只是“latexmk”或“Latexmk”) .

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


2
投票

假设您已经使用了如何在 emacs 中调用 Latexmk 中的答案,并跳转到下一个错误以将

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 可能会因您的错误而感到困惑并暂停等待输入


0
投票

我使用自定义次要模式,它在后台运行 Latexmk 并通过 Flymake 报告任何错误/警告。它们的编号显示在模式行中,您可以使用(例如)

M-n
M-p
来导航它们。特别是,您描述的三个步骤在每次保存文件时都会发生。

我仅将其用于单文件项目;它可能无法涵盖您的用例。

© www.soinside.com 2019 - 2024. All rights reserved.