Dateipfade Wiki .:. goLaTeX - Mein LaTeX-Forum


goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum

goLaTeX.de - Wiki
 


Dateipfade

In diesem Beitrag wird erklärt, wie (La)TeX Dateinamen interpretiert und die Suche nach Dateien verläuft und wie sich (La)TeX beim Anlegen von Dateien verhält. Einige dieser Informationen, wie die aufgestellten Regeln, sind auch für Computer-Neulinge verständlich. Andere sind tiefer gehend und bedürfen eines gewissen Vorwissens.

Inhaltsverzeichnis

[bearbeiten] Begriffserklärung

  • Unter dem Basisnamen einer Datei wird der reine Name einer Datei innerhalb eines Verzeichnisses ohne irgendwelche Pfadangaben oder Dateiendungen verstanden. Ein Beispiel für einen solchen Basisnamen wäre foo.
  • Unter der Dateiendung wird der Teil des Namens einer Datei nach dem ersten oder letzten Punkt verstanden, der in vielen Fällen die Art der Datei repräsentiert. Ein Beispiel für eine Dateiendung wäre .tex.
  • Unter dem reinen Dateinamen wird eine Kombination aus Basisnamen und Dateiendung verstanden. Ein Beispiel für einen reinen Dateinamen wäre foo.tex.
  • Unter einem relativen Pfad wird die Position eines Verzeichnisses relativ zu einem anderen Verzeichnis angegeben. Pfadangaben sind bei TeX von der Implementierung (siehe unten) abhängig.
  • Unter einem absoluten Pfad wird die Position eines Verzeichnisses relativ zur Wurzel des gesamten Dateisystems verstanden. Pfadangaben sind bei TeX von der Implementierung (siehe unten) abhängig.
  • Unter einem Pfad wird ein relativer Pfad oder ein absoluter Pfad verstanden. Pfadangaben sind bei TeX von der Implementierung (siehe unten) abhängig.
  • Mit dem Begriff Verzeichnispfad wird verdeutlicht, dass das Ziel eines Pfads ein Verzeichnis und nicht etwa eine Datei ist. Genau genommen sind Verzeichnispfad und Pfad synonym.
  • Unter dem Dateipfad wird ein um einen Pfad erweiterter reiner Dateinamen verstanden. Entsprechend gibt es auch einen relativen Dateipfad und einen absoluten Dateipfad.
  • Unter einem Dateinamen kann ein reiner Dateinamen oder auch ein Dateipfad verstanden werden.

[bearbeiten] TeX-Festlegungen für Dateinamen

TeX selbst macht bezüglich Dateinamen nur eine Festlegung: Ein Dateinamen endet beim ersten Space-Token, also in der Regel beim ersten Leerzeichen oder Zeilenende. Zuvor werden Makros in Dateinamen so weit wie möglich expandiert. Das kann beispielsweise dazu führen, dass Umlaute zerbrechen und stattdessen durch ihre interne Repräsentation ersetzt werden.

Daraus ergeben sich, die von der TeX-Implementierung unabhängigen Regeln:

[bearbeiten] Regel 1:

Innerhalb von Dateipfaden sind keine Leerzeichen möglich.

[bearbeiten] Regel 2:

Innerhalb von Dateipfaden kann \ nicht als Verzeichnistrenner verwendet werden.

[bearbeiten] Regel 3:

Umlaute und andere Sonderzeichen, die in TeX u. U. durch aktive Zeichen realisiert sind, sollten in Dateinamen vermieden werden.

[bearbeiten] Pfadangaben abhängig von der TeX-Implementierung

