55

Is there a way to stop the compile process through the use of a command? Something like:

 \exception{This is a user-set exception. Compile halted.} 

So when performing the compile process, the specified text string is displayed to the console, and the compile process aborts?

The reason I want to do something like this is I want to have a conditional statement that checks a user-defined parameter. If the parameter is outside a desired range, I want the user to be informed that they made a bad choice and should change it.

Thanks in advance.

1
  • 6
    The solutions below are better, but I just use \typeout{<text>}\QUIT, where \QUIT is not defined. Commented Jun 19, 2012 at 21:41

5 Answers 5

40
 \PackageError{mypackage}{you did it wrong}{help text} 
2
  • 1
    And if it is not in a package but in a plain LaTeX file? For example, i want to produce an error message if my file is compiled with anything other than XeLaTeX. Commented Oct 3, 2017 at 9:50
  • 2
    \GenericError @Alexey Commented Oct 3, 2017 at 10:17
34

Maybe not the best solution, but for the sake of completeness:

\stop 

in LaTeX and

\bye 

in plain TeX.

1
  • 2
    Note: those will produce the output (which might be what you want). Commented Nov 27, 2014 at 19:43
26

There are a number of error and warning commands for use in different situations. See section 4.9 of LaTeX2e for class and package authors for details of \ClassError and \PackageError (also \ClassWarning and PackageWarning), and have a look at macros2e.pdf for \GenericError (and \GenericWarning).

15

i like @PeterGrill's \typeout{<text>}\QUIT approach because after reading the message, the user can choose to hit the enter key and continue. yes, it might cause more problems later, but it also might allow more problems to be brought to light in the same run so that they can all be corrected at once, instead of one at a time.

and actually, \PackageError will do the same thing with a more informative message.

13

you can insert the end{document}

\documentclass{article} \def\foo{} %\def\foo{quit} % uncomment for stopping sourcecode reading \begin{document} foo \if\relax\foo\else\par I'll stop reading source code \ldots \end{document} \fi bar \end{document} 

If the break is in an included file use:

foo \def\next{} \if\relax\foo\else\par I'll stop reading source code in the included file \ldots \def\next{\endinput\end{document}} \fi \next foo in the included file 
2
  • 1
    But don't do this in tex files that are \included, otherwise you may hit a "Runaway Argument?" with "! File ended while scanning use of \@writefile/\@newl@bel", as in size-limit for aux, problem w/ hyperref, natbib, include • General • LaTeX Community; \stop in those cases seems to work better. Commented Feb 15, 2014 at 13:34
  • 2
    with a modification it also possible to quit the run in an included file! Commented Feb 15, 2014 at 13:54

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.