I have this error message:
! No room for a new \dimen . \ch@ck ...\else \errmessage {No room for
a new #3}
\fi
which I can not find a cure for.
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It only takes a minute to sign up.
Sign up to join this communityThis can depend on two reasons:
\newdimen
inside the definition of a command.In case 1, load
\usepackage{etex}
just after the \documentclass
line. In case 2, correct the definition.
If you're loading morefloats
or manyfoot
, then add
\reserveinserts{28}
just after loading etex
; this is necessary to accomplish with the needs of those packages.
This trick has to do with the allocation mechanism of insertion classes, that use "high" numbered registers; for example the insertion class \@mpfootnotes
uses the registers with number 254 and the last allocated one uses 234. An insertion class reserves the registers of type \count
, \dimen
, \skip
, \box
and, of course, \insert
with the assigned number. Conversely, commands such as \newcounter
or \newlength
start from 11 upwards.
When the last allocated counter or length corresponds to number 233, the next request would result (with ordinary LaTeX) in the No room
message. By loading etex
, in this case the system will allocate instead the first free register in the extended pool, that is, from 256 to 32767.
The packages morefloats
and manyfoot
allocate 18 and 10 insertion classes; but, depending on the loading order, this could cause clashes; say that packages loaded before them allocate \count
registers up to 220: there will be no room for the new insertion classes.
The command \reserveinserts{28}
fools the allocation mechanism by pretending that registers from 206 to 233 are already occupied, so a request for a new register, when the last allocated one was 217, will go directly to the extended pool. In this way, morefloats
and manyfoot
can do their allocations safely, by occupying slots that are surely free, independently on the package loading order (the allocation commands are conveniently patched so as to not interfere with the process of insertion class allocation).
As Stephen remarks in a comment, if morefloats
is loaded with more than 18 additional floats (which is the default), then the argument to \reserveinserts
should be modified accordingly. Just add 10 to the number of floats for morefloats
in case you also use manyfoot
.
With the release of LaTeX dated January 1, 2015, the extended allocation mechanism has been incorporated in the kernel, so loading etex
is not needed any more, provided an engine supporting e-TeX extension is used, which should be the case for TeX distributions released in the last ten years.
Note that older engines that don't support such extensions wouldn't have accepted loading etex
anyway.
Also loading morefloats
is not needed any more, because the new kernel provides the command \extrafloats
that overcomes the need to issue \reserveinserts
. For allocating more than the default 18 boxes in the float queues, use \extrafloats{20}
(or whatever number you need).
Other features of the etex
package (local allocations of registers) are now provided by the elocalloc
package.
This is a FAQ, which is answered at https://texfaq.org/FAQ-noroom
\foo{bar}
to make this work, add \baz
to make it orange. Blue won't work. To find out why not and how this all works, check out the FAQ article, where I got this solution from."
Jan 15, 2012 at 18:11
\documentclass{beamer}\usepackage{standalone}\usepackage{subfig}...
(and, yes, the first answer solves the problem).