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. Конечно, добавление обоих не должно вызывать проблемы.