PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie verwende ich TEXINPUTS richtig?



mr. pelle
14-12-2005, 16:37
Moin moin,

ich habe ein großes Latex-Dokument, das ich in mehrere Unterordner aufgeteilt habe. Nun möchte ich, dass Latex beim kompilieren automatisch alle Unterordner durchsucht und ich nicht jeden Ordner explizit angeben muss.

Mein Recherchen haben ergeben, dass das mit
TEXINPUTS=.\\;
in einer eigenen batch-Datei funktionieren sollte. Allerdings erhalte ich immer die Fehlermeldung "Der Befehl "TEXINPUTS" ist entweder falsch geschrieben oder konnte nicht gefunden werden." Die Systemvariable soll allerdings nicht global geändert werden, da das Dokument auf mehreren Rechnern kompiliert werden soll.

Was mache ich falsch?

MfG
Mr. Pelle

Nur zur Info: Ich nutze Win XP und MikTex.

edico
14-12-2005, 17:45
...
s. Abschnitt 3 von kpathsea.pdf. Da steht was von TEXINPUTS. Wie man Umgebungsvariablen bei Windows setzt, entnimmst du einer Windows-Anleitung ;-) .. Geht das bei Win nicht mit der autoexec.bat? Sind dort nicht Umgebungsvaraiblen? Ansonsten eine Datei maLatex.bat mit (lange her):
TEXINPUTS=bilder;add;%TEXINPUTS%
LATEX $1
oder so ähnlich...
Oder - nimm Linux und pack's in die .bashrc mit:
export TEXINPUTS=$TEXINPUTS:$HOME/graphics/xmpl
Gruss an Petzi und Pingo! edico

mr. pelle
14-12-2005, 19:36
Moin edico,

danke für Deine Hinweise. Ich bin jetzt einen Schritt weiter:

ich kann die Variable mit
SET TEXINPUTS=c:\abc\def;
setzen und mit
echo %TEXINPUTS%
auch wieder abfragen. Allerdings schert MikTeX sich da nen feuchten Kehricht drum. Sprich, die Datei in dem Verzeichnis wird nicht gefunden.

Warum nur?

pospiech
14-12-2005, 22:53
ich habe ein großes Latex-Dokument, das ich in mehrere Unterordner aufgeteilt habe.

So wie man das bei größeren Projekten auch machen sollte und normalerweise zu keinen Problemen führt.



Nun möchte ich, dass Latex beim kompilieren automatisch alle Unterordner durchsucht und ich nicht jeden Ordner explizit angeben muss.

???
Wozu brauchst du den das ? Wenn du Pakete installiert hast, dann must du den texmf Baum von Miktex aktualisieren lassen.
Aber was hat das mit den Dokumenten in deinem Projekt zu tun ?

Poste bitte mal ein Beispiel hier was dein Problem demonstiert.

Matthias

Klez
15-12-2005, 11:49
Ich denke er meint anstelle von 20x \include{datei}, nur 1x \include{ordner} zu schreiben, welches dann alle Tex-Dateien darin automatisch einbindet...
Zur Lösung hab ich zwar keine Idee, aber interessieren würde es mich trotzdem ;)

Salnic
15-12-2005, 13:13
Ich denke er meint anstelle von 20x \include{datei}, nur 1x \include{ordner} zu schreiben, welches dann alle Tex-Dateien darin automatisch einbindet...)ich weiß nicht, ob es so etwas gibt: in welcher Reihenfolge sollte Latex denn auch die Dateien einlesen? Alphabetische? Nach Datum? Zufällig? Nach Größe? Dazu müsste man sich ein script schreiben, siehe z.B. http://www.mrunix.de/forums/showthread.php?t=42083

Ich glaube eher, dass es darum geht, statt \include{ordnerA/dateiF}, \include{ordnerB/dateiC} und \include{ordnerA/dateiA} nur noch \include{dateiF}, \include{dateiC} und include{dateiA} zu schreiben. Warum man das machen möchte, weiss ich nicht, sehe (noch) nicht sehr viel Sinn darin.


> ich kann die Variable mit
> SET TEXINPUTS=c:\abc\def;
> setzen und mit
> echo %TEXINPUTS%
> auch wieder abfragen. Allerdings schert MikTeX sich da nen feuchten Kehricht drum. Sprich, die Datei in dem Verzeichnis wird nicht gefunden.

Du musst alle Unterordner angeben, in denen Latex Deine Dateien suchen soll, also in etwa so:

SET TEXINPUTS=c:\abc\def\ordnerF;c:\abc\def\ordnerB;c: \abc\def\ordnerA;

