首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将latexmk绑定到Emacs中的一个键,并使其显示错误(如果有错误

如何将latexmk绑定到Emacs中的一个键,并使其显示错误(如果有错误
EN

Stack Overflow用户
提问于 2011-09-29 01:40:30
回答 3查看 2.7K关注 0票数 16

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

  1. 在不提示我的情况下保存活动文件。
  2. 在活动文件上运行latexmk时不提示我。如果
  3. 遇到任何错误,
  4. 将显示错误。

我的问题不是如何绑定一个键( Tyler在下面的评论中发布了一个链接),而是如何想出一个函数来完成项目1-3。

我调用Latexmk by

代码语言:javascript
复制
(add-hook 'LaTeX-mode-hook (lambda ()
  (push 
    '("Latexmk" "latexmk %s" TeX-run-TeX nil t
      :help "Run Latexmk on file")
    TeX-command-list)))

这是我的.latexmkrc

代码语言:javascript
复制
$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';

我使用的是Emacs23.3和AUCTeX 11.86。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-19 01:24:22

像这样的东西?

代码语言:javascript
复制
(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是将密钥绑定到函数的一种方法。

票数 14
EN

Stack Overflow用户

发布于 2011-10-18 22:49:38

这是你想要的吗?

代码语言:javascript
复制
(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")。

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

票数 3
EN

Stack Overflow用户

发布于 2011-10-18 22:50:38

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

代码语言:javascript
复制
(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模式的本地绑定技术:

代码语言:javascript
复制
(define-key TeX-mode-map (kbd "C-0") 'run-latexmk)

run-latexmk函数基于对TeX-command-master的深入研究,并根据您的需要对其进行简化。请注意,对(next-error)的调用可能并不总是发生,因为LaTeX可能会被您的错误搞糊涂,并暂停等待输入

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7587287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档