我使用TeX-parse-errorEvan的底部的Ivan Andrus定义的函数latexmk函数将我抛入一个空缓冲区,以便在编译(C-c C-c)期间出现错误时自动打开*TeX Help*缓冲区.纠正错误并再次编译后,*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
)
)
)
Run Code Online (Sandbox Code Playgroud)
现在,当你调用用于编译的任何函数时,你必须调用它.以其他页面为例,您可以将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)))
Run Code Online (Sandbox Code Playgroud)
(注意:这对我来说实际上并不适用,因为我的latexmk搞砸了,所以我还没有成功测试过.但如果Ivan的版本适合你,那么这也应该.)
所以现在,只要你用这个函数调用latexmk(C-0例如,通过点击),一旦编译完成,它就会检查错误.如果有错误,它会自动打开"帮助"窗口并获取第一个错误.如果没有,它会检查帮助缓冲区是否打开; 如果是这样,它会关闭该窗口并杀死缓冲区.