Zusammenfassung der TeX-Kapazitätsgrenzen

Zusammenfassung der TeX-Kapazitätsgrenzen

Ich scheine oft auf Kapazitätsprobleme zu stoßen und habe jedes Mal die Grenzen erhöht. Es gibt mehrere Fragen auf dieser Site dazu. Es scheint jedoch einige widersprüchliche Informationen zu geben und keinen einzigen Ort, an demalleDiese Grenzen sind detailliert beschrieben.

Hauptfrage:

Was ich also suche, ist

  1. Name der Variable
  2. Standardwert.
  3. AbsolutMaximum, auf das es eingestellt werden kann.
  4. Welche Schritte kann ich unternehmen, um diese Nutzungen zu minimieren? Was sind die DOs und DONTs für jede dieser Kapazitätsgrenzen?

Die mir bekannten Einstellungen sind diejenigen, die am Ende der Protokolldatei aufgeführt sind:

 106477 strings out of 493042
 2524840 string characters out of 39884661
 12363848 words of memory out of 12435455
 103471 multiletter control sequences out of 15000+600000
 197845 words of font info for 228 fonts, out of 8000000 for 9000
 1143 hyphenation exceptions out of 8191
 86i,17n,86p,10523b,3398s stack positions out of 5000i,500n,10000p,200000b,80000s

aber es kann noch andere geben, die hier nicht aufgeführt sind. Mein unmittelbares Problem ist, dass words of memorydie obigen Zahlen aus dem ersten Durchlauf meiner Indizierung stammen. Wenn ich versuche, einen zweiten Durchlauf durchzuführen, erhalte ich TeX Capacity Exceeded.

Beispiele vonAndereVariablen:

Aus den Kommentaren von Davis Carlisle geht hervor, dass auch extra_mem_topund extra_mem_botverwendet werden können. Aber sind damit größere möglich words of memoryoder hängen diese mit einer der anderen Kapazitätsgrenzen im Bericht zusammen? Nochmals: Auf welchen Höchstwert kann ich diese einstellen?


Mögliche DOs und DONTs:

Einige meiner Fragen zur Minimierung der Nutzung sind hier aufgeführt. Vielleicht können diese in den DOs und DONTs für jede der Variablen behandelt werden.

  1. \def\foo{xxx}Ist es besser , anstelle von zu verwenden \newcommand*{\foo}{xxx}? Ich kann die Prüfung auf doppelte Makronamen außerhalb von TeX durchführen.

  2. Erhöhen Makronamen mit einer großen Anzahl von Zeichen die Verwendung einiger dieser Elemente?

    Beispielsweise \expandafter\newcommand\csname dir1/dir1/long-file-name\endcsname{xxxx}gibt es Probleme mit der Kapazität. Wäre es für mich besser, dir1/dir1/long-file-nameeine kürzere Zeichenfolge zuzuordnen, um ZXywdiese Grenzen zu umgehen? Ja, die Lesbarkeit geht verloren, aber ich kann diesen Ersatz automatisieren.

  3. Führt wiederholter Text zu einer vermehrten Auslastung der Grenzwerte? Was davon wäre besser:

    \MyMacro{../../../../dirA/dirB/dirC/dirD/file0001.tex}
    \MyMacro{../../../../dirA/dirB/dirC/dirD/file0002.tex}
     ...
    \MyMacro{../../../../dirA/dirB/dirC/dirD/file5000.tex}
    

    oder

    \def\Path{../../../../dirA/dirB/dirC/dirD/}
    \MyMacro{\Path/file0001.tex}
    \MyMacro{\Path/file0002.tex}
     ...
    \MyMacro{\Path/file5000.tex}
    
  4. Hilft \undefdas Einbinden von Makros, nachdem sie nicht mehr benötigt werden, bei der Einhaltung dieser Beschränkungen?

