TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I attempted to redefine the document environment as follows, but get a complaint that:

LaTeX Error: \begin{MYdocument} on input line 13 ended by \end{document}.

\SpecialText={Text to be printed after begin document}

  Note: \the\SpecialText

 ... file contents ...

I want this to produce the following output

Note: Text to be printed after begin document

... file contents ...

If I could do this by just slightly modifying the environment that would be preferable so that I could just use \begin{document} ... \end{document}.

share|improve this question
I tried to make the title of your question clearer by adding the word "text" - is that OK? – Hendrik Vogt Mar 24 '11 at 9:48
The latex-general tag (and also latex3) is for questions about LaTeX and the LaTeX project in general. A good example is Difference between LaTeX, LaTeX2e, LaTeX3?. Your question is about a specific task and therefore should not be tagged with it. – Martin Scharrer Mar 24 '11 at 9:56
up vote 45 down vote accepted

You can use the \AtBeginDocument command before the \begin{document} line to queue up code (even multiple pieces of code) so that it it executed when that line is hit. Here's a reference.

share|improve this answer
Thank You. That is a MUCH better solution that what I was attempting... – Peter Grill Mar 24 '11 at 3:39
Note that the reference given is not up to date, see this version. An update of december 1996 states that no typesetting can (should) be done with \AtBeginDocument. Check out this for more information on why you should not do this. – TonioElGringo Mar 3 '15 at 12:21

As already stated by Aaron, \AtBeginDocument{<code>} can be used to place code "at the begin of the document". This hook is executed after the old .aux is read in and the new one is opened, but before the preamble is officially closed. Therefore the code can still load packages and add already type-settable material which writes into the .aux file, like sectioning commands. So it is actually executed with one foot in the preamble and the other one in the document body.

The etoolbox package provides \AfterEndPreamble{<code>} (and other useful hooks) which is executed after the preamble is closed, so e.g. all preamble-only macros are disabled etc. Actually it is executed at the very end of \begin{document}, only followed by an \ignorespaces. I personally would prefer \AfterEndPreamble to \AtBeginDocument (already heavily used by packages) to add code at the very beginning of the document body.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.