# Is there a program equivalent to lint for LaTeX?

Is there a program equivalent to lint for LaTeX? (lint checks C code for syntax errors and possible mistakes.)

Yes, ChkTeX and lacheck. (You probably already have it: if you're using AucTeX on Emacs, when you hit C-c C-c to compile, type ChkTex or Check (for ChkTex and lacheck respectively). Or else, at the commandline, try lacheck.) Thanks for reminding me of this; I ought to use it more (though it can be very annoying :P).

• It's also worth noting that if you're AucTex on Emacs you can also use m-x flyspell-mode for spell-checking. – JSchlather Jul 26 '10 at 21:24

lacheck and ChkTeX are lint-like things that I have used. check, which I have not used, also seems to provide syntax checking.

Below is a link to a package that provides style checking for latex source files.

It will find common latex typos (e.g. " instead of ) rather than overt syntax problems. It also comes with a set of rules to detect common grammar mistakes.

I used it (with some modifications to the style rules) on my thesis. I found it most useful to enforce my own spelling rules and standardize some latex constructions.

It's pretty easy to customize, which makes it handy; though I haven't used the other suggestions so I don't know how easy they are to customize.

• This seems to be more about writing style and less about LaTeX style than ChkTeX or lacheck. Not to say that it's bad, just different. In fact I think they complement each other fairly well. – Ivan Andrus Mar 29 '12 at 19:56
• A more recent version is now on github.com/nspring/style-check – Jonas Stein Sep 6 '17 at 11:03

Because TeX is a markup language it doesn't suffer from things like undefined behaviour as C, so we are mostly down to detecting errors ahead of the run.

ConTeXt comes with a syntax checker script for checking mismatched braces. Unfortunately it cannot tell you about undefined control sequences because you can (re)define your own, so this is impossible to know prior to running.

\starttext

This is some text\footnote{Oops missing brace

\stoptext

\$ mtxrun --script check test.mkvi
3  grouping error  xt <lf>  <lf> This is some text\footnote{Oops missing brace <lf>  <lf> \stoptext <lf>


The nag package might be worth mentioning in this context:

Old habits die hard. All the same, there are com­mands, classes and pack­ages which are out­dated and su­per­seded. The nag pack­age pro­vides rou­tines to warn the user about the use of such ob­so­lete things. As an ex­am­ple, we pro­vide an ex­ten­sion that de­tects many of the “sins” de­scribed in l2tabu.