我使用Emacs latexmk function throws me into an empty buffer底部的Ivan Andrus定义的函数TeX-parse-error
,以便在编译期间出现错误时自动打开* TeX Help *缓冲区(C-c C-c
)。纠正错误并再次编译后,* TeX Help *缓冲区保持打开状态(尽管错误已更正)。有没有办法调整功能(不幸的是,我没有经验的elisp编程),如果错误得到解决和更新(并且仍然打开),如果错误未解决,则关闭* TeX Help *缓冲区?这样可以省去很多像C-c '
这样的输入来显示* TeX Help *缓冲区和C-x 1
来再次隐藏它。
答案 0 :(得分:6)
首先,让我们定义一个找到*TeX Help*
缓冲区的函数,如果它存在,关闭它的窗口,然后杀死缓冲区:
(defun demolish-tex-help ()
(interactive)
(if (get-buffer "*TeX Help*") ;; Tests if the buffer exists
(progn ;; Do the following commands in sequence
(if (get-buffer-window (get-buffer "*TeX Help*")) ;; Tests if the window exists
(delete-window (get-buffer-window (get-buffer "*TeX Help*")))
) ;; That should close the window
(kill-buffer "*TeX Help*") ;; This should kill the buffer
)
)
)
现在,当你调用用于编译的任何函数时,你必须调用它。以其他页面为例,您可以将Ivan Andrus的功能修改为:
(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"
(TeX-command-expand "latexmk %t" 'TeX-master-file)
master-file)
(if (plist-get TeX-error-report-switches (intern master-file))
(TeX-next-error t)
(progn
(demolish-tex-help)
(minibuffer-message "latexmk done")))))
(add-hook 'LaTeX-mode-hook
(lambda () (local-set-key (kbd "C-0") #'run-latexmk)))
(注意:这对我来说实际上并不适用,因为我的latexmk搞砸了,所以我没有成功测试过。但如果Ivan的版本适合你,那么这也应该。)
所以现在,只要你用这个函数调用latexmk(例如,通过点击C-0
),一旦编译完成,它就会检查错误。如果有错误,它会自动打开“帮助”窗口并获取第一个错误。如果没有,它会检查帮助缓冲区是否打开;如果是这样,它会关闭该窗口并杀死缓冲区。
答案 1 :(得分:1)
注意:经过一番澄清后,我发现以下内容并不完全符合要求。我对这个问题的另一个答案应该是这个工作。
看起来自动打开缓冲区需要更改运行latex时调用的函数。 (至少,我找不到任何可以让你这样做的钩子。)这实际上就是你提到的那个问题的早期答案中所做的事情之一。特别是行
(if (plist-get TeX-error-report-switches (intern master-file))
(TeX-next-error t)
(minibuffer-message "latexmk done"))))
检查是否有错误。如果是,则该函数运行TeX-next-error
;如果不是它只是打印消息。所以你可能想尝试安装该功能。
自动关闭帮助缓冲区只需要稍微调整一下Ivan Andrus的功能。在“没有更多错误”的区域,只需用以下内容替换相关部分:
((null
(re-search-forward regexp nil t))
;; No more errors.
(message "No more errors.")
(beep)
(delete-window (get-buffer-window (get-buffer "*TeX Help*")))
(kill-buffer "*TeX Help*")
(TeX-pop-to-buffer old)
nil)
这实际上会在关闭窗口后杀死帮助缓冲区,但如果您因某种原因不喜欢它,可以对其进行评论。
另一个不错的选择是将(setq TeX-display-help nil)
放入~/.emacs
。这样,帮助缓冲区甚至不会显示。相反,描述错误的简洁消息被放入迷你缓冲区,光标放在原始的坏线上。 (我从来没有发现大部分帮助输出都有用。)
最后,您可能想为TeX-next-error
尝试另一个键绑定,因为C-c '
很尴尬。