Makeindex - Indexe nicht erzeugbar bei zu großer Datei?

Erstellen von Index, Glossar, Symbolverzeichnis, einer Nomenklatur etc. mit MakeIndex oder Xindy


Chiara_Gast

Makeindex - Indexe nicht erzeugbar bei zu großer Datei?

Beitrag von Chiara_Gast »

Hallo,
ich habe hier ein Problem, mit dem ich mich schon einige Tage herumärgere.
Ich habe aus Quellcode (Headerdateien) automatisch generierte Latex-files.
Diese sollen in eine pdf umgewandelt werden. Ich nutze MikTex.

Mein Weg (über ene BatDatei, damit alles automatisch abläuft):

latex refman.tex
MAKEINDEX refman.idx
latex refman.tex
latex refman.tex
dvips -ta4 refman.dvi
ps2pdf refman.ps

(Der direkte Weg über pdflatex geht nicht, da Massen an eps Grafiken eingebunden werden müssen.
Zudem kann ich den Eintrag makeindex auch weglassen, wie ich eben getestet habe, ergebniss bleibt gleich, bei geringem Umfang gibt es prima VErzeichnisse, sonst keine.)

Wenn ich die Latex-Dateien aus bis maximal 100 Quellcodedateien erstellen lasse, bekomme ich eine prima pdf, mit allen Verzeichnissen.

Wenn ich aber alle Headerdateien (über 200) durchlaufen lasse und die dann entstandenen Latex-Dateien umwandel, fehlt:
-das Inhaltsverzeichnis
-die Seitenzahlen bei diversen anderen Verzeichnissen (es wird nur ?? angegeben)
-das Glossar.
Die fertige pdf hat einen Umfang von rund 3000 Seiten und das LatexVerzeichnis hat eine Größe von rund 25MB.

Ich habe jetzt alle möglichen und unmöglichen Kombinationen und Permutationen von latex, pstopdf, dvips und makeindex (mehrfach, mehr als mehrfacher Aufruf) und auch andere wie texi2dvi oder ps4pdf getestet.
Habe mich kreuz und quer durch google gequält und keine der dort gefundenen Lösungen hat mir geholfen.

Es scheint irgendwie an der Größe der Latex-Datei zu liegen?! Denn wenn ich es mit nur ca. der Hälfte der Dateien versuche und daraus de Latex-Datei erzeuge, klappt es prima. Allerdings ist auch das nicht Statisch, also ich kann keine Grenzgröße feststellen, unter/über der es garantiert klappt/nicht klappt.

Aber kann das wirklich sein?

An Glosardateien habe ich nur die refman.idx - keine Andere.

Wer irgendwelche Hinweise hat, WAS ich eventuell noch beachten müßte, vergessen oder übersehen habe: bitte schreiben.

Danke und
LG
Chiara

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Re: Makeindex - Indexe nicht erzeugbar bei zu großer Datei?

Beitrag von KOMA »

Chiara_Gast hat geschrieben:Es scheint irgendwie an der Größe der Latex-Datei zu liegen?!
Da müsstest Du aber noch etwas mehr zu den näheren Umständen angeben. So etwas könnte sein, wenn Deine LaTeX-Datei aus einem einzigen großen Absatz bestehen würde. Allerdings würde das dann zu einer Fehlermeldung führen. Folgendes kleine Beispiel erzeugt beispielsweise ein Dokument mit min. 30000 Seiten und mehr als 20000 Einträgen ins Inhaltsverzeichnis.
\documentclass{article}
\usepackage{lipsum}

\begin{document}

\tableofcontents

\makeatletter % wegen @ im Namen von \@whilenum etc.
\@whilenum\c@page <30000 \do{\section{One more section}\lipsum}
\makeatother

