Emacs + Synctex + Skim: как правильно настроить синхронизацию? [ни один из существующих методов не работал должным образом]

Я работаю с 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 → checked "Check for file changes" и выбрал Preset: Emacs с командой emacsclient и аргументами --no-wait +% line "% file" )

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

Вопрос 1: Как я могу заставить это работать/Как я могу отобразить текущую строку?

Вопрос 2: Возможно ли иметь "правильный" прямой поиск, нажав на .tex и перейти к соответствующей строке в документе .pdf? Как я могу "click" в emacs? Стандартный CMD + shift + click не работает в emacs.

Я также пробовал использовать, используя...

(setq TeX-source-correlate-method 'synctex)
(add-hook 'LaTeX-mode-hook 'TeX-source-correlate-mode)

... но ничего не меняется.

Я могу CMD + сдвиг + щелчок в .pdf и переход к .tex, так что это работает.

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

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

  • Это неправильная настройка предпочтений скима? Может быть, мне нужно настроить аргументы emacsclient там (?)

Решение

Действительно, проблема латекса. Я, наконец, выяснил следующие настройки:

<сильные > ~/.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 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).

Ответы

Ответ 1

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

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

в мой .emacs файл.

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

Ответ 2

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