Emacs + Synctex + Skim: Как правильно настроить синхронизацию? [ни один из существующих методов не работал должным образом] - PullRequest
19 голосов
/ 26 октября 2011

Я работаю с GNU Emacs 23.3 (9.0) на Mac OS X 10.7.2.Я хотел бы использовать 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 (Preferences -> Sync -> проверил «Проверка изменений файла» и выбрал Preset: Emacs с командой emacsclient и аргументами --no-wait +% line «% file»)

Как видите, я включил параметр -b дляdisplayline.Я могу вызвать displayline из терминала, и он открывает .pdf и отображает соответствующую строку с желтой / выделенной полосой.Тем не менее, ничего не отображается в текущей строке, если я скомпилирую документ с latexmk -pvc -pdf из оболочки в Emacs.app.

Вопрос 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 + Shift + клик в .pdf и перейти к.tex, так что это работает.

Единственные направления, на которые я не смотрел:

  1. Это проблема latexmk?Скорее всего, нет, так как latexmk явно отображает pdflatex -interaction=nonstopmode -synctex=1, так что synctex распознается

  2. Это неправильная настройка предпочтений skim?Может быть, я должен настроить аргументы для 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 по умолчанию на Cc Cc, а Cc Cv открывает Skim в текущей строке, которая хорошо выделена.С помощью CMD + shift + click в .pdf можно затем вернуться к соответствующему абзацу в файле .tex (благодаря server-start).

Ответы [ 2 ]

6 голосов
/ 03 января 2013

Чтобы включить функцию синхронизации синхронизации, я добавил:

(add-hook 'LaTeX-mode-hook
          (lambda () (local-set-key (kbd "<S-s-mouse-1>") #'TeX-view))
          )

в мой .emacs файл.

ПРИМЕЧАНИЕ: убедитесь, что вы находитесь в режиме PDF (используйте (setq TeX-PDF-mode t)).

5 голосов
/ 26 октября 2011

Когда вы нажимаете C-c C-v (который запускается TeX-view), он должен открыть Skim с полосой на текущей строке. Это то, что вы настроили с помощью TeX-output-view-style. Вы не можете получить такое поведение от latexmk -pvc, так как он не знает, на какой линии вы находитесь. Все, что знает latexmk, - это то, что файл изменился. Для того, чтобы выполнить поиск вперед, вам нужно запустить TeX-view.

Вы можете связать CMD + shift + click для запуска 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 + click. Конечно, добавление обоих не должно вызывать проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...