\end{document}
Das läuft bei mir einwandfrei durch latex und auch durch pdflatex. Das PDF hat dann nach 3 Durchläufen über 80 MB. Die toc-Datei hat alleine fast 1,5 MB.
Chiara_Gast hat geschrieben:latex refman.tex
MAKEINDEX refman.idx
latex refman.tex
latex refman.tex
dvips -ta4 refman.dvi
ps2pdf refman.ps
Dir ist schon klar, dass der Index hier nur dann korrekt ist, wenn beim ersten LaTeX-Lauf keine Verzeichnisse vorn im Dokument erzeugt werden? Während man BibTeX tatsächlich nur nach dem ersten LaTeX-Lauf aufrufen muss, sollte man MakeIndex nach jedem LaTeX-Lauf aufrufen. Minimum wäre nach dem ersten und vor dem letzten LaTeX-Lauf.
Chiara_Gast hat geschrieben:Wenn ich aber alle Headerdateien (über 200) durchlaufen lasse und die dann entstandenen Latex-Dateien umwandel, fehlt:
-das Inhaltsverzeichnis
-die Seitenzahlen bei diversen anderen Verzeichnissen (es wird nur ?? angegeben)
-das Glossar.
Du solltest mal schauen, ob es irgendwelche Fehlermeldungen gibt. Wenn die aux-Datei nicht geschrieben wird, sondern leer bleibt, dann gibt es kein Inhaltsverzeichnis und alle Referenzen per \label/\ref bleiben unauflösbar und werden als ?? angegeben. Kandidat wäre beispielsweise: Keine Schreibberechtigung oder nicht genügend Platz frei.

MakeIndex selbst hat AFAIK tatsächlich eine Größenbegrenzung für die idx-Datei. Vor Jahren hat es sogar frech über die Grenze des angeforderten Speichers hinaus geschrieben. Das ist inzwischen AFAIK aber behoben. Jedenfalls habe ich mal entsprechende Patchs eingereicht. Für einen Index mit Rohdaten von 2 MB musste ich seinerzeit (vor 15 Jahren) eine eigene Version von MakeIndex compilieren. Wie die aktuellen Grenzen bei MakeIndex sind und ob es inzwischen vielleicht dynamisch mehr Speicher anfordert, weiß ich nicht. Ein Versagen von MakeIndex führt aber nicht zum Löschen der aux- und toc-Datei.

Chiara_Gast

Re: Makeindex - Indexe nicht erzeugbar bei zu großer Datei?

Beitrag von Chiara_Gast »

Hallo, danke für deine Antwort.
KOMA hat geschrieben: MakeIndex selbst hat AFAIK tatsächlich eine Größenbegrenzung für die idx-Datei. Vor Jahren hat es sogar frech über die Grenze des angeforderten Speichers hinaus geschrieben. Das ist inzwischen AFAIK aber behoben. Jedenfalls habe ich mal entsprechende Patchs eingereicht. Für einen Index mit Rohdaten von 2 MB musste ich seinerzeit (vor 15 Jahren) eine eigene Version von MakeIndex compilieren. Wie die aktuellen Grenzen bei MakeIndex sind und ob es inzwischen vielleicht dynamisch mehr Speicher anfordert, weiß ich nicht. Ein Versagen von MakeIndex führt aber nicht zum Löschen der aux- und toc-Datei.
Der erste Satz ist, denke ich, der entscheidene für mich.
Ich habe jetzt augetestet und bis zu einer bestimmten Anzahl von Daten (160..165) erstellt er mir problemlos alle Verzeichnisse. Dabei habe ich die Makeindex-Zeile aus dem Batch übrigens rausgeschmissen und es geht trotzdem.

Die .idx (bis zu 1,5 Mb soweit ich das sehe) und auch die .aux (an die 20kB) wird dabei erstellt und hat auch eine größe ungleich Null.

In den Fällen, wo es nicht mehr klappt, mit den Inhaltsverzeichnissen, ist die idx plötzlich 0kB groß und die .aux 1kb!?

-----
KOMA hat geschrieben: sollte man MakeIndex nach jedem LaTeX-Lauf aufrufen. Minimum wäre nach dem ersten und vor dem letzten LaTeX-Lauf.

