[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