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

Rocco Rutte pdmef at cs.tu-berlin.de
Mi Jun 1 17:50:38 CEST 2005


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.

>Und 
>was machst zB mit grafixx, wo ich Bilder einbinden kann und je nachdem ich 
>dvi oder pdf erzeuge die .eps oder .jpg Datei aehnlichen Namens verwendet 
>wird?

Das Tool bekommt als Parameter nicht die TeX-Files sondern die, die 
gebaut werden sollen. Für die Befehle kann man optional angeben, dass 
sie nur für bestimmte Ziel-Erweiterungen gelten sollen und welche 
Erweiterungen implizit sind. Zum Beispiel ist .tex implizit bei \input, 
.cls implizit bei \documentclass usw. Für \includegraphics sieht das so 
aus:

| command pdf:includegraphics png,pdf,jpg
| command  ps:includegraphics eps,ps
| command dvi:includegraphics eps,ps

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?

>Schliesslich verstehe auch ich immer noch nicht wirklich, was die 
>Anwendung ist. Mein Problem ist hier, dass es bei TeX doch keine einzelnen 
>Compiler und Linkerschritte gibt. Dein Beispiel verstehe ich so, dass Du 
>zB diverse Briefe hast, die alle den gleichen Briefkopf einlesen. Und nun 
>aenderst Du den Briefkopf. Jetzt willst Du alle diese Briefe neu 
>formatieren? Nur warum?

Bei Briefen ist das kein gutes Beispiel, aber im Prinzip: ja.

>Es ist doch so, dass wenn Du den Brief Nummer 42 
>TeXst der Briefkopf neu kompiliert wird, egal ob der sich geaendert hat 
>oder nicht.

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.

>Der Witz an make ist doch, dass Du schon .o Files hast, die 
>nur neu erzeugt werden muessen, wenn sich die entsprechende Source 
>geaendert hat.

Oder eine der Include-Dateien. Wenn man bei C zum Beispiel die 
Abhängigkeiten nicht bis auf das Level von Include-Dateien analysiert, 
dann kann das böse ausgehen, z.B. wenn man "mal eben" Präprozessor-Makro 
oder eine struct ändert. Wenn man externe Dateien einbinden kann, dann 
hängt die Aktualität eben nicht nur an der Datei, die die Einbindung 
macht sondern auch an allen eingebundenen, weil das Rückwirkungen haben 
kann.

>Der umgekehrte Fall (nicht viele Dateien haengen von einer sonder eine von 
>vielen) ab ist zB ein Buch, dass seine einzelnen Kapitel einbindet. Wenn 
>ich jetzt ein Kapitel aendere muss ich halt immer das Buch neu TeXen. OK. 
>Aber dann TeXe ich eben immer das Buch und auch da brauche ich nicht 
>unbedingt so ein tool.

Dann muss ich aber Hand anlegen, weil ich Datei chapterX.tex ändere aber 
book.tex übersetzt werden soll, obwohl sich book.tex nicht geändert hat.  
Ich hätte in diesem Fall nur:

  | TEXFILES=book.pdf
  | all: $(TEXFILES)
  | include $(HOME)/mk/Makefile.tex

und fertig. Und weil in ~/mk/Makefile.tex steht:

  | %.pdf: %.tex
  |     ...

kann make eben nicht wissen, dass es book.pdf trotzdem bauen soll, 
obwohl sich book.tex nicht geändert hat. Wenn man ihm aber sagt, und 
genau das macht mein Tool nur, dass book.pdf ausserdem von chapterX.tex 
abhängt, hat sich das geändert und make tut etwas.

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.

>Oder wie waere es, wenn Du das \open (und ggf noch \input und evtl 
>was fuer \epsf) Makro so umdefinierst, dass es in der 
>.aux Datei vermerkt, welche Datei es geoeffnet hat. Und dann liest Dein 
>tool immer einfach die .aux Datei ein. Ist das nicht viel einfacher?

Ich habe noch nie ein Buch zu TeX in der Hand gehabt, habe genau 0 
Ahnung von plain TeX und viel LaTeX-Zeugs rumliegen, dass ich nicht 
ändern müssen möchte.

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.

Ich möchte gern eine schnelle Lösung ohne mit TeX selbst irgendwie zu 
benutzen, die außerdem völlig selbstständig genau das tut, was notwendig 
ist.

  bye, Rocco
-- 
:wq!



Mehr Informationen über die Mailingliste linux-l