Seite 1 von 1

Dateien in Template einbinden über Argumente?

Verfasst: Do 19. Nov 2009, 13:02
von ari-whv
Hallo,

ich habe folgendes Problem: Ich habe mehrere TeX-Dateien, die alle nach demselben Schema erstellt werden sollen. Dazu habe ich eine Hauptdatei (Template), in der alle notwendigen Definitionen und Pakete drin sind. Darüber binde ich meine Dateien ein, sind ca. 20 Stück.
Da ich für jede Datei auch ein Literaturverzeichnis habe und multibib sich ab 12 Elementen quer stellt, habe ich ein paar Dateien separat kompiliert und dann als PDF direkt in mein Template eingebunden. Allerdings habe ich für jede Datei auch eine eigene Hauptdatei erzeugt, was blöd ist, wenn sich mal in einer Datei was ändert.

Lange Rede kurzer Sinn: Wie kann ich mehrere Dateien einzeln kompilieren mit einer Hauptdatei? Ich dachte da an ein Prinzip wie es mit g++ möglich ist, also Argumente wie den Dateinamen über die Kommandozeile einzugeben. Allerdings habe ich zu pdflatex nichts derartiges gefunden...

Vielen Dank im Voraus und viele Grüße,
Ariane

Verfasst: Do 19. Nov 2009, 18:27
von ratte
Man scheibt sich eine Wrapper-Klasse, die alles macht, was vor \begin{document} steht.

Ansonsten kann man TeX auch Argumente als Parameter übergeben. Dabei muss man den Backslash aber shell-abhängig quoten. Folgendes würde beispielsweise mit der bash funktionieren:
\pdflatex '\documentclass{article}\begin{document}Test\end{document}'
Natürlich kann man auch Anweisungen mit \newcommand definieren:
\pdflatex '\newcommand*{\Text}{Dies ist ein Text}\input' test.tex
Hier würde die Anweisung \Text definiert und dann das Dokument test.tex ausgeführt. Im Dokument test.tex könnte dann beispielsweise stehen:
\documentclass{article}
\providescommand{\Text}{\typeout{ACHTUNG: \string\Text\ ist nicht definiert!}}
\begin{document}
\Text
\end{document}
Schönere Warnungen und Fehlermeldungen kann man mit \GenericWarnung und \GenericError basteln. Die beiden Anweisungen sind in source2e dokumentiert.

Verfasst: Fr 20. Nov 2009, 12:29
von ari-whv
Hallo,

vielen Dank für die Antwort! Wie schreibe ich mir denn so eine Wrapper-Klasse, kannst du mir dazu eine Seite empfehlen? Schaue grad im scrguide nach, was mir allerdings grade nicht sehr viel hilft..

Viele Grüße,
Ariane

edit: ah ok, arbeite mich grad mal ein und melde mich wieder falls es Probleme gibt...

Verfasst: Di 24. Nov 2009, 11:40
von ari-whv
Hallo,

habe das jetzt hinbekommen, großes Dankeschön! Eine Frage hätte ich aber noch:

Wenn ich jetzt ein Makefile auf den Spaß loslasse und meine einzeln zu kompilierenden Dateien in einem Unterverzeichnis liegen, bekomme ich Schwierigkeiten, dass er z.B. bestimmte Dateien nicht findet...Kann ich das im Makefile einstellen?

Entweder stelle ich meine TeX-Dokumente so um, dass das Makefile geht, oder so, dass ich mit Kile kompilieren kann - beides gleichzeitig geht bei mir momentan nicht...

Viele Grüße,
Ariane

edit: habe das Problem jetzt über zwei Makefiles und jeweiliges aufrufen mit $(MAKE) gelöst...gibt es schönere methoden?
edit 2: noch ein Problem: wie sage ich dem Makefile, dass es bestimmte "Komponenten" nur ausführt, wenn die dazugehörige Datei verändert wurde? Momentan führt er es einfach immer aus...

Verfasst: Di 24. Nov 2009, 12:47
von PP
Im makefile TEXINPUTS passend setzen und exportieren oder den entsprechenden Parameter von pdflatex verwenden?

Verfasst: Do 26. Nov 2009, 13:12
von ari-whv
Hallo,

welcher Parameter von pdflatex wäre das? Habe grad über Google und die man nichts gefunden...und TEXINPUTS kompiliert dann nur, wenn die entsprechenden Dateien verändert wurden?

Viele Grüße,
Ariane

Verfasst: Fr 27. Nov 2009, 07:32
von ratte
Ich kenne keine aktuelle TeX-Implementierung, die einen Parameter --inputpath o. ä. versteht. Früher war das mal üblich, aber heute nicht mehr.

Für welche Dateien ein LaTeX-Lauf angestoßen wird, bestimmt das makefile. Das hat mit TEXINPUTS direkt nichts zu tun, den das ist eine Umgebungsvariable für TeX selbst. Siehe dazu "texdoc kapthsea" oder vergleichbare Anleitungen der verwendeten TeX-Implementierung.