TeX capacity exceeded, ⟨explication⟩
a dépassé la capacité de l'un de ses types de mémoires et arrête son travail. Plusieurs variantes existent au titre de l'explication, certaines faisant l'objet d'une réponse dédiée :
Il s'agit d'un reste de l'époque maintenant lointaine où 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. 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 d'équivalent) va provoquer rapidement une erreur : au moment où il sera arrivé au bout de la mémoire demandée par – 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.
Cette erreur est étudiée en détail à la section B.1.1 page 932 du LaTeX Companion.
Bien que suggère, comme toujours, qu'une augmentation de taille faite par un magicien (autrement dit un expert) pourrait aider à résoudre cette question de capacité dépassée, ce message résulte souvent d'autres causes :
buf_size
a été dépassée) ;[pool size=…]
et que le document comporte un grand nombre de flottants, les buffers de 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…)Si vous avez vraiment besoin d'étendre la capacité de , la méthode appropriée dépend de votre installation. Il n'est pas nécessaire (avec les implémentations modernes) de changer les valeurs par défaut dans la source WEB de Knuth. Cette modification est en effet une manipulation pour les experts : il faut utiliser un fichier de modification pour changer les valeurs définies dans le module 11, recompiler et régénérer tous les fichiers de format.
Les implémentations modernes permettent de modifier de manière semi-dynamique les tailles des différents éléments de la mémoire de . Celle-ci est en effet 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. Certaines distributions (comme emTeX) permettent de modifier les paramètres de mémoire dans les commutateurs de ligne de commande au démarrage de . Le plus souvent, un fichier de configuration est lu pour spécifier la taille de la mémoire :
web2c
(TeX Live, MikTeX), ce fichier s'appelle texmf.cnf
. Ainsi, 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) ;Presque invariablement, après un tel changement, les fichiers de format doivent être régénérés après avoir changé les paramètres de la mémoire.
Sources :