我在 Debian 上使用 Emacs+auctex+evince。假设我有一个main.tex
包含的latex 文档。当使用内部sections/sec1.tex
编译并在第 1 节中使用向后搜索时,Emacs 打开C-c C-a
main.tex
sections/sec1.tex
在新的 Emacs 窗口 (Ew) 中打开(但在窗口管理器意义上的同一窗口中,也称为 Emacs 中的框架,请参阅https://emacs.stackexchange.com/questions/13583/whats-the-difference-between-a-buffer-a-file-a-window-and-a-frame)。也就是说,显示的 Ewmain.tex
大小减半,在空闲空间中创建一个新的 Ew,并且我看到main.tex
和sec1.tex
。
我想避免这种情况,而是在main.tex
之前显示的 Ew 中打开文件。
我在 Debian 稳定版上使用 Emacs:
GNU Emacs 26.1 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.5)
of 2019-09-22, modified by Debian
不良行为是在原始配置下显示的,因此似乎不是由我使用的任何定制引起的。
答案1
正如评论中指出的那样,答案
(setq same-window-regexps '("\\.tex$"))
会产生破坏 AucTeX 命令C-c C-l
和的意外后果C-c C-`
。解决此问题的一种方法是将 的新值限制为same-window-regexps
TeX 模式缓冲区,即将上面的行替换为
(add-hook 'LaTeX-mode-hook
'(lambda () (set (make-local-variable 'same-window-regexps) '("\\.tex$"))))
然而,这限制了它作为原始问题的解决方案,因此它仅在 Emacs 当前正在查看时才有效一些TeX 文件;如果当前缓冲区是不同的模式,则反向搜索会在单独的 Emacs 窗口中打开。
在所有情况下似乎都有效的另一种解决方案是保留原始的全局变量(setq same-window-regexps '("\\.tex$"))
,但要巧妙地C-c C-l
告诉C-c C-`
它TeX-pop-to-buffer
始终在另一个窗口中打开:
(defun TeX-force-pop-to-buffer-other-window (orig-fun buffer &optional other-window norecord)
(funcall orig-fun buffer t norecord))
(defun TeX-force-pop-in-other-window (orig-fun &rest rest)
"Don't depend on `pop-to-buffer' using a different window."
(advice-add 'TeX-pop-to-buffer :around 'TeX-force-pop-to-buffer-other-window)
(apply orig-fun rest)
(advice-remove 'TeX-pop-to-buffer 'TeX-force-pop-to-buffer-other-window))
(advice-add 'TeX-help-error :around 'TeX-force-pop-in-other-window)
(advice-add 'TeX-recenter-output-buffer :around 'TeX-force-pop-in-other-window)
答案2
Mike Shulman 提供了此问题的解决方案,即使用
(setq same-window-regexps '("\\.tex$"))