Que signifie l’erreur : « No room for a new ⟨registre⟩ » ?#
- Message:
No room for a new ⟨registre⟩
- Origine:
TeX.
Les extensions chargées dans le document demandent plus de registres internes que ce que TeX peut proposer. Il faut compiler le document avec ε‑TeX et charger également l’extension ε‑TeX.
La technologie disponible pour Donald Knuth au moment de l’écriture de TeX s’avérait particulièrement médiocre dans la gestion du stockage dynamique. Par conséquent, une grande partie du stockage utilisé dans TeX se fait par l’allocation de tableaux fixes, dans les implémentations de référence. Beaucoup de ces tableaux fixes sont extensibles dans les implémentations modernes de TeX, mais la taille des tableaux de « registres » est écrite dans la spécification comme étant 256 (généralement). Cette valeur ne doit d’ailleurs pas être changé si vous souhaitez toujours appeler le résultat TeX (voir la question « Comment être sûr que c’est vraiment TeX ? »).
Si vous saturez un de ces tableaux de registres, vous obtenez un message d’erreur TeX indiquant :
! No room for a new \⟨truc⟩.
Le \⟨truc⟩
en question peut être :
\count
, l’objet sous-jacent à la commande\newcounter
de LaTeX ;\skip
, l’objet sous-jacent à la commande\newlength
de LaTeX ;\box
, l’objet sous-jacent à la commande\newsavebox
de LaTeX ;\dimen
;\muskip
;\toks
;\read
(limité à 16 objets) ;\write
(limité à 16 objets) ;\language
.
1. L’évolution de cette contrainte#
Les formats actuels de LaTeX sont toujours construits avec les extensions ε‑TeX activées, ce qui signifie qu’il y a 32768 registres disponibles pour les éléments autres que \read
et \write
. Pour sa part, LuaLaTeX
étend cela plus loin avec 65536 registres pour la plupart des éléments, 256 flux \write
mais toujours 16 flux \read
.
Aussi, à l’heure actuelle, si vous obtenez cette erreur maintenant pour des éléments autres que les flux de fichiers, c’est parce que vous avez un ancien format LaTeX (antérieur à 2015) qui vérifie la limite d’origine de 256, même si un TeX étendu est utilisé. La mise à jour vers une version actuelle de LaTeX devrait résoudre le problème. Si vous avez vraiment utilisé 32768 registres, il est fort probable que vous ayez une erreur de programmation qui provoque une boucle pour allouer tous les registres disponibles et donc un TeX étendu ne vous aiderait pas. Vous pouvez cependant essayer avec LuaLaTeX
qui a des limites plus grandes dans la plupart des cas.
Le nombre de flux d’écriture est limité à 16 (ou 256 pour LuaTeX
) même avec un TeX étendu. Toutefois, l’extension morewrites peut fournir l’illusion d’un plus grand nombre de \write
disponible.
2. Des erreurs proches#
Une erreur connexe est celle indiquant que le nombre de commandes \inserts
a été dépassé. Cette commande est indirectement liée aux registres \count
, \dimen
et \skip
, ce qui la limite à 256 insertions. Il est peu probable que vous obteniez cette erreur sur un format LaTeX postérieur à 2015. Cependant si vous devez utiliser un ancien format, l’extension morefloats augmente le nombre d’insertions disponibles pour le mécanisme des flottants.
Dans d’autres cas, une solution parfois plus simple suffit. Par exemple, dans certains exemplaires de la documentation de l’extension epsf, il était indiqué qu’il fallait placer la commande suivante à chaque fois qu’une image EPS était insérée.
\input epsf
En suivant cette consigne dans un document contenant plusieurs images, on arrivait systématiquement à l’erreur suivante :
! No room for a new \read .
En fait, à chaque fois que epsf.tex
est chargé, il s’attribue un nouveau emplacement de lecture de fichier pour vérifier la figure pour sa boîte englobante… et il n’y a tout simplement pas assez de ces éléments. Dès lors, la solution est simple : remplacer la séquence de commandes
...
\input epsf
\epsffile{...}
...
\input epsf
\epsffile{...}
par un simple
\input epsf
placé plutôt au début du document. Puis ajouter les commandes \epsffile
avec un simple ajustement par la commande \epsfxsize
si nécessaire.
Sources
LaTeX Companion, 2e édition, Frank Mittelbach, Michel Goossens, Johannes Braams, David Carlisle, Chris Rowley (Pearson, 2006) ; ISBN : 978-2-7440-7182-9. Annexe B, Détecter et résoudre les problèmes, reproduite avec l’aimable autorisation de l’éditeur,