421 Sem espaço para uma nova ‘coisa

A tecnologia disponível para Knuth na época em que o TeX foi escrito tem fama de que era bem ruim em gerenciar memória dinâmica; por isso, muito do armazenamento usado dentro do TeX é alocado como tabelas fixas, nas implementações de referência. Muitas dessas tabelas fixas são expansíveis em implementações modernas do TeX, mas o tamanho das tabelas de “registros” que está na especificação é 256 (geralmente); esse número não pode ser alterado se você ainda quiser chamar o resultado de TeX (veja Como ter certeza de que é realmente TeX).

Se você encher uma dessas tabelas de registros, você vai receber uma mensagem de erro do TeX dizendo

! No room for a new \.
A \things em questão pode ser \count (o objeto que estrutura o comando \newcounter do LaTeX), \skip (o objeto que está por trás do comando \newlength do LaTeX), \box (o objeto que está por trás do comando \newsavebox do LaTeX), ou \dimen, \muskip, \toks, \read, \write ou \language (todos tipos de objeto cujo uso está "escondido" no LaTeX; o limite do número de objetos \read ou \write é de apenas 16).

Não há nada que possa ser feito diretamente em relação a esse erro, já que não dá para estender o número de registros disponíveis sem estender o próprio TeX.

Claro que e-TeX, Omega e LuaTeX fazem isso, assim como o VTeX da MicroPress Inc.

A maneira mais comum de encontrar uma dessas mensagens de erro é ter uma macro defeituosa de algum tipo, ou usar macros incorretamente (um exemplo é discutido em epsf desiste depois de um tempo).

Porém, às vezes, você precisa de algo além do que o TeX pode oferecer e, quando isso acontece, você precisa encontrar uma maneira diferente de fazer as coisas. Um exemplo é a dificuldade de carregar o PicTeX com o LaTeX.O mais moderno pacote de desenho, o pgf , com sua interface de alto nível, a TikZ, é também uma frequente fonte desses problemas.

Nesses casos, geralmente, é possível usar extensões e-TeX (todas as distribuições modernas as fornecem). O pacote etex do LaTeX modifica o mecanismo de alocação de registros para fazer uso dos conjuntos de registro estendidos do e-TeX. Etex é um derivado do arquivo de macro etex.src do [[[plaintex]]], que é usado na construção do formato e-TeX Plain; ambos os arquivos fazem parte da distribuição do e-TeX e estão disponíveis em distribuições atuais.

É possível que, mesmo com o etex carregado, você ainda se veja sem espaço suficiente para coisas. Problemas podem ser causados por pacotes que usam um grande número de “inserções” (inserções são combinações de registros de counter, box, dimension e skip, usadas para armazenar caixas flutuantes e notas de rodapé). O Morefloats faz isso, obviamente (alocando novas caixas flutuantes), e pacotes de notas de rodapé como o manyfoot e o bootfoot (que usa o manyfoot) também podem gerar problemas. As extensões etex permitem que você lide com essas coisas: o comando \reserveinserts{n} garante que haja espaço para mais ‹n› inserções. Dica: por padrão, o morefloats adiciona 18 inserções (apesar de poder ser instruído a usar mais) e o manyfoot parece ficar satisfeito com apenas 10 reservadas, mas existem limites "rígidos" que não podemos contornar  — a discussão sobre [[[Qref]]]*[[[LBRACE]]] Muitas caixas flutuantes não processadas[[[RBRACE]]] tem mais sobre o assunto. É essencial que você carregue o etex antes de qualquer outro pacote e reserve qualquer inserção extra imediatamente:

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

As extensões do e-TeX não ajudam com objetos \read ou \write (o pacote etex também não), mas o pacote morewrites pode gerar a ilusão de maiores números de objetos \write.

morewrites.sty
morewrites


Do you have any question? Ask on: latex.net.br - we love qood questions!