我在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)
Run Code Online (Sandbox Code Playgroud)
当然,我还设置了Skim(首选项 - >同步 - >选中"检查文件更改"并选择Preset:Emacs with command emacsclient and arguments --no-wait +%line"%file")
如您所见,我包含了-bdisplayline 的选项.我可以从终端调用displayline并打开.pdf并显示带黄色/高亮条的相应行.如果我使用latexmk -pvc -pdfEmacs.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)
Run Code Online (Sandbox Code Playgroud)
......但没有任何改变.
我可以在.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
Run Code Online (Sandbox Code Playgroud)
〜/ .latexmkrc
$pdflatex = 'pdflatex -interaction=nonstopmode -synctex=1 %O %S';
$pdf_previewer = 'open -a skim';
$clean_ext = 'bbl rel %R-blx.bib %R.synctex.gz';
Run Code Online (Sandbox Code Playgroud)
这完全允许在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))
)
Run Code Online (Sandbox Code Playgroud)
到我的.emacs档案.
注意:确保您处于PDF模式(使用(setq TeX-PDF-mode t)).
按C-c C-v(运行TeX-view)时,应使用当前行上的栏打开Skim.这是你用它设置的TeX-output-view-style.您无法获得该行为,latexmk -pvc因为它不知道您在哪一行.所有latexmk都知道文件发生了变化.要进行前向搜索,您需要运行TeX-view.
你可以TeX-view通过添加绑定CMD + shift + click来运行
(define-key LaTeX-mode-map [M-S-mouse-1] 'TeX-view)
Run Code Online (Sandbox Code Playgroud)
或者可能
(define-key LaTeX-mode-map [s-S-mouse-1] 'TeX-view)
Run Code Online (Sandbox Code Playgroud)
到你的TeX-mode-hook.这取决于您需要的设置,但可以通过按下C-h C-k然后CMD + shift + click 来查找.当然,添加两者不应该导致问题.