
Estou trabalhando em um documento que produz aproximadamente 4.000 páginas, cada uma com pelo menos 30 gráficos por página. Há muita troca de fontes e coloração de caracteres diferentes com cores diferentes. Consigo limitar as páginas geradas, o que me permite compilar com êxito. Estou usando o MikTex de 64 bits, mas notei o mesmo problema ao tentar usar o texLive.
No entanto, quando tento aumentar o número de páginas além de um determinado valor, LuaLaTex termina com:
! 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.
Na verdade, não posso postar um MWE porque acho que a falha vem principalmente da inclusão de imagens milhares de vezes. Estou tentando passar a opção de linha de comando para lualatex
with -extra-mem-top=50000000
.
Também tentei editar meu arquivo textmf, mas não pareceu realmente alterar o número mágico (493869) de strings. Também estou executando a versão de 64 bits dos binários porque li que isso poderia ajudar na alocação de memória, mas na verdade não mudou nada.
Responder1
LuaTeX usa alocação dinâmica de memória para mem principal, então a texmf.cnf
configuração que você está usando não terá efeito mesmo se você definir if para luatex em vez de pdftex.
No entanto, ele ainda herda algum uso de array fixo do tex clássico, incluindo o número de strings.
isso produz o erro que você declara (observe que é um loop infinito, entãodependeem uma condição de erro para terminar.
\documentclass{article}
\begin{document}
\loop
\iftrue
\advance\count0 1
\expandafter\def\csname zzz\the\count0\endcsname{}
\repeat
\end{document}
Isso produz
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].
Você pode aumentar o número de strings chamando-o da seguinte forma (ou editando 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
Agora você vê que não ficou sem strings, mas estourou a tabela hash, que poderia ser aumentada de forma semelhante. Você precisa iterar em seu documento real para aumentar o que for necessário.
Aqui, se eu aumentar o tamanho da tabela hash o suficiente, ela levará alguns segundos para ser executada, mas eventualmente ficará sem strings novamente:
$ 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].
Responder2
editar lualatex.ini
para usar os valores sugeridos por David Carlisle e, em seguida, reconstruir os formatos resolveu o problema. Eu estou feliz.
meu lualatex.ini
arquivo:
main_memory=12000000
pool_size=4250000
max_strings=8000000
hash_extra=1000000
Para encontrar o caminho, abri o console MikTeX e fui Configurações> Diretório> (depois aquele rotulado como configuração). Abra essa pasta e prossiga a ./miktex/config/lualatex.ini
partir daí. Obrigado!