因此,我在 emacs 中使用 AUCTeX 和 xetex,每次编译文件后,我都会得到一个显示编译过程的分割窗口。我不想完全隐藏它,因为我发现它对调试很有用,但我希望它出现在不同的缓冲区中,并且在没有错误时不会打扰我。这可能吗?另一个选择,虽然不太好,是除了编译错误外自动隐藏它。
我有一个选择:
(setq TeX-show-compilation t)
答案1
我认为最好的解决方案是挂接到TeX-LaTeX-sentinel
。这样,您可以在编译器完成其工作后检查是否存在错误。将以下代码添加到您的初始化文件中:
(defadvice TeX-LaTeX-sentinel
(around mg-TeX-LaTeX-sentinel-open-output activate)
"Open output when there are errors."
;; Run `TeX-LaTeX-sentinel' as usual.
ad-do-it
;; Check for the presence of errors.
(when
(with-current-buffer TeX-command-buffer
(plist-get TeX-error-report-switches (intern (TeX-master-file))))
;; If there are errors, open the output buffer.
(TeX-recenter-output-buffer nil)))
答案2
这问题编译步骤的缺点是下一个缓冲区非常大。我通常这样做:
(defun shrink-window-to-height(height)
"Shrink window height to certain height."
(interactive "nNew window height: ")
(if (> (window-height) height)
(shrink-window (- (window-height) height))
(enlarge-window (- height (window-height)))
)
)
(add-to-list 'TeX-command-list '("pdfLaTeX" "pdflatex -shell-escape %t" TeX-run-interactive nil t))
(defun do-pdflatex ()
"pdflatex with shell escape."
(interactive nil)
(save-buffer)
(let ((process (TeX-active-process)))
(if process
(TeX-kill-job)))
(TeX-command "pdfLaTeX" 'TeX-master-file)
(other-window 1)
(shrink-window-to-height 7)
(other-window -1)
(TeX-recenter-output-buffer nil)
)
(global-set-key [f3] 'do-pdflatex)
它的作用是:
- 终止所有活动的编译步骤
- 开始新的编译步骤
- 将缓冲区切换到编译窗口(不完全是,但如果打开了 2 个缓冲区就会发生这种情况)
- 将窗口缩小到高度 7
- 切换回原始缓冲区
由于它占用的空间很小,所以当它编译正常时,我通常不会感到困扰。我从未研究过这个问题,但它可能意味着侵入该过程以检查它是否已完成,我怀疑这并不容易。