Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
generalites:erreurs:n:no_room_for_a_new_register [2019/07/17 14:00] – jejust | 2_programmation:erreurs:n:no_room_for_a_new_register [2022/10/10 14:31] (Version actuelle) – Usage de ⟨...⟩ dbitouze |
---|
====== Que veut dire l'erreur: ''No room for a new <//registre//>'' ? (//TeX//) ====== | ====== Que signifie l'erreur: « No room for a new ⟨registre⟩ »? ====== |
| |
Les extensions chargées dans le document demandent plus de registres internes (''\count'', ''\dimen''...) que ce que <latex>\TeX{}</latex> peut proposer. Il faut compiler le document avec eTeX et charger également l'extension [[ctanpkg>eTeX]]. | * **Message**: ''No room for a new ⟨//registre//⟩'' |
| * **Origine**: //TeX//. |
| |
----- | Les extensions chargées dans le document demandent plus de registres internes que ce que <latex>\TeX</latex> peut proposer. Il faut compiler le document avec ε-<latex>\TeX</latex> et charger également l'extension [[ctanpkg>eTeX]]. |
//Source:// https://latex.developpez.com/faq/erreurs?page=N | |
| |
| La technologie disponible pour Donald Knuth au moment de l'écriture de <latex>\TeX</latex> s'avérait particulièrement médiocre dans la gestion du stockage dynamique. Par conséquent, une grande partie du stockage utilisé dans <latex>\TeX</latex> 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 <latex>\TeX</latex>, 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 <latex>\TeX</latex> (voir la question « [[1_generalites:bases:verifier_la_conformite_de_son_compilateur|Comment être sûr que c'est vraiment TeX ?]] »). |
| |
| Si vous saturez un de ces tableaux de registres, vous obtenez un message d'erreur <latex>\TeX</latex> indiquant : |
| |
| <code latex> |
| ! No room for a new \⟨truc⟩. |
| </code> |
| |
| Le ''\⟨//truc//⟩'' en question peut être : |
| * ''\count'', l'objet sous-jacent à la commande ''\newcounter'' de <latex>\LaTeX</latex> ; |
| * ''\skip'', l'objet sous-jacent à la commande ''\newlength'' de <latex>\LaTeX</latex> ; |
| * ''\box'', l'objet sous-jacent à la commande ''\newsavebox'' de <latex>\LaTeX</latex> ; |
| * ''\dimen'' ; |
| * ''\muskip'' ; |
| * ''\toks'' ; |
| * ''\read'' (limité à 16 objets) ; |
| * ''\write'' (limité à 16 objets) ; |
| * ''\language''. |
| |
| ===== L'évolution de cette contrainte ===== |
| |
| Les formats actuels de <latex>\LaTeX</latex> sont toujours construits avec les extensions [[1_generalites:glossaire:qu_est_ce_que_etex|ε-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>\LaTeX</latex> (antérieur à 2015) qui vérifie la limite d'origine de 256, même si un <latex>\TeX</latex> étendu est utilisé. La mise à jour vers une version actuelle de <latex>\LaTeX</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 <latex>\TeX</latex> é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 <latex>\TeX</latex> étendu. Toutefois, l'extension [[ctanpkg>morewrites|morewrites]] peut fournir //l'illusion// d'un plus grand nombre de ''\write'' disponible. |
| |
| ===== 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>\LaTeX</latex> postérieur à 2015. Cependant si vous devez utiliser un ancien format, l'extension [[ctanpkg>morefloats|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 [[ctanpkg>epsf]], il était indiqué qu'il fallait placer la commande suivante à chaque fois qu'une image EPS était insérée. |
| |
| <code latex> |
| \input epsf |
| </code> |
| |
| En suivant cette consigne dans un document contenant plusieurs images, on arrivait systématiquement à l'erreur suivante : |
| |
| <code bash> |
| ! No room for a new \read . |
| </code> |
| |
| 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 |
| |
| <code latex> |
| ... |
| \input epsf |
| \epsffile{...} |
| ... |
| \input epsf |
| \epsffile{...} |
| </code> |
| |
| par un simple |
| |
| <code latex> |
| \input epsf |
| </code> |
| |
| 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 :// |
| * [[https://latex.developpez.com/faq/erreurs?page=N]], |
| * [[https://www.latex-project.org/help/books/#french|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, |
| * [[faquk>FAQ-epsf|epsf gives up after a bit]], |
| * [[faquk>FAQ-noroom|No room for a new "_thing_"]]. |
| |
{{htmlmetatags>metatag-keywords=(messages d'erreur de LaTeX,register,mode eTeX,problème de mémoire,limites de LaTeX) | {{htmlmetatags>metatag-keywords=(LaTeX,TeX,erreur,messages d'erreur de LaTeX,register,mode eTeX,problème de mémoire,limites de LaTeX) |
metatag-og:title=(Que veut dire l'erreur: No room for a new <registre> ?) | metatag-og:title=(Que signifie l'erreur: « No room for a new ⟨registre⟩ ») |
metatag-og:site_name=(FAQ LaTeX francophone) | metatag-og:site_name=(FAQ LaTeX francophone) |
}} | }} |
| |