Как позвонить в LaTexmk в Emacs и перейти к следующей ошибке
-
25-09-2019 - |
Вопрос
Я хотел бы использовать латексмк Составить мои латексные документы в Emacs. Особенно мне нужны функциональность Emacs next-error
, который обычно называется CX `и переходит к следующей ошибке латекса в документе.
Я хотел бы позвонить latexmk
либо использовать C-x compile
или аукток C-c C-c
.
Во-первых, я установил latexmk
использовать
$pdflatex = 'pdflatex -interaction=nonstopmode';
Вариант 1: CX Compile
я нажимаю C-x compile
и тип latexmk -pdf foo
, который бежит pdflatex
. Отказ Но next-error
Не скажется на ошибки, даже если буфер * Compilation * содержит ошибки:
! Paragraph ended before \author was complete.
<to be read again>
\par
l.48
[...]
Compilation exited abnormally with code 12
Как я могу автоматически перейти к этой ошибке в строке 48?
Обратите внимание, что этот вопрос разборки театральной продукции не имеет ничего общего с latexmk
напрямую. Та же проблема возникает, когда я просто делаю C-x compile pdflatex -interaction=nonstopmode foo
.
Вариант 2: Auctex
Как я могу установить Auctex позвонить latexmk -pdf
вместо pdflatex
На мой файл .tex? Конечно я хочу next-error
Работать здесь тоже.
ОБНОВИТЬ: Я начал награда Потому что, если это сработало, это будет отличный инструмент для многих людей. Я считаю, что вопрос, отвеченный, если решение приведено, которое позволяет мне легко составить мой латексный документ, используя latexmk
в Emacs и прыгайте на ошибки, используя next-error
(конечно, ошибки могут быть в включен .tex файлы, не обязательно в основном файле или текущем буфере).
ОБНОВИТЬ: Благодаря Ивану (и Крису) за создание Auctex + Fastexmk работать. Тем временем я обнаружил, что используя Резинка Для компиляции латекса также отличный выбор. Это отобразит сообщения об ошибках в формате, используемом gcc
и другие компиляторы, так что это естественно работает с Emacs C-x compile
, например, C-x compile rubber --pdf foo
, и сообщения об ошибках анализируются правильно.
Решение
Извините, у меня нет возможности комментировать, или я просто добавлю это как комментарий. Ответ Chris Conway работает, за исключением того, что он должен использовать TeX-run-TeX
вместо TeX-run-command
Так что Auctex знает, чтобы обработать сообщения об ошибках.
(add-hook 'LaTeX-mode-hook (lambda ()
(push
'("Latexmk" "latexmk -pdf %s" TeX-run-TeX nil t
:help "Run Latexmk on file")
TeX-command-list)))
Это может быть также мудро добавить что-то вроде
'("%(-PDF)"
(lambda ()
(if (and (not TeX-Omega-mode)
(or TeX-PDF-mode TeX-DVI-via-PDFTeX))
"-pdf" "")))
к TeX-expand-list
и использовать "latexmk %(-PDF) %s"
Так что это будет работать как в режиме PDF, так и в DVI. Лично мне удобно использовать настройки, особенно когда вы экспериментируете.
Другие советы
Это относительно легко заставить Auctex запустить LaTexmk с C-c C-c
. Отказ Следующее добавит Latexmk
Выбор в список команд Tex:
(add-hook 'LaTeX-mode-hook (lambda ()
(push
'("Latexmk" "latexmk -pdf %s" TeX-run-command nil t
:help "Run Latexmk on file")
TeX-command-list)))
Трюк становится next-error
работать. Если вы копаете в источниках Auctex, вы, вероятно, можете найти регенцию, которое он использует на выходных буферах Tex; Он не применяется автоматически на буфер, созданный Tex-Run-Command. (Вы также можете убедить compile
Режим для использования этого Regex.)
Другой подход - переопределить переменную LaTeX-command
. Отказ Это немного, потому что я думаю, что многие функции Auctex предполагают, что они могут включать параметры командной строки на эту строку и выполнить результат.
Добавление% (режим) дает LastexMK еще несколько вариантов, таких как неинтеактив, если он установлен так в Auctex.
(add-hook 'LaTeX-mode-hook (lambda ()
(push
'("Latexmk" "latexmk -pdf %(mode) %s" TeX-run-TeX nil t
:help "Run Latexmk on file")
TeX-command-list)))