Nochmal kurz zum Makeindex: ich habe schon einiges hin und her probiert, latex und makeindex in unterschiedlichen mengen und permutationen aufgerufen (z.b. latex, makeindex, latex, makeindex, latex, latex) nur um jede eventualität auszuschließen.
Aber ich werde es berücksichtigen und gleich nochmal neu laufen lassen.

----
KOMA hat geschrieben: Folgendes kleine Beispiel erzeugt beispielsweise ein Dokument mit min. 30000 Seiten und mehr als 20000 Einträgen ins Inhaltsverzeichnis.
Das läuft bei mir einwandfrei durch latex und auch durch pdflatex.
Das PDF hat dann nach 3 Durchläufen über 80 MB. Die toc-Datei hat alleine fast 1,5 MB.
Zur Größe der Latex Datei selbbst: ja, da hast du recht. Der Zusammenhang ist nicht kausal.
Da habe ich mich falsch ausgedrückt, bzw. sah ich vorhin nur den Zusammenhang zur Größe der LAtexdatei. Es liegt aber ganz offensichtlich nur an der nicht/falsch ertellten idx/aux-Datei.

So, jetzt bin ich schlauer, habe aber immernoch keine Lösung.

Chiara

Chiara_Gast

Beitrag von Chiara_Gast »

*args* sorry, da hab ich gerade was mit den quote-tags versaut, ich hoffe, es läßt sich trotzdem lasen.

chiara

Chiara

Beitrag von Chiara »

Ok, ich geh eine Runde in die Tischkante beißen. Nachdem ich mir jetzt mal in aller Ruhe das log-file zur Gemüte gezogen habe, fand ich DAS da:

"! TeX capacity exceeded, sorry [main memory size=2000001].
...
[und drei zeilen später]
...
If you really absolutely need more capacity,
you can ask a wizard to enlarge me.
"

Und nun?
WO vergrößere ich WIE den Platz, den diese idx einnehmen kann?

Chiara

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Re: Makeindex - Indexe nicht erzeugbar bei zu großer Datei?

Beitrag von KOMA »

Chiara_Gast hat geschrieben:In den Fällen, wo es nicht mehr klappt, mit den Inhaltsverzeichnissen, ist die idx plötzlich 0kB groß und die .aux 1kb!?
Wie gesagt: MakeIndex sollte die aux-Datei gar nicht vorgesetzt bekommen und deshalb auch nicht schreibend darauf zugreifen. Eventuell hast Du auch einen Fehler in einer Datei, der sich sowohl auf den Index als auch auf die aux-Datei auswirkt. Einen Anhaltspunkt dazu könnten die Dateien *.toc und *.aux geben.

Oder was gibt denn MakeIndex aus? Neben der reinen Terminal-Ausgabe schreibt das normalerweise auch noch eine log-Datei (*.ilg). Ohne vollständiges Minimalbeispiel kann ich Dir leider nur allgemeine Ratschläge geben, wie Du Dir selbst helfen kannst. Für konstruktive Hilfe fehlt es mir einfach an Material.

Wenn ich mein Beispiel um ein paar Index-Einträge erweitere:
\documentclass{article} 
\usepackage{lipsum} 
\usepackage{makeidx}\makeindex
\begin{document} 
 
\tableofcontents 
 
\makeatletter % wegen @ im Namen von \@whilenum etc. 
\@whilenum\c@page <30000 \do{\section{One more section}\index{section
    \thesection\ start}\lipsum\index{section \thesection\ end}} 
\makeatother 
 
\printindex

\end{document}
erzeugt mir das eine idx-Datei mit 1,6 MB Größe und über 40000 Einträgen. Rufe ich dann MakeIndex auf, funktioniert das einwandfrei:
This is makeindex, version 2.14 [02-Oct-2002] (kpathsea + Thai support).
Scanning input file gross.idx............................................done (40824 entries accepted, 0 rejected).
Sorting entries.........................................................................
................................................................................................
................................................................................................
................................................................................................
................................................................................................
...........done (696262 comparisons).
Generating output file gross.ind............................................done (40828 lines written, 0 warnings).
Output written in gross.ind.
Transcript written in gross.ilg.
Der anschließende nächste Lauf von pdfLaTeX funktioniert ebenfalls einwandfrei und erzeugt über 30400 Seiten, davon mehr als 400 Seiten Index.