und in genau der Reihenfolge sucht dann Latex auch nach der Datei. Es kann also durchaus passieren, dass in verschiedenen Ordnern Dateien mit dem gleichen Namen liegen und dann nimmt Latex (ohne Fehlermeldung) die Datei, die es zu erst findet. Vor allen in größeren Projekten kann so etwas problemlos passieren, viel Spass bei der Fehlersuche!!! Und deswegen würde ich den vollständigen Pfad angeben. Man kann ja relativer Pfade angeben (\input{ordnerA/dateiF} statt \input{c:/abc/def/ordnerA/dateiF}) und damit bleibt das Projekt doch auch unabhängig von der Plattform. Man kann den kompletten Ordner c:\abc\def irgendwo anders (auch auf einen anderen Computer) verschieben und das Projekt bleibt latexbar.

Salnic

mr. pelle
15-12-2005, 19:21
Moin moin,

so, jetzt einmal der Reihe nach :-)

@pospiech: Bei meinem Dokument handelt es sich um ein Buch, das viele Bilder, Tabellen u.a. enthält. Die Bilder und Tabellen werden zum Teil von anderen Leuten erstellt, weshalb all diese Elemente in einer eigenen TeX-Datei gespeichert werden und mittels \input{} eingebunden werden. Die Ordnerstruktur sieht nun wie folgt aus:


Dokument
|-1_Kapitel-ABC
| |-Bilder
| |-Tabellen
| |-Aufgaben
|-2_Kapitel-DEF
| |-Bilder
| |-Tabellen
| |-Aufgaben
|-2_Kapitel-GEH
|-Bilder
|-Tabellen
|-Aufgaben

Und das ganze geht bis Kapitel 10...
Die einzelnen Teile binde ich nun mittels
\input{1_Kapitel-ABC/Tabellen/Tabelle_sowieso}
ein. Außerdem muss ich
\graphicpath{}
auf alle einzelnen Bildverzeichnisse stellen. Nun habe ich mich schwach an TEXINPUTS erinnert und weiß, dass sich mit dem Befehl die ganze Sache vereinfachen lässt. Wenn man
TEXINPUTS=.\\;
setzt, sollten eigentlich automatisch alle Unterordner durchsucht werden. Die Geschichte mit \graphicpath würde entfallen und die Einbindung würde sich zu
\input{Tabelle_sowieso}
vereinfachen.

An dieser Stelle @salnic: Die ganzen einzubindenen Dateien tragen alle ein Datum im Dateinamen und sind auch ansonsten eindeutig benannt, so dass eine Verwechslung (nahezu) ausgeschlossen werden kann.

Meine Versuche
SET TEXINPUTS=.\\
zu setzen, zeigten keinen Erfolg, daher wollte ich erstmal klein anfangen und ein bestimmtes Verzeichnis mittels
SET TEXINPUTS=c:\abc\def;
einbinden. Allerdings durchsucht LaTeX dieses Verzeichnis nicht automatisch, obwohl die Variable, wie
echo %TEXINPUTS%
zeig, korrekt gesetzt wurde.

Und ich möchte jetzt gerne wissen, warum es nicht funktioniert. Ich hoffe, dass ihr mir da weiterhelfen könnt...

MfG
Mr. Pelle

rais
16-12-2005, 02:54
Die ganzen einzubindenen Dateien tragen alle ein Datum im Dateinamen und sind auch ansonsten eindeutig benannt, so dass eine Verwechslung (nahezu) ausgeschlossen werden kann.

und warum packst Du dann nicht alle Bilder in einen Bilderordner, Tabellen in einen Tabellenordner etc? Wozu dann noch die Trennung nach Kapitel?


Meine Versuche
SET TEXINPUTS=.\\
zu setzen, zeigten keinen Erfolg, daher wollte ich erstmal klein anfangen und ein bestimmtes Verzeichnis mittels
SET TEXINPUTS=c:\abc\def;
einbinden. Allerdings durchsucht LaTeX dieses Verzeichnis nicht automatisch, obwohl die Variable, wie
echo %TEXINPUTS%
zeig, korrekt gesetzt wurde.

und hast Du latex auf dieser Konsole ausgeführt oder über miktex? Wenn Du die TEXINPUTS nicht global geändert hast, dann weiß miktex da nix von - versuch's erstmal direkt mit latex auf dieser Konsole.
Und schau Dir mal die TEXINPUTS-Variable an, _bevor_ Du sie neu setzt - vielleicht steht da ja schon was wichtiges drin;)

MfG,

pospiech
16-12-2005, 12:46
Die einzelnen Teile binde ich nun mittels
\input{1_Kapitel-ABC/Tabellen/Tabelle_sowieso}
ein.

genauso macht man das.



Außerdem muss ich
\graphicpath{}
auf alle einzelnen Bildverzeichnisse stellen.

