TeX's primitives can be renamed by macro formats/packages: this allows new/altered features or behaviours. Usually this is done such that the originals are still available ('renamed'): certainly LaTeX2e does this (for example \@@end). Which primitives does ConTeXT rename/move, and where do they 'end up'? As there are two ConTeXt versions (MkII and MkIV), are there any differences between the two in this regard?


ConTeXt moves several primitives, renaming them systematically using the prefix \normal.... For ConTeXt MkII, all but one of the primitives moved are from TeX90: there is also one from e-TeX and one 'pdfTeX' one that appears only in LuaTeX:

  • \end
  • \everyjob
  • \expanded
  • \input
  • \language
  • \mathop
  • \month
  • \outer
  • \over
  • \unexpanded
  • \vcenter

All of these are saved as \normal..., e.g. \normalend is the \end primitive.

ConTeXt MkIV moves all of the above plus a few additional primitives from TeX90/e-TeX:

  • \/ (saved as \normalitaliccorrection)
  • \hoffset
  • \left
  • \middle
  • \right
  • \voffset

MkIV uses some Lua code to extend/alter the behaviour of these primitives: again the originals are saved as \normal....

It also moves two LuaTeX primitives:

  • \bodydir
  • \pagedir

These are 'hidden' as \spac_directions_normal_body_dir and \spac_directions_normal_page_dir: the \normal... commands do exist but are not equivalent to the primitives.

  • @JosephWright: There are unofficial public git repos of the ConTeXt betas at repo.or.cz/w/context.git/shortlog/refs/heads/origin and gitorious.org/context. Running git blame on math-fen.mkiv shows that these primitives were overridden on 2013.10.20 commit: repo.or.cz/w/context.git/commit/… – Aditya Apr 17 '14 at 6:23
  • @Aditya Thanks: that what I suspect, but wanted someone with a bit more knowledge to help me out :-) – Joseph Wright Aug 4 '14 at 16:59
  • It seems as if \mathop is not moved in current TL2016 MkIV. If I typeset the following minimal expample \starttext\meaning\mathop\stoptext it simply prints \mathop. – Henri Menke Jun 20 '16 at 11:42
  • Furthermore is \outer is just empty macro. – Henri Menke Jun 20 '16 at 11:50
  • @HenriMenke Reuse (or similar) is a different question: if you want the \outer primitive in ConTeXt then \normalouter (or \primitive\outer or a Lua approach) is the way to go. – Joseph Wright Jun 20 '16 at 12:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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