[英]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,這樣就行了。
我沒有考慮過的唯一方向是:
這是一個latexmk問題嗎? 很可能不是,因為latexmk明確顯示pdflatex -interaction=nonstopmode -synctex=1
所以識別synctex
這是一個錯誤的脫脂偏好設置嗎? 也許我必須調整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.