首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Emacs + Synctex + Skim:如何正确设置同步?[现有的任何一种方法都不起作用]

Emacs + Synctex + Skim:如何正确设置同步?[现有的任何一种方法都不起作用]
EN

Stack Overflow用户
提问于 2011-10-26 07:32:14
回答 2查看 16.7K关注 0票数 22

我正在MacOSX10.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包含:

代码语言:javascript
复制
'(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 (Preferences -> Sync ->选中了“检查文件更改”,并选择了预设:带有命令emacsclient和参数-不等待+%行"% file ")。

如您所见,我包含了显示行的-b选项。我可以从终端调用displayline,它打开.pdf并用黄色/高亮显示栏显示相应的行。不过,如果我使用latexmk -pvc -pdf从Emacs.app中的shell编译文档,则当前行上不会显示任何内容。

问题1:我如何使它工作/如何显示当前行?

问题2:通过单击.tex并跳转到.pdf文档中的相应行,是否有可能进行“适当”的前向搜索?我如何在emacs中“点击”?标准的CMD + shift + click不适用于emacs。

我也尝试过使用..。

代码语言:javascript
复制
(setq TeX-source-correlate-method 'synctex)
(add-hook 'LaTeX-mode-hook 'TeX-source-correlate-mode)

..。但什么都没变。

我可以在.pdf中点击CMD + shift +并跳转到.tex,这样就可以了。

我唯一没有研究的方向是:

  1. ,这是最近的问题吗?很可能不会,因为latexmk显式地显示pdflatex -interaction=nonstopmode -synctex=1,所以synctex被识别为
  2. ,这是一个错误的浏览首选项设置吗?也许我必须调整参数以使(?)

变得更有效。

溶液

事实上,延迟就是问题所在。我终于找到了以下设置:

~/..emacs

代码语言:javascript
复制
;; 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

代码语言:javascript
复制
$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 -v在当前行打开撇除,这很好地突出显示。在.pdf中使用CMD + shift + click,您可以跳回.tex文件中的相应段落(感谢server-start)。

EN

回答 2

Stack Overflow用户

发布于 2013-01-03 15:58:27

为了启用同步的单击功能,我添加了:

代码语言:javascript
复制
(add-hook 'LaTeX-mode-hook
          (lambda () (local-set-key (kbd "<S-s-mouse-1>") #'TeX-view))
          )

到我的.emacs文件。

注意:确保您处于PDF模式(使用(setq TeX-PDF-mode t))。

票数 6
EN

Stack Overflow用户

发布于 2011-10-26 14:55:31

当您按下C-c C-v (它运行TeX-view)时,它应该打开当前行上的栏浏览。这就是您使用TeX-output-view-style设置的内容。你不能从latexmk -pvc那里得到这种行为,因为它不知道你在哪一条线路上。latexmk只知道文件更改了。为了进行前向搜索,您需要运行TeX-view

可以绑定CMD + shift +单击以运行TeX-view,方法是

代码语言:javascript
复制
(define-key LaTeX-mode-map [M-S-mouse-1] 'TeX-view)

或者有可能

代码语言:javascript
复制
(define-key LaTeX-mode-map [s-S-mouse-1] 'TeX-view)

敬你的TeX-mode-hook。它取决于您所需的设置,但可以通过按C-h C-k然后按CMD+shift+click来查找。当然,添加两者都不会造成问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7899845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档