Pfade sind innerhalb von TeX selbst nicht spezifiziert und damit von der jeweiligen TeX-Implementierung abhängig. Für alle modernen TeX-Implementierung gilt derzeit:

  • Verzeichnistrennzeichen ist der Schrägstrich von links unten nach rechts oben, Slash: /
  • Das aktuelle Verzeichnis wird von einem einzelnen Punkt repräsentiert: .
  • Das nächst höhere Verzeichnis, auch Elternverzeichnis genannt, wird durch zwei Punkte repräsentiert: ..
  • Ein relativer Pfad ist damit ein Pfad, in dem min. einmal "/./" oder "/../" enthalten ist oder der mit "/." oder "/.." endet oder nicht mit "/" beginnt.
  • Ein relativer Pfad, der direkt mit einem Verzeichnisname beginnt, ist relativ zum aktuellen Arbeitsverzeichnis.
  • Aktuelles Arbeitsverzeichnis ist während des Einlesens der Hauptdatei das Verzeichnis, aus dem (La)TeX gestartet wurde. In der Regel ist dies das Verzeichnis der Hauptdatei selbst. Während des Einlesens einer Unterdatei mit \input oder \include ist das aktuelle Arbeitsverzeichnis in der Regel das Verzeichnis der Datei, die gerade eingelesen wird.

Für Unix, Linux, Mac OS X, BSD ergibt sich außerdem:

  • Ein absoluter Pfad beginnt immer mit einem "/" und enthält kein "/./" oder "/../" und endet nicht mit "/." oder "/..".

Für Windows ergibt sich außerdem:

  • Ein absoluter Pfad auf einem Laufwerk mit Laufwerksbuchstaben beginnt mit "X:/" und enthält kein "/./" oder "/../" und endet nicht mit "/." oder "/..". X steht dabei für den Laufwerksbuchstaben des Laufwerks.
  • Ein absoluter Pfad auf einem Netzlaufwerk (oder einem anderen Laufwerk mit Laufwerksnamen statt Laufwerksbuchstabe) beginnt mit "//LAUFWERKSNAME/" und enthält kein "/./" oder "/../" und endet nicht mit "/." oder "/..". LAUFWERKSNAME steht dabei für den Name des Laufwerks, der ggf. auch den Rechnername des Zielrechnern enthält.

Da es von dem verwendeten Dateisystem abhängig, ob die Groß-/Kleinschreibung eine Rolle spielt, gilt außerdem folgende Regel:

Bei früheren TeX-Implementierungen galten u. a. für Verzeichnistrennzeichen auch ganz andere Regeln beispielsweise bei OzTeX für ältere Mac-Systeme. Für Systeme, bei denen Dateinamen auf 8 Zeichen vor und 3 Zeichen nach dem Punkt beschränkt waren, sogenannte 8.3-Dateinamen, gab es teilweise spezielle Behandlungen von langen Dateinamen. Dabei wurden für den Dateinamen die ersten 5 und die letzten 3 Zeichen vor dem ersten Punkt und für die Dateiendung die ersten drei Zeichen nach dem ersten Punkt verwendet. Man sprach von der 5+3.3-Regel bzw. von 5+3.3-Dateinamen oder verkürzt auch von 5+3-Dateinamen. Statt der Datei "Hauptdatei.tex" wäre also tatsächlich die Datei "Haupttei.tex" gelesen wurden und statt "Hauptdatei.tex.aux" wäre tatsächlich die Datei "Haupttei.tex" geschrieben worden. Daraus ergibt sich allerdings eine mittlere Katastrophe für die Datei Haupttei.tex, wenn \include{Arbeitsdatei.tex} statt \include{Arbeitsdatei} geschrieben wurde. Teilweise wurde die Regel deshalb auch abgewandelt und es wurden für die Dateiendung die ersten drei Buchstaben nach dem letzten Punkt verwendet. Diese Regel wurde beispielsweise von CS-TeX oder MultiTeX für Atari-TOS verwendet.

[bearbeiten] Regel 4:

Dateinamen sollten immer unter Beachtung der Groß-/Kleinschreibung angegeben werden. Lautet der Name einer Datei also foo.tex, so sollte sie immer mit \input{foo.tex} und nicht mit \input{FOO.TEX} geladen werden!

