我使用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
的显示可以再次隐藏。
最佳答案
首先,让我们定义一个函数,该函数查找*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
),一旦编译完成,它就会检查错误。如果有错误,它将自动打开“帮助”窗口并得到第一个错误。如果没有,它将检查“帮助”缓冲区是否打开;如果是这样,它将关闭该窗口并杀死缓冲区。关于emacs - latex ,Emacs : automatically open *TeX Help* buffer on error and close it after correction of the error?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9249458/