[linux-l] Re: Suche Freiwillige für (LaTeX-)Projekt

Robert C. Helling R.Helling at damtp.cam.ac.uk
Mi Jun 1 18:43:34 CEST 2005


On Wed, 1 Jun 2005, Rocco Rutte wrote:

> Hi,
> 
> * Robert C. Helling [05-06-01 15:52:23 +0100] wrote:
> >On Wed, 1 Jun 2005, Rocco Rutte wrote:
>  
> >Oder Du musst anfangen, Makrodefinitionen zu verstehen (aka parsen).
> 
> [x] dagegen. Ich habe mir die Header-Files von libkpathsea angeguckt und 
> will nach der Lektüre gar nicht wissen, wie TeX selbst implementiert 
> ist.

Das sollst Du auch nicht (auch wenn es sehr lesenswert ist, Knuth is kein 
Feld, Wald und Wiesencoder, sondern es kann halt sein, dass ich am Anfang 
meiner Datei stehen habe

\def\lieschapter#1{\section{Kapitel #1}\input chapter#1}

oder sowas und nun in book.tex zum Einbinden der Kapitel immer 
\lieschapter{1} macht. Das setzt dann eine Ueberschrift und bindet 
chapter1.tex ein, obwohl nirgends \input chapter1 steht.

> Und weil es nicht extrem einfach geht den Parser komplett 
> Config-gesteuert zu haben, will ich für sowas möglichst vollständige 
> Defaults haben. Wo steht zum Beispiel genau, welche Erweiterungen in 
> welcher Reihenfolge von \includegraphics abgearbeitet werden sollen?

Im Zweifelsfalle ist wiederum die LaTeX-Source Dein Freund (bei plain TeX 
stuende sowas in Klartext im TeXbook).


> Warum sollte ich etwas neu übersetzen, was nicht neu übersetzt werden 
> muss? Es geht mir ja gerade darum das herauszufinden um mir quälend 
> lahme TeX-Läufe zu ersparen.

Was Du also genau willst ist ein Tool, das Dir fuer eine pdf Datei sagt, 
ob diese noch dem aktuellen Stand der Sourcen entspricht (solange Du die 
nicht lesen willst, brauchst Du sie ja auch nicht im Voraus zu bauen). 

> Klar, ich kann nach dem Bearbeiten auch einfach 'pdflatex book.tex' 
> machen, aber: ich habe alle Dokumente unter Versionsverwaltung, weil es 
> für mich der einfachste Weg ist, verschiedene Rechner synchron zu 
> halten. Nach Updates möchte ich mir nicht überlegen müssen, wo jetzt was 
> geändert wurde sondern nur 'make<enter>' tippen und fertig.

Willst Du wirklich jedes Mal, wenn Du zB Dein .sty aenderst, alle pdfs 
neu bauen? Doch wohl nicht wirklich, sondern nur, die die Du anschauen 
oder drucken oder so willst. Und da willst Du moeglichst vorher wiseen, ob 
sich ein aufwaendiger TeX-Lauf lohnt. Gell?

> Einfach .aux auslesen geht bestimmt, aber dafür muss TeX ja schonmal 
> gelaufen sein. Aber wenn ich dann irgendeine einbezogene Datei ändere, 
> muss ich TeX laufen lassen, um .aux zu aktualisieren, damit ich 
> rausbekomme, dass es notwendig war oder eben nicht. Genau das will ich 
> mir nach Synchronisation aus der Versionsverwaltung sparen. Dann kann 
> ich auch gleich den latex-Output mit regulären Ausdrücken bewerfen.

Das tex schon mal gelaufen sein muss, damit Du die aux Datei hast, ist in 
diesem Fall gegeben. Sonst haettest Du ja auch die .pdf Datei nicht und Du 
muesstest sowieso bauen. Ich denke nach wie vor, dass das parsen von .aux 
das Einfachste ist.

Nehmen wir mal folgende Abhaengigkeiten an:

briefkopf.tex    brief.tex     brief.pdf  (rechts haengt von links ab).

Und nun soll es zur Hilfe briefkopf.aux (da steht drin, dass es von nix 
abhaengt) und brief.aux (da steht drinn, dass es von briefkopf.tex 
abhaengt). Und mit \special koenntest du sogar in der pdf-Datei einen 
Kommentar einbauen, in dem drinsteht, aus welchen Dateien .pdf gebaut 
wurde). Dann kannst Du an den Veraenderungszeiten von .aux und .tex Datei 
feststellen, was seit dem TeXen veraendert wurde und ausserdem von rechts 
nach links ueber die entsprechenden Files rekursion machen. Das scheint 
mir nicht so kompliziert.

Gerade geht mir noch auf, dass es wahrscheinlich noch einfacher ist, die 
.log statt der .aux Dateien zu parsen, aber das ist ein Detail. Fazit: 
Ich fange von rechts an. Wenn eine Datei neuer ist als ihr .log muss sie 
neu geTeXt werden (was autamatisch alles links von ihr TeXt, denn es gibt 
ja wie gesagt keine .o Dateien), wenn das .log aktuell ist, steht da ja 
drin, wie weiter nach links Rekursion gemacht werden muss. Und fuer all 
das braucht man keinen komplizierten TeXcode zu parsen und ein paar Zeilen 
Perl sollten reichen.

Gruesse
Robert

-- 
.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oO
Robert C. Helling     School of Science and Engineering
                      International University Bremen
print "Just another   Phone: +49 421-200 3574
    stupid .sig\n";   http://www.aei-potsdam.mpg.de/~helling



Mehr Informationen über die Mailingliste linux-l