Pourquoi l'erreur ''TeX capacity exceeded''?

$\Reponse$ Si \TeX vous indique cette erreur, il y a de très très fortes chances pour que votre document soit mal écrit et consomme trop de mémoire. Il arrive que certains documents produisent cette erreur alors qu'ils sont bien écrits, par exemple s'ils contiennent des pages très compliquées, ou s'ils utilisent énormément de fontes, ou s'ils incluent un nombre faramineux d'images.

$\Reponse$ La capacité de \TeX est limitée de manière interne. Cela signifie que ce sont des variables de \TeX qui fixent le nombre de variables (et la taille mémoire) maximal que \TeX s'autorisera à utiliser. Si vous utilisez plus de variables que prévu, \TeX s'arrêtera sur le message d'erreur : sorry, TeX capacity exceeded suivi du nom de la zone saturée.

Il s'agit d'un reste de l'époque maintenant lointaine où \TeX a été écrit. En ces temps lointains, les systèmes d'exploitation n'étaient en général pas capable d'allouer de la mémoire à un programme n'importe quand. Un programme devait donc demander une quantité de mémoire au début de son exécution, et s'en contenter durant tout le cours de son exécution. \TeX a donc été écrit pour ne jamais redemander de mémoire au système. Il en prend une quantité fixée au démarrage et n'en redemandera plus jusqu'à la fin.

Cette façon de faire permet, en outre, de localiser certains problèmes très vite. Un document mal écrit, qui consomme trop de mémoire (une boucle infinie, ou quelque chose comme ça) va provoquer rapidement une erreur: au moment où il sera arrivé au bout de la mémoire demandée par \TeX – et non pas au moment où il sera arrivé au bout de la mémoire de la machine et de tout l'espace disque disponible comme mémoire virtuelle.

$\Reponse$ Dans les distributions récentes, le fichier texmf.cnf contient plusieurs variables qui fixent la taille mémoire utilisable par \TeX ; celle-ci est divisée en plusieurs zones, chacune de taille fixée au début de la compilation. Par exemple, la zone qui sert à stocker les fontes n'est pas la même que celle qui stocke les noms de macros ou les noms de fichiers, ou encore les contenus des pages, etc. Selon celle qui a saturé pendant la compilation, il faut adapter certaines tailles. Par exemple, si le message d'erreur précise [main memory size=…], on peut augmenter la valeur des variables extra_mem_top et/ou extra_mem_bot (à la rigueur la valeur de main_memory mais il faudra alors refaire les formats).

$\Reponse$ Si le message précise [pool size=…] et que le document comporte un grand nombre de flottants, les buffers de \TeX sont saturés. Une solution consiste alors à vider régulièrement ces buffers en forçant la place des flottants (par des \clearpage par exemple pour laisser la place nécessaire aux figures…).

generalites/erreurs/tex_capacity_exceeded.txt · Dernière modification: 2018/12/09 12:36 par jejust
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0