Natürlich kann ich mit den Dingen, die mir eingefallen sind, experimentieren, aber vielleicht kann man auch noch andere Dinge tun, um die Verwendung dieser begrenzten Zeichenfolgen und Wörter einzuschränken.


Beispiel für Inkonsistenz


Anmerkungen:

  • Ich gehe davon aus, dass alle Änderungen an der Datei vorgenommen werden, die kpsewhich texmf.cnfgemäß Leo Lius Antwort unterWie kann man die „Hauptspeichergröße“ von TeX erweitern? (pgfplots-Speicherüberlastung), was in meinem Fall ist

    /usr/local/texlive/2015/texmf.cnf
    

    Wenn es verschiedene Möglichkeiten gibt, einige davon einzustellen, würde ich diese auch gerne wissen.

  • Mein Hauptproblem besteht derzeit darin, eine große Anzahl von Einträgen zu indizieren und das words of memoryLimit zu erreichen. Mich beunruhigt weniger die Laufzeit (im Rahmen des Zumutbaren), sondern mehr das Überschreiten dieser Limits.
  • Ich verwende TeXLive2015, falls das wichtig ist. Aber wenn die Grenzen von der Distribution abhängen, wäre es auch gut, das zu wissen.
  • In dieser Frage geht es nicht um Fehlerzustände, die zu einer Überschreitung der Kapazitätsgrenzen führen (wie meine naive FrageTex-Kapazität überschritten (wenn % nach Verwendung des Makros entfernt wird)).

Verweise:

Antwort1

Ist es besser, \def\foo{xxx} statt \newcommand*{\foo}{xxx} zu verwenden? Ich kann die Prüfung auf doppelte Makronamen auch außerhalb von TeX durchführen.

Nein, kommt aufs Gleiche raus

Gibt es beispielsweise bei \expandafter\newcommand\csname dir1/dir1/long-file-name\endcsname{xxxx} irgendwelche Probleme hinsichtlich der Kapazität?

theoretisch ja, der csname muss irgendwo gespeichert werden, daher werden hierdurch 2524840 von 39884661 Zeichenketten verbraucht

aber Sie werden es vermutlich nur um etwa 20 Zeichen verkürzen, also wird es keinen großen Unterschied machen, 39884661

Was von Folgendem wäre besser:

wieder marginal verwendet der erste mehr, da er einen weiteren csname ( \path) definiert, der einen aus

 103471 multiletter control sequences out of 15000+600000

aber Sie sind noch lange nicht an dieser Grenze

Hilft es bei der Beseitigung dieser Beschränkungen, Makros mit \Undefing zu entfernen, wenn sie nicht mehr benötigt werden?

ja, deshalb entfernt Latex viele Befehle, wobei \begin{document}der Hash-Eintrag nicht zurückgefordert wird (Anzahl der Befehle mit mehreren Buchstaben), aber der Hauptspeicher, der zum Speichern der Definition verwendet wurde, wird zurückgefordert.

Antwort2

Vor vielen Jahren habe ich einen Vortrag über das Problem der „TeX-Kapazitätsüberschreitung“ gehalten und dabei einige Hintergrundinformationen, Grundursachen und Möglichkeiten zu ihrer Vermeidung gegeben.

Der erste Teil des Vortrags wurde veröffentlicht in„Die TeXnische Komödie“ Heft 1995/3, Seiten 22ff.

Auf Seite 24 finden Sie eine Tabelle mit allen (Standard-TeX.web-)Überlauffehlermeldungen, den zugehörigen TeX.web-Parametern und den Parametereinstellungen.

Negativ: (1) der Vortrag und das Papier sind nur auf Deutsch, (2) ich hatte nie genug Zeit, die Artikelserie einschließlich aller verbleibenden Themen in einem 2. und 3. Teil fertigzustellen, und (3) sie basiert auf Standard-TeX.web bzw. der Web2C-Version „bigTeX“, ohne e-TeX, pdfTeX, XeTeX, LuaTeX und ähnliche erweiterte Varianten.

verwandte Informationen