6

Currently, I edit LaTeX files by running latexmk -pvc in the background to generate PDF automatically upon change to be previewed in Evince. However, when there is a syntax error, AucTeX is not able to show it. How can I complete this integration by jumping to errors given by the latexmk process?

T. Verron
  • 4,283
  • 2
  • 24
  • 56
xuhdev
  • 1,899
  • 14
  • 31
  • So TeX-next-error and Tex-previous-errordo not work? Are you using auctex-latexmk? – Timm Nov 18 '16 at 08:57
  • @Timm No I'm not using it -- I'm running latexmk -pvc in the background so PDF gets rebuilt automatically upon saving. TeX-next-error won't work. – xuhdev Nov 18 '16 at 09:02
  • 2
    Do you know that AUCTeX can automatically compile the document in a way similar to latexmk and open the viewer at the end of a successful compilation just with C-c C-a? In this way you can use error reporting tools shipped with AUCTeX, including TeX-error-overview. Parsing the output of latexmk in AUCTeX is a bit tricky – giordano Nov 18 '16 at 09:10
  • I suggest to mention -pvc the question title. I'm using auctex-latexmk with (setq TeX-save-query nil) and the files are automatically saved when compiling with C-c C-c. I don't see much of an advantage of using latexmk -pvc instead. – Timm Nov 18 '16 at 09:25
  • @giordano Thank you for pointing it out, I didn't use it before. There is a drawback however: every time I run it, the focus switches to Evince. I have to manually switch back to Emacs. – xuhdev Nov 18 '16 at 18:26
  • Maybe your workflow is different from mine, but usually I compile a document when I want to look to the output ;-) – giordano Nov 18 '16 at 19:46

1 Answers1

2

I have dealing with the same issue. That is my solution, it is a bit late but it could be useful.

(defun brust-LaTeX-next-error (args)
  (interactive "p")
  (if-let ((active-buffer (TeX-active-buffer)))
      (if (< 15 args)
          (TeX-error-overview)
        (when (< 3 args)
          (save-excursion
            (set-buffer active-buffer)
            (TeX-parse-all-errors)
            (if TeX-error-list
                (message ":::: WARNING :::: There are errors ::::")
              (message ":::: Be happy, your LaTeX code has no errors ::::"))))
        (call-interactively 'TeX-next-error))
    (message "There is no active buffer")))

I guess that AUCTeX creates the list of errors once the compiling precess finishes. So, the problem with latexmk -pvc is that the process never ends and the list is never created.

The idea is to replace TeX-next-error with previous function. First, it checks whether there is an active process or not. When you call brust-LaTeX-next-error with prefix argument C-u it creates the list from the active buffer with the same functions that AUCTeX does when the process ends (again I guess). So, they should interact nicely. When you call it with no prefix argument it just calls TeX-next-error.

As an extra functionality when you call it with double prefix argument C-u C-u a buffer with all errors listed is created.

MonLau
  • 81
  • 7