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

The above gives error:

Runaway definition?
! Forbidden control sequence found while scanning definition of \test.
share|improve this question

\+ is a outer macro, it cannot be used in the definition of another macro. In plain.tex, it is defined as


You can use \tabalign instead. Say,

\def\test{\tabalign test\cr}
share|improve this answer

A different approach is to neutralize momentarily the outer macro:


It can be used for the outer macros that have no "inner" version like \bye, \beginsection or \proclaim.



Of course \csname beginsection\endcsname would have worked too, as Joseph points out.

share|improve this answer

Another option to put an outer control sequence inside a macro is \noexpand:


The \noexpand command prevents expansion in an \edef (expanding def), and also hide "outerness".

share|improve this answer
The usual way to include an \outer control sequence inside something else is to use \csname ... \endcsname, which does not also leave you worrying about expansion. – Joseph Wright Jun 21 '11 at 7:20
True. The advantage of using \noexpand is that it also allows the \outer control sequence to come in an argument, expandably: \def\foo{\expandafter\fooo\noexpand} \def\fooo#1{...} works even if #1 is normally \outer. (I saw this in a solution of one of M.Downes exercises.) – Bruno Le Floch Jun 21 '11 at 15:21

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.