Wie in Emacs nennen latexmk und springen zum nächsten Fehler
-
25-09-2019 - |
Frage
würde ich gerne verwenden latexmk Kompilierung meines LaTeX-Dokumente in Emacs. Vor allem muss ich die Emacs-Funktionalität next-error
, die typischerweise mit C-x genannt `, und springt zum nächsten LaTeX-Fehler in dem Dokument.
möchte ich Anruf latexmk
mag entweder C-x compile
oder die AUCTeX C-c C-c
verwenden.
Zuerst habe ich gesetzt latexmk
zu verwenden
$pdflatex = 'pdflatex -interaction=nonstopmode';
Option 1: C-x Compile
I drücken C-x compile
und Typ latexmk -pdf foo
, die pdflatex
läuft. Aber next-error
wird den Fehler nicht springen, auch wenn die * Kompilation * Puffer enthalten Fehler:
! Paragraph ended before \author was complete.
<to be read again>
\par
l.48
[...]
Compilation exited abnormally with code 12
Wie kann ich automatisch auf diesen Fehler springen in Zeile 48?
Beachten Sie, dass diese Frage der Parsen der Latex-Ausgang hat nichts mit latexmk
direkt zu tun. Das gleiche Problem tritt auf, wenn ich C-x compile pdflatex -interaction=nonstopmode foo
gerade tun.
Option 2: AUCTeX
Wie kann ich AUCTeX auf Anruf latexmk -pdf
statt pdflatex
auf meiner .tex-Datei? Natürlich möchte ich next-error
an der Arbeit auch hier.
UPDATE: Ich begann ein Prämie , denn wenn dies funktioniert wäre es ein großes Werkzeug für viele Leute sein. Ich halte die Frage beantwortet, ob eine Lösung gegeben wird, das lässt mich einfach mein LaTeX Dokument kompilieren, um den Fehler mit latexmk
in Emacs und springen next-error
mit (natürlich könnte sein, die Fehler in enthalten .tex Dateien, nicht unbedingt in der Master-Datei oder den aktuellen Puffer).
UPDATE: Dank Ivan (und Chris) für latexmk Arbeit AUCTeX + machen. In der Zwischenzeit fand ich, dass mit Rubber LaTeX ist auch eine ausgezeichnete Wahl zu kompilieren. Es wird Fehlermeldungen in dem von gcc
und anderen Compilern verwendete Format angezeigt werden, so dass es mit Emacs C-x compile
natürlich arbeitet, z.B. C-x compile rubber --pdf foo
und die Fehlermeldungen korrekt analysiert werden.
Lösung
Leider habe ich nicht die Möglichkeit, Kommentar, oder ich würde gerade dies als Kommentar ein. Chris Conway Antwort funktioniert, außer dass es TeX-run-TeX
statt TeX-run-command
verwenden sollten, so dass AucTeX kennt die Fehlermeldungen zu verarbeiten.
(add-hook 'LaTeX-mode-hook (lambda ()
(push
'("Latexmk" "latexmk -pdf %s" TeX-run-TeX nil t
:help "Run Latexmk on file")
TeX-command-list)))
Es könnte auch sinnvoll sein, etwas hinzuzufügen, wie
'("%(-PDF)"
(lambda ()
(if (and (not TeX-Omega-mode)
(or TeX-PDF-mode TeX-DVI-via-PDFTeX))
"-pdf" "")))
zu TeX-expand-list
und Verwendung "latexmk %(-PDF) %s"
, so dass es im PDF- und dvi-Modus zu arbeiten. Persönlich finde ich es leichter anpassen zu verwenden, vor allem, wenn Sie experimentieren.
Andere Tipps
Es ist relativ einfach AucTeX zu bekommen mit C-c C-c
läuft latexmk. Im Folgenden wird eine Latexmk
Wahl in der Liste der TeX-Befehle hinzufügen:
(add-hook 'LaTeX-mode-hook (lambda ()
(push
'("Latexmk" "latexmk -pdf %s" TeX-run-command nil t
:help "Run Latexmk on file")
TeX-command-list)))
Der Trick next-error
zur Arbeit erhält. Wenn Sie in den AucTeX Quellen graben um, können Sie wahrscheinlich die Regex finden es auf TeX Ausgangspuffer verwendet; es wird nicht automatisch auf die von TeX-run-Befehl erstellt Puffer angelegt. (Sie können auch in der Lage sein compile
Modus zu überzeugen, diese Regex zu verwenden.)
Ein weiterer Ansatz ist die Variable LaTeX-command
neu zu definieren. Das ist ein bisschen iffy, weil ich eine Menge AucTeX Funktionen denken annehmen können sie Befehlszeilenoptionen auf diese Zeichenfolge und führen Sie das Ergebnis heften.
Hinzufügen% (Modus) gibt latexmk einige weitere Optionen wie noninteractive wenn es so in auctex eingestellt ist.
(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)))