问题 1:我想要一个单键组合(Cc Ca)来编译文件(使用 latexmk)并显示它。
这个答案解决了第一部分。
我尝试调整答案以调用 TeX-view,如下所示(带有一些额外的调试代码),但它不起作用 -(TeX-active-master (TeX-output-extension))
此时为 None。问题2:为什么?我是一个合理的程序员,但我对 Emacs Lisp 了解不够多,无法理解这是怎么可能的。它是一个缓冲区局部变量,而我们处在错误的缓冲区中吗?我没有时间,希望阅读相关的 AucTeX 源代码。
此外,代码应该等待 latexmk,但显然它没有等待,因为 TeX-command 异步运行外部进程。我该如何修复它?
注意:我已经尝试过另一个答案,并且它不起作用。
(defun my-run-latex ()
(interactive)
(let ((output-file (TeX-active-master (TeX-output-extension))))
(message output-file) ;Good.
(TeX-save-document (TeX-master-file))
(TeX-command "LatexMk" 'TeX-master-file -1)
(message (TeX-active-master (TeX-output-extension))) ; Bad
;(TeX-view) ;Won't work, because TeX-active-master does not work at this point.
)
我的 AucTeX 版本是 11.87.3,在 Emacs 24.3.1 上:
M-x emacs-version
> GNU Emacs 24.3.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2013-03-13 on bob.porkrind.org
更新:为什么我需要使用查看命令,而不是让查看器重新加载文件?
- 查看命令还将跳转到(澄清) 位置对应于编辑器中的当前位置,而 PDF 重新加载命令则不会。查看 (Cc Cv) 可与 Skim 配合使用(Skim 为此提供了一个命令)。
- 我的 PDF 查看器(OS X 上的 Skim)不会自动重新加载文件。我使用以下两种设置之一推荐用于 Skim,强制通过编辑器重新加载。我刚刚尝试了另一个,Skim 会询问是否重新加载文件(它只在 Skim 关闭之前保留设置)。我更喜欢通过 Emacs 来解决这个问题,而不是改变 Skim(除非你能展示出在各方面至少与 Skim 一样好的东西)。