簡體   English   中英

Emacs + Synctex + Skim:如何正確設置同步? [現有方法都沒有正常工作]

[英]Emacs + Synctex + Skim: How to correctly set up synchronization? [none of the existing methods worked properly]

我在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中的shell使用latexmk -pvc -pdf編譯文檔,則當前行上不會顯示任何內容。

問題1:如何使其工作/如何顯示當前行?

問題2:是否可以通過單擊.tex並跳轉到.pdf文檔中的相應行來進行“正確”的前向搜索? 如何在emacs中“點擊”? 標准CMD + shift + click在emacs中不起作用。

我也試過用...

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

......但沒有任何改變。

我可以在.pdf中進行CMD + shift +點擊並跳轉到.tex,這樣就行了。

我沒有考慮過的唯一方向是:

  1. 這是一個latexmk問題嗎? 很可能不是,因為latexmk明確顯示pdflatex -interaction=nonstopmode -synctex=1所以識別synctex

  2. 這是一個錯誤的脫脂偏好設置嗎? 也許我必須調整emacsclient的參數(?)

確實,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';

這完全允許在Cc Cc上使用latexmk進行編譯,並且Cc Cv在當前行打開Skim,這很好地突出顯示。 使用CMD + shift +單擊.pdf,然后可以跳回到.tex文件中的相應段落(由於server-start )。

為了啟用同步的點擊功能,我添加了:

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

到我的.emacs文件。

注意:確保您處於PDF模式(使用(setq TeX-PDF-mode t) )。

當你按下Cc Cv (運行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 這取決於您需要的設置,但可以通過按Ch Ck然后按CMD + shift + click來查找。 當然,添加兩者不應該導致問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM