我在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,这样就行了。
我没有考虑的唯一方向是:
这是一个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';
这完全允许使用latexmk进行编译,默认情况下在C-c C-c和C-c C-v上打开Skim,当前行很好地突出显示。使用CMD + shift +单击.pdf,然后可以跳回到.tex文件中的相应段落(感谢server-start
)。
答案 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 +单击来查找。当然,添加两者不应该导致问题。