Emacs + Synctex + Skim:如何正确设置同步? [现有方法都没有正常工作]

时间:2011-10-26 07:32:14

标签: emacs latex

我在Mac OS X 10.7.2上使用GNU Emacs 23.3(9.0)。我想使用synctex在.tex和.pdf文件之间跳转。虽然网络上有许多不同的方法,但没有一种方法正常工作(我尝试了8种不同的方法......)。我终于得到了这里描述的相当简单的方法:http://sourceforge.net/apps/mediawiki/skim-app/index.php?title=TeX_and_PDF_Synchronization

所以我的.emacs包含:

'(LaTeX-command "latex -synctex=1")
(require 'tex-site)
(add-hook 'TeX-mode-hook
    (lambda ()
        (add-to-list 'TeX-output-view-style
            '("^pdf$" "."
              "/Applications/Skim.app/Contents/SharedSupport/displayline -b %n %o %b")))
)
(server-start)

当然,我还设置了Skim(首选项 - >同步 - >检查了“检查文件更改”并选择了Preset:Emacs with command emacsclient and arguments --no-wait +%line“%file”)

如您所见,我将-b选项包含在displayline中。我可以从终端调用displayline并打开.pdf并显示带黄色/高亮条的相应行。但是,如果我使用latexmk -pvc -pdf从Emacs.app中的shell编译文档,则当前行上不会显示任何内容。

问题1:如何使其工作/如何显示当前行?

问题2:点击.tex并跳转到.pdf文档中的相应行,是否可以进行“正确的”前向搜索?如何在emacs中“点击”?标准CMD + shift + click在emacs中不起作用。

我也试过使用...

的方法
(setq TeX-source-correlate-method 'synctex)
(add-hook 'LaTeX-mode-hook 'TeX-source-correlate-mode)

......但没有任何改变。

我可以通过CMD +移动+点击.pdf并跳转到.tex,这样就行了。

我没有考虑的唯一方向是:

  1. 这是一个latexmk问题吗?很可能不是,因为latexmk明确显示pdflatex -interaction=nonstopmode -synctex=1所以识别出synctex

  2. 这是一个错误的脱脂偏好设置吗?也许我必须调整emacsclient的参数(?)

  3. 解决方案

    确实,latexmk就是问题所在。我终于想出了以下设置:

    〜/的.emacs

    ;; make latexmk available via C-c C-c
    ;; Note: SyncTeX is setup via ~/.latexmkrc (see below)
    (add-hook 'LaTeX-mode-hook (lambda ()
      (push
        '("latexmk" "latexmk -pdf %s" TeX-run-TeX nil t
          :help "Run latexmk on file")
        TeX-command-list)))
    (add-hook 'TeX-mode-hook '(lambda () (setq TeX-command-default "latexmk")))
    
    ;; use Skim as default pdf viewer
    ;; Skim's displayline is used for forward search (from .tex to .pdf)
    ;; option -b highlights the current line; option -g opens Skim in the background  
    (setq TeX-view-program-selection '((output-pdf "PDF Viewer")))
    (setq TeX-view-program-list
         '(("PDF Viewer" "/Applications/Skim.app/Contents/SharedSupport/displayline -b -g %n %o %b")))
    
    (server-start); start emacs in server mode so that skim can talk to it
    

    〜/ .latexmkrc

    $pdflatex = 'pdflatex -interaction=nonstopmode -synctex=1 %O %S';
    $pdf_previewer = 'open -a skim';
    $clean_ext = 'bbl rel %R-blx.bib %R.synctex.gz';
    

    这完全允许使用latexmk进行编译,默认情况下在C-c C-c和C-c C-v上打开Skim,当前行很好地突出显示。使用CMD + shift +单击.pdf,然后可以跳回到.tex文件中的相应段落(感谢server-start)。

2 个答案:

答案 0 :(得分:6)

要启用同步的点击功能,我添加了:

(add-hook 'LaTeX-mode-hook
          (lambda () (local-set-key (kbd "<S-s-mouse-1>") #'TeX-view))
          )

到我的.emacs文件。

注意:请确保您处于PDF模式(使用(setq TeX-PDF-mode t))。

答案 1 :(得分:5)

当您按C-c C-v(运行TeX-view)时,应使用当前行上的栏打开Skim。这是您使用TeX-output-view-style设置的内容。您无法从latexmk -pvc获取该行为,因为它不知道您在哪一行。所有latexmk都知道文件发生了变化。要进行正向搜索,您需要运行TeX-view

您可以通过添加

绑定CMD + shift +点击以运行TeX-view
(define-key LaTeX-mode-map [M-S-mouse-1] 'TeX-view)

或可能

(define-key LaTeX-mode-map [s-S-mouse-1] 'TeX-view)

TeX-mode-hook。这取决于您需要的设置,但可以通过按C-h C-k然后按CMD + shift +单击来查找。当然,添加两者不应该导致问题。