在 Mac OSX 上从 Emacs/AUCTeX 启动外部 PDF 查看器失败

在 Mac OSX 上从 Emacs/AUCTeX 启动外部 PDF 查看器失败

我正在尝试设置 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")))

来源:https://web.archive.org/web/20120602072451/http://www.bleedingmind.com/index.php/2010/06/17/synctex-on-linux-and-mac-os-x-with-emacs

钩子加载没有任何问题。我在名为 的文件上进行了测试sandbox.tex,产生了输出sandbox.pdfC-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

相关内容