PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TeX capacity exceeded



DieterH
30-11-2006, 11:29
Hallo,

trotz intensiver Recherche und Googlens habe ich bisher keine Lösung für ein Problem. Ich erstelle ein Dokument mit LaTeX, in welchem Grafiken (JPG-Dateien) eingebunden werden sollen. Das Dokument umfasst bisher ca. 90 DIN A4 Seiten, und es sind bisher ca. 6 JPG-Dateien mit \includegraphics eingebunden. Die Einbindung einer weiteren JPG-Datei bringt TeX an seine Grenzen mit der Fehlermeldung:
! TeX capacity exceeded, sorry [main memory size=3500000].

Ich benutze SuSE Linux 10.0 mit ALLEN bsherigen Patches (neuester Stand). In /etc/temxf/web2c/texmf.cnf habe ich den bisherigen Wert von "main_memory = 3500000" bereits auf 7500000 erhöht und die Datei zurückgeschrieben, trotzdem behauptet TeX nach wie vor, dass der verfügbare Arbeitsspeicher nur 3500000 Worte (zu je 32Bits?) beträgt.

Meine Absicht ist es, ca. 80 JPG-Dateien (im Durchschnitt 130kB) in das mit LaTeX zu erzeugende Dokument (eine Chronik) aufzunehmen. Warum macht TeX/LaTeX bereits nach wenigen JPG-Dateien (< 10) schlapp?

Ein Auszug aus der LOG-Datei:
! TeX capacity exceeded, sorry [main memory size=3500000].
<argument> \copy \z@

l.343 \include{43-Chroniken-bis-1996}

If you really absolutely need more capacity,
you can ask a wizard to enlarge me.


Here is how much of TeX's memory you used:
12900 strings out of 94499
173389 string characters out of 1172810
3500000 words of memory out of 3500000
15540 multiletter control sequences out of 10000+50000
96105 words of font info for 165 fonts, out of 500000 for 2000
591 hyphenation exceptions out of 1000
39i,12n,47p,1593b,601s stack positions out of 1500i,500n,5000p,200000b,5000s
PDF statistics:
477 PDF objects out of 300000
0 named destinations out of 131072
20255 words of extra memory for PDF output out of 65536
! ==> Fatal error occurred, the output PDF file is not finished!

Und mit welchem Wizard (Zauberer) erhöhe ich für TeX/LaTeX den verfügbaren Arbeitsspeicher, wenn schon die direkte Änderung in der Konfigurationsdatei nichts hilft? (siehe Hinweis im Auszug der Logdatei)

Ich habe einen Ratgeber durchgearbeitet, in dem Empfehlungen für die Einbindung von Grafiken gegeben werden. Leider gibt er keine Hinweise zur Umgehung von Speicherplatzproblemen.

Gruß
Dieter

countbela666
30-11-2006, 11:47
Hallo Dieter,

der von dir beschriebene Fehler tritt seeeehr häufig in Verbindung mit nicht-terminierenden rekursiven Befehlen auf. Bist du sicher, dass du nicht vielleicht einen eigenen Befehl falsch verwendet hast?

Um auszuschließen, dass das Problem durch die große Anzahl an Bildern ausgelöst wird (was ich mir nur sehr schwer vorstellen kann) könntest du das Paket graphicx mal mit der Option "demo" laden. Wenn der Fehler dann immer noch auftritt, haben die Grafiken keine Schuld. Dann können wir weitersehen... ;)

Grüße,
Marcel

DieterH
30-11-2006, 12:28
Hallo Marcel,

vielen Dank für den schnellen Hinweis. Ich habe die Option demo" eingebaut
\usepackage[demo]{graphicx}

Der Fehler mit ausgeschöpften Arbeitsspeicher tritt immer noch auf. Deinem Hinweis zufolge, hat der Fehler nicht seine Ursache in TeX/LaTeX mit zu vielen Bilddateien.

