Come chiamare latexmk in emacs, e saltare al successivo errore
-
25-09-2019 - |
Domanda
Vorrei utilizzare latexmk per compilare il mio documenti LaTeX in Emacs. Soprattutto ho bisogno della funzionalità next-error
Emacs, che in genere è chiamato con C-x `, e passa al successivo errore di LaTeX nel documento.
mi piacerebbe chiamata latexmk
sia utilizzando C-x compile
o C-c C-c
AUCTeX.
In primo luogo, ho impostato latexmk
ad uso
$pdflatex = 'pdflatex -interaction=nonstopmode';
Opzione 1: C-x compilazione
I stampa C-x compile
e tipo latexmk -pdf foo
, che corre pdflatex
. Ma next-error
non salterà agli errori, anche se la compilazione * * buffer contiene errori:
! Paragraph ended before \author was complete.
<to be read again>
\par
l.48
[...]
Compilation exited abnormally with code 12
Come posso saltare automaticamente a questo errore in linea 48?
Si noti che questa domanda di analizzare l'output lattice non ha nulla a che fare con latexmk
direttamente. Lo stesso problema si verifica quando Io faccio solo C-x compile pdflatex -interaction=nonstopmode foo
.
Opzione 2: AUCTeX
Come posso impostare AUCTeX a latexmk -pdf
chiamata invece di pdflatex
sul mio file .tex? Naturalmente, voglio next-error
al lavoro anche qui.
UPDATE: Ho iniziato un taglie , perché se questo ha funzionato sarebbe un ottimo strumento per molte persone. Ritengo che la domanda ha risposto se una soluzione è dato che mi permette di compilare facilmente il mio documento LaTeX usando latexmk
in Emacs e saltate per gli errori usando next-error
(naturalmente, gli errori potrebbero essere in file .tex inclusi, non necessariamente nel file master o buffer corrente).
UPDATE: Grazie a Ivan (e Chris) per rendere il lavoro AUCTeX + latexmk. Nel frattempo, ho trovato che l'uso di gomma per la compilazione LaTeX è anche una scelta eccellente. E 'per visualizzare i messaggi di errore nel formato utilizzato da gcc
e altri compilatori, in modo che funziona naturalmente con Emacs C-x compile
, per esempio C-x compile rubber --pdf foo
, e l'errore messaggi vengono analizzati correttamente.
Soluzione
Mi dispiace non hanno la possibilità di commentare, o vorrei solo aggiungere questo come un commento. opere risposta di Chris Conway, se non che dovrebbe usare TeX-run-TeX
invece di TeX-run-command
in modo che AucTeX conosce per elaborare i messaggi di errore.
(add-hook 'LaTeX-mode-hook (lambda ()
(push
'("Latexmk" "latexmk -pdf %s" TeX-run-TeX nil t
:help "Run Latexmk on file")
TeX-command-list)))
Potrebbe anche essere saggio aggiungere qualcosa di simile
'("%(-PDF)"
(lambda ()
(if (and (not TeX-Omega-mode)
(or TeX-PDF-mode TeX-DVI-via-PDFTeX))
"-pdf" "")))
per TeX-expand-list
e l'uso "latexmk %(-PDF) %s"
in modo che possa lavorare sia in pdf e DVI modalità. Personalmente, trovo più facile da usare personalizzare soprattutto quando si sta sperimentando.
Altri suggerimenti
E 'relativamente facile da ottenere AucTeX a correre latexmk con C-c C-c
. Di seguito aggiungerà una scelta Latexmk
all'elenco dei TeX comandi:
(add-hook 'LaTeX-mode-hook (lambda ()
(push
'("Latexmk" "latexmk -pdf %s" TeX-run-command nil t
:help "Run Latexmk on file")
TeX-command-list)))
Il trucco è sempre next-error
al lavoro. Se si scava intorno nelle fonti AucTeX, si può probabilmente trovare l'espressione regolare che utilizza il buffer di uscita TeX; non è applicato automaticamente al buffer creato da TeX-run-comando. (Si potrebbe anche essere in grado di convincere la modalità compile
utilizzare questo regex.)
Un altro approccio è quello di ridefinire la LaTeX-command
variabile. Questo è un po 'incerto, perché credo che un sacco di funzioni AucTeX assumere possono virare opzioni della riga di comando su questa stringa ed eseguire il risultato.
L'aggiunta% (modalità) dà latexmk alcune altre opzioni come non interattivo se è impostato in modo in 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)))