Following Will Robertson's admission that Fwiw, i'm not aware of any troubles with a missing \makeatother, but you're right. It's a bad habit of mine to omit it, and my own progressive slackness about the same thing following my realisation that I never see it matter, I wonder how important the \makeatother discipline is?

The worst consequence I can think of for experienced users from slackness about closing with \makeatother is that one's slackness might spread to omitting \ExplSyntaxOff with expl3, which is very far from trouble-free. But that's not a mistake anyone is going to get used to making.

The insidious worry is that not following the discipline means that some people might become unclear about the distinction between "package/Knuth namespace" and "user namespace".

But I can't say that either of these considerations seems very urgent. It doesn't seem important in the same way as such a programmatic discipline as eliminating avoidable state in interfaces. Is there something more compelling?

  • 3
    You soon know when you forget \ExplSyntaxOff!
    – Joseph Wright
    Feb 22, 2011 at 18:59
  • Heh, I guess I shouldn't have admitted that! Feb 22, 2011 at 22:04
  • Here is a comment about this. Mar 3, 2013 at 2:40

2 Answers 2


In theory it would be possible that there is a @ direct after a macro in the users document or in one of the auxiliary files. Without the \makeatother this would cause trouble.

A second source of trouble are special packages which read user input and compare them using \let/\futurelet and \ifx. I'm not sure how the array package parses a potential @ in the column definition of tabular, but e.g. my tikz-timing package allows @{<code>} sequences and I was wise enough to test for @ with catcode letter and other. If I wouldn't have thought of that a missing \makeatother would break certain user code without much idea why.

In general it is good programming practice to close everything you open explicitly by yourself. This can be \makeatletter/\makeatother or \openout/\closeout or anything like it. This doesn't apply when the change was localized using a group.

  • Good answer. There are some small packages around that don't check for the catcode of @ so you're absolutely right. Feb 22, 2011 at 22:06
  • 1
    I'm convinced. Incidentally, the question arose from this edit. Feb 23, 2011 at 8:53

A problem with slack \makeatother discipline is that it clashes with the use of \@ to reset the space factor after non-sentence-ending periods.

Articles from the Proc. Amer. Math. Soc.

Articles from the Proc.\@ Amer.\@ Math.\@ Soc.

Articles from the Proc.\@ Amer.\@ Math.\@ Soc.
  • 3
    Ah, this seems so because TeX doesn't remove spaces after the special single character macros. AFAIK it doesn't have to because it doesn't have to look ahead for the rest of the macro name because it is by definition only one character long. If the @ is a letter more letter could follow and the space is removed like after every normal macro. May 17, 2011 at 11:39
  • Thanks for providing the explanation. I was in a bit of a rush, so I hadn't. May 17, 2011 at 11:48
  • 3
    This is an excellent point. It's also one that could easily be overlooked when proofing copy. May 17, 2011 at 13:20

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .