
Я работаю над документом, который выдает ~4000 страниц, каждая из которых содержит не менее 30 графических изображений на странице. Много переключения шрифтов и раскрашивания разных символов в разные цвета. Я могу ограничить выводимые страницы, что позволяет мне успешно компилировать. Я использую MikTex 64-bit, но заметил ту же проблему при попытке через texLive.
Однако, когда я пытаюсь увеличить количество страниц сверх определенного значения, LuaLaTex завершает работу со следующим сообщением:
! TeX capacity exceeded, sorry [number of strings=493869].
<argument> ...ter {\reserved@b Pianos/256px/F/Piano_482.png}
\ifeof \@inputcheck \else ...
l.33572 ...m]{{Pianos/256px/F/Piano_482.png}}F ♮3}
& \textcolor{F-Lt}{F} & ...
47374 words of node memory still in use:
972 hlist, 276 vlist, 615 rule, 1 adjust, 7 disc, 276 local_par, 7 dir, 4 ma
th, 1376 glue, 30 kern, 388 penalty, 96 unset, 596 glyph, 16 align_record, 3318
attribute, 142 glue_spec, 1660 attribute_list, 14 temp, 1 align_stack, 4 if_st
ack, 1 pdf_dest, 3 pdf_action, 412 pdf_colorstack, 26 pdf_setmatrix, 26 pdf_sav
e, 26 pdf_restore nodes
avail lists: 1:1,2:32136,3:1080,4:450,5:513,6:468,7:9915,8:39,9:4238,10:45,1
1:507
! ==> Fatal error occurred, no output PDF file produced!
SyncTeX written on document.synctex.gz.
Transcript written on document.log.
Я не могу опубликовать MWE, потому что думаю, что глюк в основном происходит из-за включения изображений тысячи раз. Я пытаюсь передать параметр командной строки в lualatex
with -extra-mem-top=50000000
.
Я также пробовал редактировать свой файл textmf, но это, похоже, не изменило магическое число (493869) количества строк. Я также использую 64-битную версию двоичных файлов, потому что я читал, что это может помочь с распределением памяти, но на самом деле это ничего не изменило.
решение1
LuaTeX использует динамическое распределение памяти для основной памяти, поэтому texmf.cnf
используемая вами настройка не будет иметь никакого эффекта, даже если вы установите ее для luatex, а не для pdftex.
Однако он все еще наследует некоторые особенности использования фиксированных массивов из классического tex, включая количество строк.
это приводит к ошибке, о которой вы говорите (обратите внимание, что это бесконечный цикл, поэтому онполагаетсяв случае возникновения ошибки прекратить работу.
\documentclass{article}
\begin{document}
\loop
\iftrue
\advance\count0 1
\expandafter\def\csname zzz\the\count0\endcsname{}
\repeat
\end{document}
Это производит
LaTeX2e <2019-10-01> patch level 3
luaotfload | main : initialization completed in 2.242 seconds
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/article.cls
Document Class: article 2019/10/25 v1.4k Standard LaTeX document class
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/size10.clo)) (./cc372.aux)
! TeX capacity exceeded, sorry [number of strings=493861].
Вы можете увеличить количество строк, вызвав его следующим образом (или отредактировав texmf.cnf)
$ max_strings=1000000 lualatex cc372
This is LuaTeX, Version 1.10.0 (TeX Live 2019)
restricted system commands enabled.
(./cc372.tex
LaTeX2e <2019-10-01> patch level 3
luaotfload | main : initialization completed in 2.141 seconds
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/article.cls
Document Class: article 2019/10/25 v1.4k Standard LaTeX document class
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/size10.clo)) (./cc372.aux)
! TeX capacity exceeded, sorry [hash size=665536].
<recently read> \endcsname
Теперь вы видите, что строки не закончились, но хэш-таблица переполнилась, и ее можно было бы увеличить аналогичным образом. Вам нужно выполнить итерацию на вашем реальном документе, чтобы увеличить все, что нужно.
Здесь, если я достаточно увеличу размер хэш-таблицы, выполнение займет несколько секунд, но в конечном итоге строки снова закончатся:
$ max_strings=1000000 hash_extra=1000000 lualatex cc372
This is LuaTeX, Version 1.10.0 (TeX Live 2019)
restricted system commands enabled.
(./cc372.tex
LaTeX2e <2019-10-01> patch level 3
luaotfload | main : initialization completed in 2.187 seconds
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/article.cls
Document Class: article 2019/10/25 v1.4k Standard LaTeX document class
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/size10.clo)) (./cc372.aux)
! TeX capacity exceeded, sorry [number of strings=993861].
решение2
редактирование lualatex.ini
с использованием значений, предложенных Дэвидом Карлайлом, а затем перестроение форматов сработало. Я счастлив.
мой lualatex.ini
файл:
main_memory=12000000
pool_size=4250000
max_strings=8000000
hash_extra=1000000
Чтобы найти путь, я открыл MikTeX Console и перешел в Settings > Directory > (затем в папку с надписью config). Откройте эту папку и идите ./miktex/config/lualatex.ini
оттуда. Спасибо!