Speicher erweitern

Speicher erweitern

Ich arbeite an einem Dokument, das ca. 4000 Seiten umfasst, jede mit mindestens 30 Grafiken pro Seite. Es wird viel zwischen Schriftarten gewechselt und verschiedene Zeichen werden in verschiedenen Farben eingefärbt. Ich kann die Anzahl der ausgegebenen Seiten begrenzen, was mir eine erfolgreiche Kompilierung ermöglicht. Ich verwende MikTex 64-Bit, habe aber beim Versuch über texLive dasselbe Problem festgestellt.

Wenn ich jedoch versuche, die Seitenzahl über einen bestimmten Wert hinaus zu erhöhen, bricht LuaLaTex mit folgender Meldung ab:

! 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.

Ich kann eigentlich kein MWE posten, weil ich glaube, dass der Fehler hauptsächlich daher kommt, dass Bilder tausende Male eingefügt werden. Ich versuche, die Befehlszeilenoption mit zu lualatexübergeben -extra-mem-top=50000000.

Ich habe auch versucht, meine Textmf-Datei zu bearbeiten, aber es schien diese magische Zahl (493869) der Zeichenfolgen nicht wirklich zu ändern. Ich verwende auch die 64-Bit-Version der Binärdateien, weil ich gelesen habe, dass sie bei der Speicherzuweisung helfen könnte, aber es hat tatsächlich nichts geändert.

Antwort1

LuaTeX verwendet die dynamische Speicherzuweisung für den Hauptspeicher. Daher texmf.cnfhätte die von Ihnen verwendete Einstellung keine Wirkung, selbst wenn Sie sie für Luatex statt für PDFTex festlegen.

Es übernimmt jedoch immer noch einige feste Array-Verwendungen vom klassischen Tex, einschließlich der Anzahl der Zeichenfolgen.

dies erzeugt den Fehler, den Sie angeben (beachten Sie, dass es sich um eine Endlosschleife handelt,verlässt sichbei einem Fehlerzustand zum Beenden.

\documentclass{article}

\begin{document}

\loop
\iftrue
\advance\count0 1
\expandafter\def\csname zzz\the\count0\endcsname{}
\repeat
\end{document}

Dadurch entsteht

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].

Sie können die Anzahl der Zeichenfolgen erhöhen, indem Sie es wie folgt aufrufen (oder indem Sie texmf.cnf bearbeiten)

$ 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 

Jetzt sehen Sie, dass nicht die Zeichenfolgen ausgegangen sind, sondern dass die Hash-Tabelle übergelaufen ist, die auf ähnliche Weise erhöht werden könnte. Sie müssen Ihr echtes Dokument durchlaufen, um die erforderliche Menge zu erhöhen.

Wenn ich hier die Größe der Hash-Tabelle ausreichend vergrößere, dauert die Ausführung einige Sekunden, aber irgendwann gehen mir wieder die Zeichenfolgen aus:

$ 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].

Antwort2

Das Bearbeiten, lualatex.inium die von David Carlisle vorgeschlagenen Werte zu verwenden, und anschließend das Neuaufbauen der Formate haben den Trick getan. Ich bin zufrieden.

meine lualatex.iniDatei:

main_memory=12000000
pool_size=4250000
max_strings=8000000
hash_extra=1000000

Um den Pfad zu finden, habe ich die MikTeX-Konsole geöffnet und bin zu Einstellungen > Verzeichnis > (und dann zu dem mit der Bezeichnung „config“) gegangen. Öffnen Sie diesen Ordner und gehen Sie ./miktex/config/lualatex.inivon dort aus weiter. Danke!

verwandte Informationen