Du musst wirklich mal die Ausgaben von LaTeX und MakeIndex und ggf. auch die log-Dateien der Läufe näher studieren oder das Problem nach der Anleitung für Minimalbeispiele eingrenzen.

Gast

Doppelposting

Beitrag von Gast »

http://www.mrunix.de/forums/showthread. ... post272256

Grrrrruß,
Alexander

... aber Deine Antwort war qualifizerter, Markus.

Chiara

Beitrag von Chiara »

Danke, Komo, für deine Antwort, ich werde mich jetzt nochmal tiefer "reinknien" und wenn ich es mit deinen Hinweisen nciht schaffen sollte, nochmal mit den von dir angefragten Sachen spezieller nachfragen.

Grüße
Chiara

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Ich mag auch keine heimlichen Crosspostings

Beitrag von KOMA »

Chiara, Du hast auf mrunix gefragt, was so schlimm daran sei, wenn man eine Frage an mehreren Stellen stelle. Das ist nicht schlimm, vorausgesetzt man weist darauf hin. Macht man das nicht, vorenthält man sowohl denen, die bereit sind, ihre Zeit für Dich zu opfern, als auch denen, die eventuell eine ähnliche Frage haben, Antworten. Das Problem mit Redundanz bei den Antworten ist ja nicht, dass Du damit eventuell an mehreren Stellen die gleichen Hinweise bekommt und damit umgehen musst. Das Problem ist, dass die kostbarste Resource der Helfer ineffektiv konsumiert wird: Zeit.

Mich ärgert es tatsächlich sehr, wenn ich längere Zeit über eine Frage nachdenke, dann Zeit in eine Lösung oder zusätzliche Nachfragen investiere und schließlich erfahre, dass ich mir das hätte schenken können, weil an anderem Ort bereits ein anderer entweder eine Lösung gefunden oder den gleichen Weg beschritten hat. Das ärgerliche daran ist, dass ich diese Zeit vielleicht für einen anderen Fragesteller hätte aufwenden, für die Weiterentwicklung von KOMA-Script oder eines meiner anderen Softwareprojekte hätte verwenden können, oder ich einfach mal wieder ein bisschen Zeit mit meinen Kindern, im Garten oder auf dem Rad hätte verbringen können.

Ich bin nicht der einzige, dem es so geht. Deshalb gilt das, was Du gemacht hast, als sehr unhöflich. Das mag Dir unfair erscheinen, aber Helfer sind nunmal kostbare Mimosen. Die einen geben sich Mühe, solche Pflänzchen zu pflegen, anderen stellen sich auf den Standpunkt, dass jedes andere (Un-)Kraut genauso schön ist.

Dieses Mal war es kein Beinbruch, weil auf mrunix keine wirkliche Überdeckung stattgefunden hat. Also nächstes Mal bitte wenigstens einen Link auf die Parallel-Diskussion. Besser ist es allerdings IMHO, erst einmal abzuwarten, ob im einen Forum/Medium eine Lösung gefunden wird und erst danach ggf. im anderen die Frage neu mit Hinweis/Link auf die erfolglose Diskussion zu stellen.

Chiara

Beitrag von Chiara »

Ok, jetzt schon zwei Leute, eine Meinung. Auch hier nochmal:

Ich verstehe deine Sichtweise.

Ich gehe aber anders an die Sachen heran. Für meine Antworten in Foren musste ich bisher nicht viel Zeit aufwenden, da ich nur aus dem Gedächtniss antworte.
Im Falle von Programmierungen muss ein Antwortender vermutlich schon deutlich tiefer graben/suchen/ausholen, um fundiert Antworten zu können.

Und da ich von Arbeit aus nach der Lösung suche/suchen muss, kann ich die Zeit ja gar nicht mit meinem Kind oder andersweitig verbringen.

Ich gelobe also Besserung und werde ab jetzt, wenn ich in mehreren Foren frage mich selbst verlinken.

Grüße
Chiara

Antworten