Как позвонить в LaTexmk в Emacs и перейти к следующей ошибке

StackOverflow https://stackoverflow.com/questions/2199678

Вопрос

Я хотел бы использовать латексмк Составить мои латексные документы в 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)))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top