Wofür brauchst du das ? Auf Bilder verweist man genauso wie auf andere Dateien auch - also mit den Pfad.


Matthias

rais
16-12-2005, 17:15
Außerdem muss ich
\graphicpath{}
auf alle einzelnen Bildverzeichnisse stellen.
:
SET TEXINPUTS=.\\

Schau Dir dazu bitte auch l2tabu 3.4 an, da ist ein Beispiel auch für Windows mit angegeben, wie (und wo) die TEXINPUTS-Variable gesetzt wird.;)
MfG,

mr. pelle
17-12-2005, 13:56
Moin moin,

danke für die zahlreichen Antworten...



und warum packst Du dann nicht alle Bilder in einen Bilderordner, Tabellen in einen Tabellenordner etc? Wozu dann noch die Trennung nach Kapitel?

Das ist die gewünschte Struktur von dem Professor, für den ich das Buch layoute. Es soll einfach nur der Übersicht dienen.


Wenn Du die TEXINPUTS nicht global geändert hast, dann weiß miktex da nix von - versuch's erstmal direkt mit latex auf dieser Konsole.

Ich habe eine batch-Datei geschrieben, in der zuerst TEXINPUTS gesetzt wird, und danach latex aufgerufen wird. Das sollte doch reichen, oder?


Schau Dir dazu bitte auch l2tabu 3.4 an, da ist ein Beispiel auch für Windows mit angegeben, wie (und wo) die TEXINPUTS-Variable gesetzt wird.

Das habe ich auch schon gesehen. Nach diesem Beispiel soll man bei WinXP die Systemvariable ja einmal fest setzen, aber genau das wollte ich vermeiden, da das Dokument auf mehreren Rechnern kompiliert werden soll und nicht jeder erst die Systemvariable setzen sollen muss. Daher sollte der Kompilierungsvorgang über die batch-Datei geschehen, die die Variable automatisch setzt.

Oder kann man bei WinXP die Variablen nicht mehr auf diesem Weg setzen? Denn die Möglichkeit SET TEXINPUTS=... zu verwenden, ist dort nur für Win<=98 angegeben...


genauso macht man das.
[...]
Auf Bilder verweist man genauso wie auf andere Dateien auch - also mit den Pfad.

Es geht mir einfach nur darum, Schreibaufwand zu sparen - den ich bestimmt mit diesem Thread schon um ein vielfaches übertroffen habe ;-). Zuerst kannte ich nur \graphicpath aber bei google.groups wurde, wie auch in l2tabu, dazu geraten, \graphicpath durch TEXINPUTS zu ersetzen.

MfG
Mr. Pelle

rais
17-12-2005, 19:42
Moin,

Ich habe eine batch-Datei geschrieben, in der zuerst TEXINPUTS gesetzt wird, und danach latex aufgerufen wird. Das sollte doch reichen, oder?

Das habe ich auch schon gesehen. Nach diesem Beispiel soll man bei WinXP die Systemvariable ja einmal fest setzen, aber genau das wollte ich vermeiden, da das Dokument auf mehreren Rechnern kompiliert werden soll und nicht jeder erst die Systemvariable setzen sollen muss. Daher sollte der Kompilierungsvorgang über die batch-Datei geschehen, die die Variable automatisch setzt.

Ja und, wo ist jetzt das Problem die TEXINPUTS auf den in Frage kommenden Rechnern anzupassen? Das braucht man doch nur einmal zu erledigen.


Oder kann man bei WinXP die Variablen nicht mehr auf diesem Weg setzen? Denn die Möglichkeit SET TEXINPUTS=... zu verwenden, ist dort nur für Win<=98 angegeben...

Wie in der l2tabu steht: seit Windows XP über Systemsteuerung->System->Erweitert->Umgebungsvariablen setzen.
Allerdings steht nicht explizit bei, daß die set TEXINPUTS Variante nicht mehr funzt (es heißt ja "kann man...") - und eigentlich spricht nichts dagegen...
Um es völlig auszuschließen, probier's doch erstmal so aus, wie in der l2tabu vorgeschlagen, vielleicht liegt's ja doch noch an etwas anderem.


Es geht mir einfach nur darum, Schreibaufwand zu sparen - den ich bestimmt mit diesem Thread schon um ein vielfaches übertroffen habe ;-). Zuerst kannte ich nur \graphicpath aber bei google.groups wurde, wie auch in l2tabu, dazu geraten, \graphicpath durch TEXINPUTS zu ersetzen.

MfG
Mr. Pelle
Und hast Du nun schon mal geguckt, was vorher drin stand in Deiner TEXINPUTS? Oder setzt Du inzwischen mit
set TEXINPUTS=%TEXINPUTS%;.\bilder1;.\bilder2 ...?

MfG,