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")(需要 'tex-site)(添加钩子 'TeX-mode-hook(拉姆达()(添加到列表 'TeX-output-view-style'("^pdf$" ".""/Applications/Skim.app/Contents/SharedSupport/displayline -b %n %o %b"))))(服务器启动)
当然,我也设置了 Skim(首选项 -> 同步 -> 选中检查文件更改"并选择预设:带有命令 emacsclient 和参数的 Emacs --no-wait +%line "%file")>
如您所见,我在显示行中包含了 -b
选项.我可以从终端调用 displayline 并打开 .pdf 并显示带有黄色/突出显示条的相应行.尽管如此,如果我从 Emacs.app 中的 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
所以可以识别同步文本这是一个错误的浏览首选项设置吗?也许我必须在那里调整 emacsclient 的参数 (?)
解决方案
确实 latexmk 是问题所在.我终于想通了以下设置:
~/.emacs
<代码>;;通过 C-c C-c 使 latexmk 可用;;注意:SyncTeX 是通过 ~/.latexmkrc 设置的(见下文)(add-hook 'LaTeX-mode-hook (lambda()(推'("latexmk" "latexmk -pdf %s" TeX-run-TeX nil t:help "在文件上运行 latexmk")TeX-命令列表)))(add-hook 'TeX-mode-hook'(lambda() (setq TeX-command-default "latexmk")));;使用 Skim 作为默认的 pdf 查看器;;Skim 的显示行用于前向搜索(从 .tex 到 .pdf);;选项 -b 突出显示当前行;选项 -g 在后台打开 Skim(setq TeX-view-program-selection '((output-pdf "PDF Viewer")))(setq TeX-view-program-list'(("PDF 查看器" "/Applications/Skim.app/Contents/SharedSupport/displayline -b -g %n %o %b")))(服务器启动);以服务器模式启动 emacs,以便skim 可以与之对话
~/.latexmkrc
$pdflatex = 'pdflatex -interaction=nonstopmode -synctex=1 %O %S';$pdf_previewer = '打开 -a 浏览';$clean_ext = 'bbl rel %R-blx.bib %R.synctex.gz';
这完美地允许在 C-c C-c 上默认使用 Latexmk 进行编译,而 C-c C-v 在当前行打开 Skim,该行很好地突出显示.在 .pdf 中使用 CMD + shift + 单击,然后可以跳回 .tex 文件中的相应段落(感谢 server-start
).
为了启用同步的点击功能,我添加了:
(add-hook 'LaTeX-mode-hook(lambda () (local-set-key (kbd "") #'TeX-view)))
到我的 .emacs
文件.
注意:确保您处于 PDF
模式(使用 (setq TeX-PDF-mode t)
).
I'm working with GNU Emacs 23.3 (9.0) on Mac OS X 10.7.2. I would like to use synctex to jump between .tex and .pdf files. Although there are many different approaches on the web, none worked properly (I tried 8 different approaches...). I finally ended up with the rather simple approach described here: http://sourceforge.net/apps/mediawiki/skim-app/index.php?title=TeX_and_PDF_Synchronization
So my .emacs contains:
'(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)
Of course, I also set up Skim (Preferences -> Sync -> checked "Check for file changes" and chose Preset: Emacs with command emacsclient and arguments --no-wait +%line "%file")
As you can see, I included the -b
option to displayline. I can call displayline from the terminal and it opens the .pdf and displays the corresponding line with a yellow/highlighted bar. Still, nothing is displayed on the current line if I compile the document with latexmk -pvc -pdf
from a shell within Emacs.app.
Question 1: How can I get this to work/How can I display the current line?
Question 2: Is it possible to have a "proper" forward search by clicking the .tex and jumping to the corresponding line in the .pdf document? How can I "click" in emacs? The standard CMD + shift + click does not work in emacs.
I also tried approaches using...
(setq TeX-source-correlate-method 'synctex)
(add-hook 'LaTeX-mode-hook 'TeX-source-correlate-mode)
... but nothing changes.
I can CMD + shift + click in the .pdf and jump to the .tex, so that works.
The only directions which I haven't looked into are:
is this a latexmk problem? Most likely not, since latexmk explicitly displays
pdflatex -interaction=nonstopmode -synctex=1
so synctex is recognizedis it a wrong skim preference setting? Maybe I have to adjust the arguments to emacsclient there (?)
Solution
Indeed latexmk is the problem. I finally figured out the following settings:
~/.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';
This perfectly allows to compile with latexmk as default on C-c C-c and C-c C-v opens Skim at the current line which is nicely highlighted. With CMD + shift + click in the .pdf, one can then jump back to the corresponding paragraph in the .tex file (thanks to server-start
).
To enable the clicking feature of the sync, I added:
(add-hook 'LaTeX-mode-hook
(lambda () (local-set-key (kbd "<S-s-mouse-1>") #'TeX-view))
)
to my .emacs
file.
NOTE: make sure that you are in PDF
mode (use (setq TeX-PDF-mode t)
).
这篇关于Emacs + Synctex + Skim:如何正确设置同步?[现有方法均无法正常工作]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!