我使用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/

10-13 09:26