### 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 \things 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, Omega and LuaTeX all 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. The more modern drawing package, pgf with its higher-level interface TikZ is also a common source of such problems.

In such cases, it is usually possible to use the e-TeX extensions (all modern distributions provide them). The LaTeX package etex modifies the register allocation mechanism to make use of e-TeX’s extended register sets. Etex is 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 and are available in current distributions.

It is possible that, even with etex loaded, you still find yourself running out of things. Problems can be caused by packages that use large numbers of “inserts” (inserts are combinations of counter, box, dimension and skip registers, used for storing floats and footnotes). Morefloats does this, of course (naturally enough, allocating new floats), and footnote packages such as manyfoot and bigfoot (which uses manyfoot) can also give problems. The etex extensions allow you to deal with these things: the command \reserveinserts{n} ensures there is room for <n> more inserts. Hint: by default morefloats adds 18 inserts (though it can be instructed to use more), and manyfoot seems to be happy with 10 reserved, but there are ‘hard’ limits that we cannot program around — the discussion of running out of floats has more about this. It is essential that you load etex before any other packages, and reserve any extra inserts immediately:

\documentclass[...]{...}
\usepackage{etex}
\reserveinserts{28}

The e-TeX extensions don’t help with \read or \write objects (and neither will the etex package), but the morewrites package can provide the illusion of large numbers of \write objects.

morewrites.sty
macros/latex/contrib/morewrites (or browse the directory); catalogue entry

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