我正在尝试设置 Emacs/AUCTeX 来调用外部 PDF 查看器,这样我就可以查看文档输出,最好通过 SyncTeX 进行源关联。默认情况下,建议使用 AUCTeX evince file.pdf
;但是,我没有安装 Evince,我认为 Skim 是更好的选择。
我四处寻找如何解决这个问题的方法,并发现对文件进行以下修改.emacs
可以让我做到这一点:
(add-hook 'LaTeX-mode-hook 'TeX-source-correlate-mode)
(setq TeX-source-correlate-method 'synctex)
(add-hook 'LaTeX-mode-hook
(lambda()
(add-to-list 'TeX-expand-list
'("%q" skim-make-url))))
(defun skim-make-url () (concat
(TeX-current-line)
" "
(expand-file-name (funcall file (TeX-output-extension) t)
(file-name-directory (TeX-master-file)))
" "
(buffer-file-name)))
(setq TeX-view-program-list
'(("Skim" "/Applications/Skim.app/Contents/SharedSupport/displayline %q")))
(setq TeX-view-program-selection '((output-pdf "Skim")))
钩子加载没有任何问题。我在名为 的文件上进行了测试sandbox.tex
,产生了输出sandbox.pdf
并C-c C-c view command
尝试调用 Skim,如下所示:
/Applications/Skim.app/Contents/SharedSupport/displayline 1 /path-to-sandbox.pdf /path-to-sandbox.tex
但什么都没发生:Skim 无法启动,AUCTeX 也没有发出任何抱怨。我被难住了。
我在 OSX 10.6.6 上使用 GNU Emacs 23.2.1(x86_64-apple-darwin10.4.0、NS apple-appkit-1038.32)和 AUCTeX v.11.86。
答案1
成功了。使用 格式化后,以下函数中发生了硬换行,将与命令的其余部分M-q
分开。%q
(setq TeX-view-program-list
'(("Skim" "/Applications/Skim.app/Contents/SharedSupport/displayline
%q")))
我最初没能发现它,因为它看起来没问题(尽管事实并非如此)。当我将它粘贴到问题中时,我也必须修复它。无论如何,正确的形式是:
(setq TeX-view-program-list
'(("Skim" "/Applications/Skim.app/Contents/SharedSupport/displayline %q")))
现在一切正常。
答案2
skim-make-url 不适用于带有空格的路径(至少对我来说),所以我不得不用双引号括住路径,如下所示:
(defun skim-make-url ()
(concat
(TeX-current-line)
" \""
(expand-file-name (funcall file (TeX-output-extension) t)
(file-name-directory (TeX-master-file)))
"\" \""
(buffer-file-name)
"\""))
答案3
这不是对你问题的确切回答,而是一种变通方法。我也使用 skim 和我今天刚发现的一个叫 latexmk 的工具。它就像一个 MakeFile for LateX,只是更好一些。如果你这样调用它:latexmk yourfile.tex -pvc
它会在你保存文件时查找更改并重新运行。skim 会看到文件已更改并重新加载。似乎运行良好(只是最近我的 skim 的自动重新加载功能出现了问题,但这不是重点)。默认情况下它输出 dvi,因此你可能希望这样运行它:
$ latexmk yourfile.tex -pvc -pdf