### No room for a new ‘thing’

The technology available to Knuth at the time TeX was written is said to have been particularly poor at managing dynamic storage; as a result much of the storage used within TeX is allocated as fixed arrays, in the reference implementations. Many of these fixed arrays are expandable in modern TeX implementations, but size of the arrays of “registers” is written into the specification as being 256 (usually); this number may not be changed if you still wish to call the result TeX (see testing TeX implementations).

If you fill up one of these register arrays, you get a TeX error message saying

>     ! No room for a new \<thing>.

The `\``thing`s in question may be `\``count` (the object underlying LaTeX’s `\``newcounter` command), `\``skip` (the object underlying LaTeX’s `\``newlength` command), `\``box` (the object underlying LaTeX’s `\``newsavebox` command), or `\``dimen`, `\``muskip`, `\``toks`, `\``read`, `\``write` or `\``language` (all types of object whose use is “hidden” in LaTeX; the limit on the number of `\``read` or `\``write` objects is just 16).

There is nothing that can directly be done about this error, as you can’t extend the number of available registers without extending TeX itself. Of course, e-TeX and Omega both do this, as does MicroPress Inc’s VTeX.

The commonest way to encounter one of these error messages is to have broken macros of some sort, or incorrect usage of macros (an example is discussed in epsf problems).

However, sometimes one just needs more than TeX can offer, and when this happens, you’ve just got to work out a different way of doing things. An example is the difficulty of loading PiCTeX with LaTeX. In cases like PiCTeX, it may be possible to use e-TeX (all modern distributions provide it). The LaTeX package etex modifies the register allocation mechanism to make use of e-TeX’s extended register sets (it’s a derivative of the Plain TeX macro file etex.src, which is used in building the e-TeX Plain format; both files are part of the e-TeX distribution). Unfortunately, e-TeX doesn’t help with `\``read` or `\``write` objects.

This question on the Web: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=noroom