Я работаю с 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, так что это работает.
Единственные направления, на которые я не смотрел:
Это проблема latexmk?Скорее всего, нет, так как latexmk явно отображает pdflatex -interaction=nonstopmode -synctex=1
, так что synctex распознается
Это неправильная настройка предпочтений 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
).