[bearbeiten] Beispiele für Pfadangaben

  • ./Kapitel1/Hauptdatei.tex - Die Datei "Hauptdatei.tex" im Unterverzeichnis "Kapitel1" des aktuellen Arbeitsverzeichnisses.
  • ../Kapitel1/Hauptdatei.tex - Die Datei "Hauptdatei.tex" im Unterverzeichnis "Kapitel1" des Elternverzeichnisses des aktuellen Arbeitsverzeichnisses.
  • Kapitel1/Hauptdatei.tex - Die Datei "Hauptdatei.tex" im Unterverzeichnis "Kapitel1" des aktuellen Arbeitsverzeichnisses.
  • Kapitel1/../Hauptdatei.tex - Die Datei "Hauptdatei.tex" im aktuellen Arbeitsverzeichnis,
  • C:/texmf/tex/latex/graphics/graphics.cfg - Die Datei "graphics.cfg" im absoluten Pfad "C:\texmf\tex\latex\graphics" unter Windows.

[bearbeiten] Suche nach Dateien

TeX sucht laut Spezifikation beim Lesen oder beim Öffnen einer Datei zur Eingabe zunächst immer nach der angegebenen Datei. Wird diese nicht gefunden, so wird an den angegebenen Dateinamen die Endung ".tex" angehängt und erneut eine Suche gestartet. Dies ist auch bei Dateien der Fall, die bereits über eine Endung verfügen.

Dateien, die zum Lesen oder als Eingabe geöffnet werden, werden von TeX grundsätzlich über die Environmentvariable - in deutschen Windows-Versionen heißen diese Umgebungsvariablen - TEXINPUTS gesucht. Der Aufbau dieser Variable ist jedoch von der Implementierung abhängig.

TeX Live bedient sich zur Suche nach einer Datei der Bibliothek kpathsea, die auch von dem Programm kpsewhich verwendet wird. Dabei kann TEXINPUTS auch in der Datei texmf.cnf statt als Environmentvariable des Systems definiert sein. Außerdem kann die Variable in texmf.cnf für jedes TeX-Programm unterschiedlich definiert werden. Die Variable setzt sich dabei aus Pfadangaben zusammen, die durch Doppelpunkt getrennt werden. Enthält ein Pfad zwei Slashs, so werden auch alle Unterverzeichnisse des vorangehenden Verzeichnisses in die Suche mit einbezogen. Das bedeutet insbesondere, dass wenn in TEXINPUTS der Pfad ".//" vorkommt, alle Unterverzeichnisse des aktuellen Verzeichnisses in die Dateisuche mit eingebunden sind. Das ist ggf. sehr nützlich, um Kapitel-Dateien oder Bilder in beliebigen Unterverzeichnissen ablegen zu können. Darüber hinaus kennt kpathsea programmabhängige Voreinstellungen von TEXINPUTS. Für latex oder pdflatex ist diese beispielsweise "./:{$TEXMF}/tex/{latex,generic}/". Es wird also zuerst das aktuelle Verzeichnis und dann die Verzeichnisses "tex/latex" und "tex/generic" innerhalb aller TEXMF-Bäume durchsucht. Beginnt oder endet eine explizit gesetzte TEXINPUTS-Variable mit einem Doppelpunkt oder kommen darin zwei Doppelpunkte hintereinander vor, so wird an dieser Stelle die jeweilige Voreinstellung eingesetzt. Semikolon werden von kpathsea übrigens automatisch in Doppelpunkte übersetzt.

MiKTeX ist bei der Dateisuche weitgehend kompatibel zu TeX Live. Als Pfad-Trennzeichen wird dort jedoch das Semikolon erwartet. Infolge der automatischen Ersetzung des Semikolon bei TeX Live, ist die für die Austauschbarkeit kein Problem.

