Non farmi abortire manualmente una compilazione LaTeX quando c'è un errore
-
09-09-2019 - |
Domanda
qui , latexmk
è un modo pratico per compilare continuamente il vostro documento ogni volta che la sorgente cambia. Ma spesso quando si lavora su un documento che si ritroverà con gli errori e poi latex
sarà prendere dal panico e attendere l'input dell'utente prima di continuare. Che può diventare molto fastidioso, soprattutto di recente, quando ho inciso qualcosa per compilare latex
direttamente dal documento Etherpad , che consente di risparmiare in modo continuo, come si tipo.
È ci una regolazione per latex
o latexmk
per renderlo appena si interrompe con un messaggio di errore se non riesce a compilare? O, se necessario, come faccio a creare una sorta di Expect script per auto-respingere i reclami di LaTeX?
(avevo pensato opzione pdflatex
di -halt-on-error
farebbe il trucco, ma a quanto pare non.)
Domanda bonus: Skim su Mac OSX è un bel visualizzatore di PDF che autorefreshes quando cambia il pdf (a differenza di anteprima), tranne che ogni volta che c'è un errore di lattice che fa di riconfermare che si desidera autorefreshing. Texniscope non ha questo problema, ma ho dovuto abbandonare per Texniscope altri motivi . C'è un modo per rendere Skim AutoRefresh sempre, o c'è un altro spettatore che ottiene questo diritto?
AGGIUNTO: Mini-tutorial su latexmk
in base alla risposta a questa domanda:
-
Get
latexmk
qui: http: //www.phys .psu.edu / ~ Collins / software / latexmk-CCM / -
Aggiungi il seguente al file
~/.latexmkrc
:$pdflatex = 'pdflatex -interaction=nonstopmode';
(Per OS X con Skim)
$pdf_previewer = "open -a /Applications/Skim.app";
-
Mentre si modifica il file sorgente,
foo.tex
, eseguire il seguente in un terminale:latexmk -pvc -pdf foo.tex
-
Skim o in un altro in tempo reale PDF Viewer per visualizzare prova.pdf. Per Skim, basta guardare la scheda “Sync” nelle preferenze di scremato e configurarlo per l'editor.
Voila! Colpire risparmiare sui foo.tex
sarà ora causare foo.pdf
per aggiornare senza toccare nulla.
Soluzione
Con MikTeX, pdflatex
ha questa opzione della riga di comando:
-interaction=MODE Set the interaction mode; MODE must be one
of: batchmode, nonstopmode, scrollmode,
errorstopmode.
Modifica suggerito da @ 9999years:
Questi valori sono equivalenti ad un insieme di LaTeX \commands
che fornisce la stessa funzionalità.
I modi fanno TeX si comportano nel modo seguente:
errorstopmode
si ferma su tutti gli errori, siano essi su errori nella codice sorgente o file inesistenti.
scrollmode
non si ferma in caso di errori nella sorgente, ma richiede di ingresso quando un errore più grave come si verifica come un file mancante.Nel
nonstopmode
po misnamed, TeX non richiede input dopo gravi errori ma si ferma del tutto.
batchmode
impedisce ogni uscita in aggiunta a quello (destinato all'impiego in script automatizzati). In tutti i casi, tutti gli errori vengono scritti nel file di log (Yourtexfile.log).
Altri suggerimenti
Si può anche mettere \nonstopmode
o \batchmode
proprio all'inizio del file tex; allora funzionerà con qualsiasi versione TeX, non solo pdflatex
. Per ulteriori informazioni su questi e comandi correlati vedere l'ottimo sui comandi (grezzo) TeX di David Bausum . Soprattutto il comando dal debug famiglia potrebbe essere di interesse qui.
Un altro possibile hack è semplice da usare:
yes x | latexmk source.tex
Si può sempre creare un alias per 'sì x | latexmk' se avete intenzione di utilizzare questa opzione lotti. Il vantaggio principale di questo che posso vedere sopra gli altri suggerimenti è che è molto veloce per quando si desidera di tanto in tanto latexmk a comportarsi in questo modo.
Mehmet
C'è anche un comando \batchmode
può fare il lavoro.