PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie kann ich eine riesige Tabelle nur einmal kompilieren? (Dauert sonst 2 Stunden...)



sonneli
01-02-2010, 18:54
Hallo liebes Latex-Forum,

ich stehe gerade vor einem Problem und weiss nicht genau, wie ich ansetzen soll, bzw. nach welchen Stichpunkten ich suchen muss, bzw. wo mögliche Lösungsansätze zu finden sind. Ich schildere die Angelegenheit einfach mal:

Der Artikel an dem ich momentan arbeite, beinhaltet im Anhang eine sehr lange Tabelle (26 Spalten, 1200 Zeilen). Diese wird mit Hilfe des datatool-Packages aus einer .csv-Datei generiert. Funktioniert an und für sich wunderbar, allerdings dauert ein Kompilier-Vorgang dann etwas über eine Stunde. Zudem muss ich immer zwei Mal kompilieren, damit der Tabellenkopf richtig dargestellt wird (da longtable hierfür verwendet wird). Bisher habe ich dies umgangen, indem ich den Quellcode für die Tabelle in eine externe .tex-Datei ausgegliedert und den entsprechenden \input-Befehl auskommentiert habe um die Tabelle erstmal aussen vor zu lassen. Jetzt bin ich allerdings in den letzten Zügen der Fertigstellung des Artikels und binde die Tabelle jedes Mal ein, da ich denke "so, das war jetzt das letzte Mal". Dann finde ich aber wieder einen kleinen Fehler der korrigiert werden muss, und dann kompiliere ich wieder über 2 Stunden, um das vollständige PDF mit pdflatex zu generieren.

Jetzt überlege ich, ob es eine Möglichkeit gibt, Latex beizubringen, dass die Tabelle nur einmal kompiliert werden soll und nicht jedes Mal. Eventuell kann ich die Tabelle gesondert kompilieren und kompiliert in Latex einbinden? Vor Kommandozeilen-Tweaks o.ä. habe ich keine Angst :)

Mir ist klar, dass ich PS und PDF in Latex einbinden kann, habe auch mit dem Paket pdfpages und \includepdf sowie \includegraphics herumprobiert, allerdings sind erste Vorstöße in die Richtung bisher gescheitert (\includepdf funktioniert nicht richtig innerhalb von einer table-Umgebung, ignoriert zudem meine Seitenformatierung (Kopfzeile/Fusszeile etc.)..). Ausserdem will ich ja gar kein PDF einbinden, sondern eine Tabelle.

Am datatool-Paket liegt es übrigens nicht, dass das Kompilieren so lange dauert. Habe die .csv Datei mit csv2latex mal testweise umgewandelt und das .tex kompilieren lassen - das läuft jetzt auch schon seit 45 Minuten. Leider habe ich auch keinen schnelleren Rechner zur Verfügung.

Vielleicht kann mir hier jemand weiterhelfen? Mit Hinweisen auf bestimmte Befehle, Stichpunkte und Vorgehensweisen ist mir schon sehr geholfen, denn dann finde ich bestimmt etwas dazu. Nur weiss ich im Moment gar nicht so recht, wonach ich suchen muss...

Viele liebe Grüße von der Sonne

bobmalaria
01-02-2010, 19:14
hi,

das pdfpages paket hat eine option, ich glaube pagecommand genannt. damit kannst du \incudepdf[pagecommand={\pagestyle{headings}}]{meinpdf} schreiben und dann sollten kopf und fusszeile stimmen. anders als mit einem bild wirst du wohl den prozess nicht grossartig beschleuningen können.

gruss

voss
01-02-2010, 19:36
Der Artikel an dem ich momentan arbeite, beinhaltet im Anhang eine sehr lange Tabelle (26 Spalten, 1200 Zeilen). Diese wird mit Hilfe des datatool-Packages aus einer .csv-Datei generiert. Funktioniert an und für sich wunderbar, allerdings dauert ein Kompilier-Vorgang dann etwas über eine Stunde. Zudem muss ich immer zwei Mal kompilieren, damit der Tabellenkopf richtig dargestellt wird (da longtable hierfür verwendet wird). Bisher habe ich dies umgangen, indem ich den Quellcode für die Tabelle in eine externe

nimm zum einen feste Breiten von Tabellenspalten und/oder
setze
\setlength\LTchunksize{200}

Herbert

Donalduck
02-02-2010, 10:50
Vielleicht wäre \includeonly auch eine Option?

sonneli
02-02-2010, 12:46
Vielen lieben Dank für Eure Antworten!


Nimm zum einen feste Breiten von Tabellenspalten und/oder

Ich habe jetzt alle Tabellenspalten mit p{}, bzw selbstdefinierten columntypes auf eine fixe Breite gesetzt und merke bisher keinen Unterschied in der Kompilierdauer. Spare ich mir dadurch aber vielleicht den zweiten Durchlauf, den longtable ja benötigt? Wäre es vielleicht eine Idee, statt longtable lxtable zu benutzen? Dies soll ja eine Kombination aus longtable und tabularX sein, nur eben für eine Tabelle mit fester Breite.


\setlength\LTchunksize{200}

Diesen Abschnitt ans Ende der Preambel gesetzt, führt zu:



! Illegal unit of measure (pt inserted)



Vielleicht wäre \includeonly auch eine Option?

Habe die Dokumentation zu \includeonly nochmal gelesen. Es bringt mich leider nicht weiter, da die \includeonly-Variante bis auf die \newpage und die Referenzen äquivalent zu meinem Vorgehen mit \input bzw %\input ist.

Wenn tatsächlich die Variante, die Tabelle gesondert als PDF zu kompilieren, die einzig gangbare Lösung ist, dann setze ich mich mit diesem Weg weiter auseinander.



\incudepdf[pagecommand={\pagestyle{headings}}]{meinpdf}


Jetzt werden Kopf- und Fusszeile angezeigt, dankeschön! Allerdings befindet sich der Inhalt der als PDF eingefügten Tabelle nicht auf neuen Seiten, sondern die vorangehenden Seiten im Anhang werden überschrieben. Dies passiert sowohl, wenn ich \includepdf{} freistehend am Ende des Dokuments einfüge und auch, wenn ich \includepdf{} in eine Table-Umgebung verpacke. Liegt dies am \appendix-Schalter? Wenn gewünscht, kann ich dafür ein Minimalbeispiel generieren, muss ich dann auch das Tabellen-PDF anhängen, oder ist das nicht nötig?

Viele liebe Grüße!

voss
02-02-2010, 12:54
\setlength\LTchunksize{200}

Diesen Abschnitt ans Ende der Preambel gesetzt, führt zu:



! Illegal unit of measure (pt inserted)



sollte auch \LTchunsize=200 sein. Wenn der Wert größer gleich der
Zahl der Tabellenzeilen ist, erfolgt nur ein Durchlauf. Dann muss aber die
ganze Tabelle auf einmal eingelesen werden.


Herbert

sonneli
02-02-2010, 12:56
sollte auch \LTchunsize=200 sein. Wenn der Wert größer gleich der
Zahl der Tabellenzeilen ist, erfolgt nur ein Durchlauf. Dann muss aber die
ganze Tabelle auf einmal eingelesen werden.


Danke! Dann muss ich den Wert aber auf z.B. 1200 setzen, da die Tabelle 1137 Zeilen enthält?

voss
02-02-2010, 13:03
Danke! Dann muss ich den Wert aber auf z.B. 1200 setzen, da die Tabelle 1137 Zeilen enthält?

wenn dein Speicher das mitmacht ...

Herbert