Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Don't make me manually abort a LaTeX compile when there's an error

As suggested here, latexmk is a handy way to continually compile your document whenever the source changes. But often when you're working on a document you'll end up with errors and then latex will panic and wait for user input before continuing. That can get very annoying, especially recently when I hacked up something to compile latex directly from an etherpad document, which saves continuously as you type.

Is there a setting for latex or latexmk to make it just abort with an error message if it can't compile? Or, if necessary, how would I set up some kind of Expect script to auto-dismiss LaTeX's complaints?

(I had thought pdflatex's option -halt-on-error would do the trick but apparently not.)

Bonus question: Skim on Mac OSX is a nice pdf viewer that autorefreshes when the pdf changes (unlike Preview), except that whenever there's a latex error it makes you reconfirm that you want autorefreshing. Texniscope doesn't have this problem, but I had to ditch Texniscope for other reasons. Is there a way to make Skim always autorefresh, or is there another viewer that gets this right?


ADDED: Mini-tutorial on latexmk based on the answer to this question:

  1. Get latexmk here: http://www.phys.psu.edu/~collins/software/latexmk-jcc/

  2. Add the following to your ~/.latexmkrc file:

    $pdflatex = 'pdflatex -interaction=nonstopmode'; 

    (For OS X with Skim)

    $pdf_previewer = "open -a /Applications/Skim.app"; 
  3. While editing your source file, foo.tex, run the following in a terminal:

    latexmk -pvc -pdf foo.tex 
  4. Use Skim or another realtime pdf viewer to view foo.pdf. For Skim, just look at the “Sync” tab in Skim’s preferences and set it up for your editor.

Voila! Hitting save on foo.tex will now cause foo.pdf to refresh without touching a thing.

like image 528
dreeves Avatar asked Apr 10 '09 20:04

dreeves


People also ask

How do I ignore an error in latex?

The -halt-on-error option instructs the program to return a non-zero error code when an error is found. This is useful when you are e.g. calling latex from a script or from the make utility.

Why is overleaf not compiling?

If your document compiles locally, but not on Overleaf, the most common causes are compilation timeouts, or the use of uncommon templates or packages that do not come standard with TeXLive. See here, for more details on compilation timeout errors.


2 Answers

With MikTeX, pdflatex has this command-line option:

  -interaction=MODE               Set the interaction mode; MODE must be one                                   of: batchmode, nonstopmode, scrollmode,                                   errorstopmode. 

Edit suggested by @9999years:

Those values are equivalent to a set of LaTeX \commands that provide the same functionality.

From TeX usage tips:

The modes make TeX behave in the following way:

  • errorstopmode stops on all errors, whether they are about errors in the source code or non-existent files.

  • scrollmode doesn't stop on errors in the source but requests input when a more serious error like like a missing file occurs.

  • In the somewhat misnamed nonstopmode, TeX does not request input after serious errors but stops altogether.

  • batchmode prevents all output in addition to that (intended for use in automated scripts). In all cases, all errors are written to the log file (yourtexfile.log).

like image 166
Bastien Léonard Avatar answered Oct 06 '22 01:10

Bastien Léonard


You can also put \nonstopmode or \batchmode at the very beginning of your tex file; then it'll work with any TeX version, not just pdflatex. For more info on these and related commands see the very good reference on (raw) TeX commands by David Bausum. Especially the command from the debugging family could be of interest here.

like image 26
Elmar Zander Avatar answered Oct 06 '22 00:10

Elmar Zander