Sowohl TeX Live als auch MiKTeX durchsuchen bestimmte Verzeichnisse bzw. Verzeichnisbäume nicht tatsächlich. Bei einigen Tausend Dateien in den TEXMF-Bäumen wäre dies sehr ineffektiv. Stattdessen gibt es Datenbankdateien, die zu einem Dateinamen sehr schnell dessen Ort im jeweiligen Verzeichnisbaum ergeben. Aus diesem Grund ist es wichtig, bei Installation von Dateien diese Datenbanken aktuell zu halten. Unter TeX Live kann die Datenbank eines oder aller Verzeichnisbäume mit Hilfe von texhash aktualisiert werden. Unter MiKTeX geschieht dies einfach mit einem Knopf im MiKTeX-Options-Dialog. Erfolgt die Installation neuer Pakete über den jeweiligen Paketmanager, so führt dieser eine Aktualisierung bei Bedarf selbst durch.

[bearbeiten] Schreiben von Dateien

TeX versucht zunächst eine Datei im angegeben Ort ausgehend von aktuellen Arbeitsverzeichnis anzulegen. Allerdings weigern sich moderne TeX-Distributionen aus Sicherheitsgründen Dateien in Verzeichnissen anzulegen, die nicht im aktuellen Arbeitsverzeichnis liegen. Damit schlägt das Anlegen der Datei "../foo" beispielsweise fehlt. Im Zusammenhang mit dem Befehl \include kann dies dazu führen, dass der Befehl fehlt schlägt, da dieser Befehl auch immer den angegebenen Dateipfad um die Endung .aux erweitert für die Ausgabe der Unter-aux-Datei verwendet. So würde beispielsweise \include{../foo} genau an diesem Problem scheitern.

Gelingt es nicht, eine Datei anzulegen, so wird bei einigen TeX-Implementierungen zusätzlich die Environment-Variable TEXMFOUTPUT ausgewertet. Ist diese Variable gesetzt, so wird deren Wert sozusagen als Notfallausgabeverzeichnis verwenden. Es wird dann ein weiterer Versuch unternommen, um die Datei in jenem Verzeichnis anzulegen. Die Environmentvariable kann in einigen Implementierungen auch einen anderen Namen haben, beispielsweise TEXOUTPUTS. Implementierungsabhängig kann es auch sein, dass bei der Suche nach einer Datei zunächst zusätzlich das Verzeichnis dieser Variablen durchsucht wird. Bei aktuellen Implementierungen ist das jedoch nicht so. Man sollte sich also besser nicht darauf verlassen und stattdessen ggf. TEXINPUTS selbst entsprechend erweitern - beispielsweise, damit dort abgelegte Hilfsdateien wie die aux-, toc-, lot- oder lof-Datei gefunden werden.

Teilweise kann dieses Notfallausgabeverzeichnis auch über einen Programmparameter wie -output-directory eingestellt werden. In diesem Fall wird dann auch häufig TEXINPUTS (siehe oben) automatisch vorn um das entsprechende Verzeichnis erweitert.

[bearbeiten] Abweichung von obigen Regeln

Bei PDFTeX gibt es die Möglichkeit, bei einigen Befehlen Regel 1 aufzuheben. Das Paket grffile setzt dies um. Aus Gründen der Kompatibilität mit anderen TeX-Versionen wird jedoch empfohlen, dennoch auf Leerzeichen in Dateinamen zu verzichten.

Einige TeX-Implementierungen heben Regel 1 für den Fall auf, dass der Dateinamen in Anführungszeichen " gesetzt ist. Aus Gründen der Kompatibilität zu anderen TeX-Implementierungen sollte man dieses Möglichkeit jedoch besser nicht nutzen.

[bearbeiten] Links

  • kpathsea.pdf: Anleitung zu kpathsea mit Erklärungen zu TEXMF, texmf.cnf, TEXINPUTS, Suchpfadauswertung etc.
  • tds.pdf: Anleitung zur TeX-Verzeichnis-Struktur, also zum Aufbau von TEXMF-Bäumen.



Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2015 goLaTeX.de