Arrays in TEX

Im Konfigurationsfile können den folgenden Parametern Werte zugewiesen werden:


12345 memmax memtop memmax bzw. memtop geben die Größe des wichtigsten Arrays in TEX an. In diesem ``main memory'' wird z.B. die komplette Seite aufgebaut und Makrodefinitionen abgelegt.

initex ignoriert den Wert von memmax und setzt $\tt memmax$ = $\tt memtop$. Der Wert von memtop soll beim Dumpen mit initex möglichst groß gewählt werden, dieser wird im Format-File mitabgelegt.

Für virtex und initex muß gelten: $\tt memtop$$\tt memmax$≤65534. Man kann also für virtex ein größeres ``main memory'' als für initex verwenden.

Speicherbedarf: 4 Bytes * memmax bzw. memtop

triesize itriesize trieopsize Alle Trenntabellen, die von initex eingelesen werden, werden sehr kompakt in einem ``Trie'' gehalten. initex benötigt jedoch viel Speicher für diesen Trie, da er erst vollständig aufgebaut werden muß, bevor dieser komprimiert werden kann[*]. Durch den sehr großen Speicherbedarf des Tries in initex, muß bei wenig Speicher membot auf einen Wert < 65534 gesetzt werden. Da der komprimierte Trie für virtex sehr viel weniger Platz benötigt, kann meist memmax auf 65534 gesetzt werden, so daß man zum Formatieren den maximal verfügbaren `main memory' zur Verfügung hat. Die Größe des Trie's wird durch triesize (für virtex) bzw. itriesize (für initex) angegeben, beide müssen kleiner als 65536 sein. Die Anzahl an ``trie operands'' ist trieopsize ( ≤32767).

Speicherbedarf:     #&    # Bytes&    # Bytes &    (i)triesize&    trieopsize initex& 15& 10 virtex& 05& 03

fontmax fontmemsize fontmax gibt die Anzahl der maximal geladenen Fonts an (muß ≤255 sein). Die Fontinformation aus den tfm-Files wird in ein Array der Größe fontmemsize geladen. fontmemsize kann dabei beliebig groß sein.

Speicherbedarf: 79 Bytes * fontmax + 4 Bytes * fontmemsize

maxstrings poolsize stringvacancies In einem Array namens ``String Pool'' werden alle Strings, darunter fallen auch alle TEX-Makros und -Primitive, wie z.B. \relax, abgelegt. Die Größe dieses Arrays wird durch poosize bestimmt, die Anzahl der Strings durch maxstrings. stringvacancies gibt nun an, wieviel Platz im String Pool nach dem Laden eines Format-Files noch mindestens für vom Benutzer definierte Strings vorhanden sein muß. Alle drei Parameter können unbegrenzt größ gewählt werden.

Speicherbedarf: 1 Byte * poolsize + 4 Byte * maxstrings

bufssize maxinopen Jede eingegebene Zeile (von einem File oder von der Tastatur) wird in einem Array der Größe bufsize abgelegt. bufsize muß kleiner als 65536 sein. maxinopen gibt die Anzahl der gleichzeitig offenen Files an (muß kleiner als 128 sein).

Speicherbedarf: 1 Byte * bufsize + 8 Byte * maxinopen

maxprintline errorline halferrorline maxprintline gibt die maximale Länge der Log-Ausgabe auf den Bildschirm bzw. ins Log-File an (üblicherweise = 79, muß ≥60 sein). errorline gibt die maximale Länge der Kontextinformation bei einem Fehler an (muß ≥45 sein), halferrorline ist die Länge der ersten Zeile dieses Kontextes ( 30≤$\tt halferrorline$errorline - 15).

Speicherbedarf: 1 Byte * errorline

savesize stacksize dvibufsize Zum Sichern von Werten innerhalb von Gruppen (lokale Zuweisungen, ||) wird Platz der Größe savesize verwendet. stacksize gibt die Anzahl der ``Input-Sources'' an (File, Makros, Tokenlists, …). Der Buffer zum Schreiben des |dvi|-Files ist dvibufsize Bytes groß[*].

Speicherbedarf: 2 Bytes * |savesize| + 10 Bytes * |stacksize| + 1 Byte * |dvibufsize|


Welche Werte sollen man nun den einzelnen Parametern zuweisen? Dazu zieht man einfach das Log-File zu Rate, das beim Dumpen eines Format-Files erzeugt wurde[*].

Beim Dumpen von TEX (German |plain.fmt|) erhält man folgendes Log-File:

This is a PD-Version of Pas-TeX (made Jan 26 1991 [br]/[hes]) This is TeX, C Version 3.1 (INITEX) 28 JAN 1991 02:51 **plain =amiga =/doc/nice (plain.tex Preloading the plain format: codes, registers, ... [lines deleted] ... Beginning to dump on file plain.fmt (format=plain 91.1.28) 2121 strings of total length 28932 7874 memory locations dumped; current usage is 118&7748 1063 multiletter control sequences ... [lines deleted] ... 16011 words of font info for 54 preloaded fonts 0 hyphenation exceptions Hyphenation trie of length 9980&11780 has 281 ops out of 500 281 for language 0 No pages of output.;'';''

Daraus erkennt man untere Grenzen für einige wichtige Parameter: |maxstrings| > 2121, |poolsize| > 28932, |memmax| > 7874, |fontmax| > 54, |fontmemsize| > 16011. Die tatsächlich verwendeten Werte sollten größer gewählt werden: |memmax| solte, wenn möglich, auf 65534 gesetzt werde, die anderen Parameter auf mindestens 10% größere Werte.

Der Trie mit den Trenntabellen kann, nachdem er komprimiert wurde, nicht mehr grös̈er werden. Daher kann man |triesize| auf einen Wert ≥9980 und |triopsize| auf ≥281 setzen. (Zum Dumpen dieses Formates muß für |initex| der Parameter |trieopsize| > 11780 gesetzt werden.)

Alle anderen Parameter sollte man unverändert lassen und erst nachdem die Fehlermeldung TeX capacity exceeded auftritt, sollte der entsprechende Parameter vergrößert werden.



Subsections