Ich habe einen Makro geschrieben, mit dem ich die Bilder einbinde:
%*** #1: Name of graphics file
%*** #2: caption short text
%*** #3: caption long text
%*** #4: Label name (without prefix „fig:“)
\newcommand{\dhBild}[4]{%
\begin{center}
\begin{figure}[htb]
\includegraphics{#1}
\caption[#2]{#3}
\label{fig:#4}
\end{figure}
\end{center}
}

Ein konkreter Aufruf lautet z.B.
\dhBild{./Bilddateien/Altdorf/Stadt/Laurentius-Kirche.jpg}{Die Laurentius-Kirche}{Die Laurentius-Kirche}{Laurentius-Kirche}

Der selbst-definierte Befehl \dhBild könnte "schöner" aussehen, wenn ich das 2. Argument leer lassen könnte, was zur Folge haben müsste, dass der Kurztext identisch mit dem Langtext gesetzt würde.

Zurück zum Problem:
Einige der zu setzenden Bilder werden innerhalb einer \begin{multicols}{2}...\end{multicols} gesetzt, sofern sie schmal genug sind. Andere Bilder werden "einspaltig" gesetzt, d.h. zentriert über die Textbreite des DIN A4 Papiers (Hochformat).

Die Bilder, die zum Abbruch führen, sind NACH einer \end{multicols} und vor der nächsten \begin{multicols}{2} Anweisung gesetzt.

Um den Fehler einzugrenzen, habe ich auch versucht, zwei "schmale" Bilder AUSSERHALB einer \begin{multicols}{2}...\end{multicols} Umgebung nebeneinander zu setzen mit

\begin{figure}[h]
\begin{minipage}{0.48\textwidth}
\begin{center}
\includegraphics{./Bilddateien/Altdorf/Stadt/Laurentius-Kirche.jpg}
\caption[Laurentius-Kirche in Altdorf]{Laurentius-Kirche in Altdorf}
\label{Laurentius-Kirche}
\end{center}
\end{minipage}% This % is important. NO horizontal spacing between minipages
\begin{minipage}{0.04\textwidth}
\hfill % To ensure separation of captions
\end{minipage}
\begin{minipage}{0.48\textwidth}
\begin{center}
\includegraphics{./Bilddateien/Altdorf/Stadt/Kirche-in-Rasch.jpg}
\caption[Kirche in Rasch]{Kirche in Rasch}
\label{Kirche-Rasch}
\end{center}
\end{minipage}% This % is important. NO horizontal spacing between minipages
\end{figure}

D.h., auch wenn ich meinen \dhBild-Befehl NICHT benutze, erhalte ich den o.g. Fehler.

localghost
30-11-2006, 12:40
Du solltest im optionalen Argument für die figure-Umgebung ein "!" einbauen, um die strengen Bedingungen für die Platzierung von Gleitobjekten zu lockern.

\begin{figure}[!htb]

\end{figure}
Eine Garantie für den Erfolg ist diese Maßnahme allerdings nicht.

DieterH
30-11-2006, 13:12
Habe das optionale Argument von \begin{figure} auf [!htp] erweitert.

Der Fehler tritt erneut auf, allerdings nicht beim Einbinden einer JPG-Datei, sondern irgendwo danach im normalen Text.


Warum behält TeX/LaTeX so viel Speicher, und gibt ihn nicht wieder frei (so scheint mir das Verhalten zu sein)?

Und warum sind die Änderungen in der Konfigurationsdatei /etc/texmf/web2c/texmf.cnf wirkungslos? Nach wie vor behauptet TeX, dass er das Limit von 3500000 Worten erreicht habe, auch wenn der Wert in der Datei bereits hochgesetzt wurde?

bischi
30-11-2006, 16:48
Der Fehler tritt erneut auf, allerdings nicht beim Einbinden einer JPG-Datei, sondern irgendwo danach im normalen Text.


Wie bereits gesagt - dieser Fehler tritt im Normalfall nur bei Rekursion auf; Will heissen: Du hast irgendwo eine Endlosschleife drin - beispielsweise ein Befehl, der sich selbst aufruft,...

MfG Bischi

rais
01-12-2006, 21:20
Moin moin,

Ich habe einen Makro geschrieben, mit dem ich die Bilder einbinde:
%*** #1: Name of graphics file
%*** #2: caption short text
%*** #3: caption long text
%*** #4: Label name (without prefix „fig:“)
\newcommand{\dhBild}[4]{%
\begin{center}
\begin{figure}[htb]
\includegraphics{#1}
\caption[#2]{#3}
\label{fig:#4}
\end{figure}
\end{center}
}

so aus dem Bauch raus würd' ich sagen, Du solltest die figure-Umgebung _nicht_ innerhalb einer anderen Umgebung aufrufen - wie soll die Abbildung dann noch gleiten können?


%ich hab mal die Reihenfolge geändert, damit man dem \newcommand auch einen
%optionalen Parameter verkaufen kann;-)
\newcommand{\dhBild}[4][\empty]{%
%\begin{center}
\begin{figure}[htb]
\centering %oder wolltest Du den zusätzlichen Abstand durch die center-Umgebung?
\includegraphics{#4}
\ifx #1 \empty \caption{#2} \else \caption[#1]{#2} \fi
\label{fig:#3}
\end{figure}
%\end{center}
}%\dhBild[short caption]{caption}{label}{filename}

wär' so ne Idee... auch für


Der selbst-definierte Befehl \dhBild könnte "schöner" aussehen, wenn ich das 2. Argument leer lassen könnte, was zur Folge haben müsste, dass der Kurztext identisch mit dem Langtext gesetzt würde.

Afaik akzeptiert \(re)newcommand nur einen als optional deklarierten Parameter -- und das müsste dann der erste Parameter sein, deshalb die hier geänderte Reihenfolge der Parameter. Ein Aufruf wäre entsprechend
\dhBild[Kurzbezeichnung]{Langbezeichnung}{test}{Bilddatei}
oder eben
\dhBild{Bezeichnung}{test}{Bilddatei}
-- so es denn funzt.

Alternativ (wenn Du bei Deiner ursprünglichen Reihenfolge bleiben willst), kannst Du Dir mit Hilfe des ifthen-Pakets auch so etwas in der Art
\ifthenelse{\equal{#2x}{x}}{\caption{#3}}{\caption[#2]{#3}}
basteln, dann könntest Du den zweiten Parameter auch leer lassen (mußt die Klammer aber wohl noch angeben).


Zurück zum Problem:
Einige der zu setzenden Bilder werden innerhalb einer \begin{multicols}{2}...\end{multicols} gesetzt, sofern sie schmal genug sind. Andere Bilder werden "einspaltig" gesetzt, d.h. zentriert über die Textbreite des DIN A4 Papiers (Hochformat).

Und das funktioniert? (vgl. z.B. mit diesem Thread (http://www.mrunix.de/forums/showthread.php?t=36434))
Also vllt. besser gleich das caption-Paket laden, auf die Gleitumgebung figure verzichten und statt \caption dann \captionof{figure}{..}

MfG,

DieterH
03-12-2006, 22:15
@bischi

vielen Dank für Deinen klaren Hinweis. Es hat mir sehr viel Zeit gekostet, zu klären, ob sich ein Befehl rekursiv aufruft. War nicht der Fall.

Ich habe dann schrittweise mein großes Dokument (ist bereits in "\include"-Teildokumente strukturiert) auskommentiert, bis ich herausgefunden habe, dass der Speicherfehler auftritt, wenn eine Tabelle über eine DIN A4 Seite hinausgeht. Klar, es bracuht das Paket "longtable".

Ich habe DANACH in Helmut Kopka's "Einführung in LaTeX" (Band 1) gelesen, und bin zufällig auf das Kapitel gestossen, das die Fehlermeldungen erklärt. Dort sind die möglichen Ursachen dieses Fehlers erklärt. :-)

Wieder um eine Erfahrung reicher ...

Danke
Gruß
Dieter

DieterH
03-12-2006, 22:19
@Rainer,

danke für Deine Empfehlungen (opt. Parameter, Paket "caption", usw.)
Ich werde es morgen früh ausprobieren

Danke
Gruß
Dieter