> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/de/ausfuhrliche-artikel/06-an-introduction-to-kpathsea-and-how-tex-engines-search-for-files.md).

# Eine Einführung in Kpathsea und wie TeX-Engines nach Dateien suchen

## Einführung

Dieser Artikel bietet eine Einführung dazu, wie TeX-Engines die Dateien finden, die zum Satz Ihres Dokuments benötigt werden – mit LaTeX oder einem anderen Makropaket. Obwohl Overleaf die Nutzer von den Herausforderungen der Verwaltung einer TeX-Installation befreit ([TeX Live](https://www.tug.org/texlive/)), sind die Grundlagen der Dateisuche durch TeX-Engines nützlich/interessant, wenn Sie eine Ordnerstruktur erstellen möchten, um Ihr Overleaf-Projekt besser zu verwalten.

Warum könnte das so sein? Wenn Sie einige Ihrer Overleaf-Projektdateien in Ordnern speichern, findet LaTeX diese Dateien möglicherweise nicht, weil die TeX-Engine (der Compiler) standardmäßig möglicherweise nicht *wissen* dass sie diese Ordner durchsuchen muss – und die darin enthaltenen Dateien daher nicht findet. Um das zu vermeiden, können Sie eine Konfigurationsdatei namens [latexmkrc-Datei](https://mg.readthedocs.io/latexmk.html#configuration-files) erstellen und zu Ihrem Projekt hinzufügen, mit der Sie einer TeX-Engine mitteilen können, dass Ihre Ordner existieren und dass sie sie durchsuchen soll.

Wenn Sie direkt zu einem Beispiel für eine latexmkrc-Datei springen möchten, können Sie diesen Hilfsartikel lesen: [Wie man latexmkrc mit Overleaf verwendet: Beispiele und Techniken](/latex/de/ausfuhrliche-artikel/28-how-to-use-latexmkrc-with-overleaf.md). Es ist vielleicht nicht sofort ersichtlich, wie oder warum diese latexmkrc-Datei tatsächlich funktioniert. Wenn Sie wissen möchten, warum, und vielleicht ein besseres Verständnis für weitere Konfigurationsmöglichkeiten Ihres Projekts entwickeln möchten, dann lesen Sie weiter... Am Ende dieses Artikels gehen wir anhand eines [praktisches Beispiel](#kpathsea-and-texinputs-latexmkrc-file-to-the-rescue)—und nutzen unser Wissen darüber, wie TeX nach Dateien sucht—, um eine latexmkrc-Datei zu erstellen, mit der verschachtelte Ordner mit Ihren Grafikdateien verwaltet werden.

## TeX und Plattformunabhängigkeit

Als Knuth TeX entwickelte, war Plattformunabhängigkeit ein zentrales Prinzip, das das Design und die Implementierung leitete, und diese Philosophie spiegelt sich in den internen Abläufen von TeX wider (z. B. Verwendung von Ganzzahlarithmetik, selbst entwickelter Zeichenkettenverarbeitung, Speicherverwaltung usw.). Selbst heute noch wirft die Plattformunabhängigkeit moderner TeX-basierter Engines in öffentlichen Foren Fragen auf und führt zu Debatten; siehe zum Beispiel diese Diskussion auf tex.stackexchange: [Sind XeTeX und LuaTeX plattformabhängig?](https://tex.stackexchange.com/questions/94297/are-xetex-and-luatex-platform-dependent) die Kommentare und Beobachtungen mehrerer bekannter TeX-Experten enthält.

Lassen Sie uns jedoch vorerst die feineren Details beiseitelassen und festhalten, dass TeX-Engines dennoch sehr portabel sein müssen – sie müssen auf mehreren Betriebssystemen funktionieren und „identische“ Ergebnisse liefern. Ein wesentlicher Aspekt der Portabilität ist die Suche nach Dateien auf plattformunabhängige Weise.

## TeX-Engines suchen nicht nach Dateien… wirklich!?

Nein, TeX-Engines tun das nicht *direktes* nach Dateien suchen *von selbst*. Beim Verarbeiten einer `.tex` Datei kann eine TeX-Engine feststellen, dass eine bestimmte Datei geöffnet werden muss, aber sie *delegiert* die Aufgabe, sie zu finden, an eine andere Software namens [*Kpathsea*](https://tug.org/kpathsea/): eine externe Softwarebibliothek, die nicht Teil des *Kern* Quellcodes von TeX-Engines ist. Was Kpathsea im Grunde bereitstellt, ist eine API ([Anwendungsprogrammierschnittstelle](https://en.wikipedia.org/wiki/Application_programming_interface)) die TeX-Engines (sowie BibTeX, MetaPost und andere Anwendungen) aufrufen können, wenn sie eine bestimmte Datei öffnen müssen: Kpathsea übernimmt die eigentliche Arbeit, diese Datei zu finden.

Als Knuth die ursprüngliche TeX-Engine schrieb – von der letztlich alle anderen TeX-Engines abstammen – war das Problem des Findens/Öffnens von Dateien aufgrund des damals sehr heterogenen Technologie-Ökosystems eine erhebliche Herausforderung. Tatsächlich bezeichnet Knuth im Quellcode von TeX die Dateiein-/ausgabe als die „Plage der Portabilität“ (siehe Seite 12, Abschnitt 25 von [TeX: The Program](https://www.amazon.co.uk/Computers-Typesetting-TeX-Program-TEX/dp/0201134373)).

Die TeX-Community erkannte die Notwendigkeit, die Dateisuche für TeX zu harmonisieren (zu standardisieren) –*und TeX-bezogene Software*– und beschloss, TeX die Werkzeuge dafür bereitzustellen. Um das sehr knifflige Problem einer plattformunabhängigen Methode zum Finden von Dateien zu lösen, schrieb Karl Berry, ein führendes Mitglied der TeX-Community, die Software zur Lösung des *Pfad*-Suchproblems: eine Lösung, die er nannte [**Kpathsea**](http://tug.org/texinfohtml/kpathsea.html)—die abgeleitet ist von **K**arls **Path** **Sea**rching (siehe dieses [Interview mit Karl Berry](http://www.tug.org/interviews/berry.html)).

Wir können feststellen, dass sie K**Pfad**sea und nicht K**Datei**sea heißt, denn, wie die [Dokumentation](http://tug.org/texinfohtml/kpathsea.html) anmerkt, ist sie eine \*Pfad\*-Suchbibliothek. Es ist wichtig zu erkennen, dass Kpathsea nicht nur von TeX-Engines verwendet wird; verschiedene TeX-bezogene Programme, darunter BibTeX und MetaPost, nutzen Kpathsea ebenfalls, um nach Eingabedateien zu suchen.

Im Groben gilt: Immer wenn TeX/LaTeX-Makros eine bestimmte Datei öffnen müssen, werden die Befehle, aus denen diese Makros bestehen, letztlich in niedrigstufige TeX-Anweisungen (TeX-Primitiven) umgewandelt, die TeX-Engines tatsächlich ausführen. Wenn diese Anweisungen das Öffnen einer Datei erfordern, ruft die TeX-Engine Kpathsea auf und sagt sinngemäß: „Bitte finde diese Datei“; wenn die Kpathsea-Suche erfolgreich ist, wird die Datei geöffnet. Kann Kpathsea die Datei jedoch nicht finden, wird die TeX-Engine darüber informiert und stoppt die Ausführung, um den berüchtigten Fehler auszugeben ``! Ich kann die Datei `...' nicht finden`` Die Wahrheit ist, dass Kpathsea sie nicht finden kann.

### Hinweise zu LuaTeX

Genau genommen sollten wir diesen Abschnitt mit dem Hinweis versehen, dass LuaTeX einen Mechanismus anbietet, mit dem Benutzer über die Verwendung von *Callbacks*. LuaTeX ermöglicht es Benutzern, Funktionen in der Skriptsprache Lua zu schreiben und sie bei LuaTeX zu registrieren, damit LuaTeX diese benutzerdefinierte Funktion in bestimmten Phasen während der Ausführung von LuaTeX aufruft – daher der Begriff *Callbacks*. Es ist eine sehr leistungsstarke Technik, und der interessierte Leser findet weitere Informationen in Abschnitt 9 von [dem LuaTeX Reference Manual](http://www.pragma-ade.com/general/manuals/luatex.pdf) (zum Zeitpunkt des Schreibens verweist dieser Link auf LuaTeX 1.09).

### Die Kpathsea-Konfigurationsdatei: texmf.cnf

Jede TeX-Installation enthält eine Textdatei namens `texmf.cnf` die von Kpathsea verwendete Konfigurationsdatei ist: Sie enthält zahlreiche „Konfigurationsvariablen“, die die Pfade definieren, die Kpathsea verwendet, um nach verschiedenen Dateitypen zu suchen, die TeX-Engines (oder BibTeX, MetaPost usw.) benötigen könnten. Wie wir unten sehen werden, definieren diese „Konfigurationsvariablen“ Suchpfade, die aus sogenannten *Pfad-Elementen*: mithilfe verschiedener Konstrukte, Variablen und Parameter wird jedes Pfad-Element als „Vorlage“ definiert, die Kpathsea verarbeitet, um die tatsächlichen physischen Verzeichnisse zu erzeugen, in denen gesucht werden soll.

Um ein konkretes Beispiel zu geben, hier ist eine solche Konfigurationsvariable, die die Suchpfade für OpenType-Schriften definiert – machen Sie sich vorerst keine Gedanken über die Bedeutung dieser Pfadkonstruktion:

```
OPENTYPEFONTS = .;$TEXMF/fonts/{opentype,truetype}//;$OSFONTDIR//
```

Wichtig ist hier nur, dass die Datei `texmf.cnf` (von Kpathsea gelesen) eine Konfigurationsvariable namens `OPENTYPEFONTS` verwendet wird, um die Pfade zu definieren, die Kpathsea zur Suche nach OpenType-Schriften verwendet. Die rechte Seite des „=“ sieht nicht wie ein Pfad aus, den man auf einem typischen Gerät sieht, weil sie aus verschiedenen Variablen und Parametern aufgebaut ist, die jeden Pfad als „Vorlage“ oder „Bauplan“ definieren, den Kpathsea verwendet, um reale Verzeichnisse für die Suche zu erzeugen.

### Kpathseas Konzept eines „Pfads“

Wahrscheinlich ist das zentrale Konzept, das es zu verstehen gilt, Kpathseas Begriff von einem „Pfad“: das grundlegende Konstrukt, das Kpathsea verwendet, um herauszufinden, wo sich eine bestimmte Datei befindet. Wie wir im `OPENTYPEFONTS` obigen Beispiel gesehen haben, sieht Kpathseas Vorstellung von einem Pfad ganz anders aus als die Pfade, die wir von unseren Desktop- oder tragbaren Geräten gewohnt sind.

Um Kpathsea zu zitieren: [Dokumentation](http://tug.org/texinfohtml/kpathsea.html#Searching-overview):

> ... ein *Suchpfad* ist eine durch Doppelpunkte getrennte Liste von *Pfad-Elementen*, die Verzeichnisnamen mit einigen „zusätzlichen Extras“ sind.

– beachten Sie jedoch, dass ein Semikolon (`;`) auch verwendet wird, um *Pfad-Elementen*. Später werden wir kurz auf einige dieser „zusätzlichen Extras“ eingehen.

In unserem `OPENTYPEFONTS` Beispiel gibt es drei Pfad-Elemente, die jeweils durch ein Semikolon (`;`):

![Abbildung, die die in einer Kpathsea-Pfaddefinition enthaltenen Pfad-Elemente zeigt](/files/fc38dc93567f131c27359a443f7ad0eab836f441)

1. `.` (das bedeutet das aktuelle Verzeichnis)
2. `$TEXMF/fonts/{opentype,truetype}//`
3. `$OSFONTDIR//`

Beachten Sie, dass ein Doppel-Slash (`//`) in einem Pfad-Element bedeutet, dass Unterverzeichnisse rekursiv durchsucht werden.

Eine typische `texmf.cnf` Datei enthält zahlreiche „Konfigurationsvariablen“, um Suchpfade für die Dateitypen zu definieren, nach denen Kpathsea suchen kann.

## Kpathsea: Ein sehr kurzer Überblick

Kpathsea ist eine ausgefeilte Bibliothek – mit vielen feinen Details und Nuancen – und schon ein kurzer Blick auf ihre [Dokumentation](http://tug.org/texinfohtml/kpathsea.html) macht deutlich, dass wir nicht auf alle Details eingehen können. Wir können jedoch versuchen, einen Überblick darüber zu geben, was sie tut – um Ihr Denken zu orientieren und einen Ausgangspunkt für weitere Lektüre zu bieten.

### Kpathseas Hauptzweck

Wie in der Dokumentation angegeben, besteht Kpathseas grundlegender Zweck darin, „aus einer vom Benutzer angegebenen Liste von Verzeichnissen einen Dateinamen zurückzugeben“, und diese Verzeichnisse (Suchpfade) werden mit „einigen zusätzlichen Extras“ angegeben.

### Diese „zusätzlichen Extras“

Die oben erwähnten „einigen zusätzlichen Extras“ umfassen verschiedene Parameter und Variablen, die Kpathsea verwendet, um seine Suchpfade (oder „Pfadvorlagen“) zu konstruieren, sodass es Pfade auf allgemeinere Weise definieren kann. Wenn eine TeX-Engine tatsächlich läuft (ausgeführt wird), kann Kpathea den aktuellen Wert dieser Parameter/Variablen verwenden, um die tatsächlichen Pfade zu ermitteln, indem diese Variablen durch ihre tatsächlichen (zur Laufzeit ermittelten) Werte ersetzt werden. Sie können diese Variablen (innerhalb von Pfad-Elementen) leicht erkennen, weil sie mit einem `$` Zeichen beginnen.

Daher sagen wir, dass Kpathsea *erweitert* ein Pfad-Element erweitert, was bedeutet, dass es diese Parameter und Variablen umwandelt: eine Pfad-„Vorlage“ in den tatsächlichen Namen oder die tatsächlichen Namen eines oder mehrerer physischer Verzeichnisse verwandelt, in denen nach einer Datei gesucht werden soll. Das bietet ein hohes Maß an Flexibilität und bedeutet, dass Kpathsea eine Liste von Verzeichnissen erzeugen kann, die einem einzelnen Pfad-Element entsprechen – zum Beispiel, wenn es angewiesen wird, Unterverzeichnisse zu durchsuchen.

### Unser OpenType-Beispiel erneut betrachtet

Wir führen die verschiedenen Fäden zusammen und betrachten `OPENTYPEFONTS` etwas genauer:

```
OPENTYPEFONTS = .;$TEXMF/fonts/{opentype,truetype}//;$OSFONTDIR//
```

Betrachten wir die beiden Pfad-Elemente `$TEXMF/fonts/{opentype,truetype}//` und `$OSFONTDIR//`. Hier erkennt Kpathsea die Verwendung von geschweiften Klammern `{...}` und behandelt `$TEXMF/fonts/{opentype,truetype}` als Darstellung von *zwei* Pfad-Elementen:

1. `$TEXMF/fonts/opentype//`
2. `$TEXMF/fonts/truetype//`

und dass die *Unterverzeichnisse* beider dieser Pfad-Elemente ebenfalls durchsucht werden sollen (angezeigt durch das abschließende `//`).

**Hinweis**: Siehe die Kpathsea-Dokumentation zur [Unterverzeichnis-Erweiterung](http://tug.org/texinfohtml/kpathsea.html#Subdirectory-expansion) für einen wichtigen Hinweis zur Reihenfolge, in der Unterverzeichnisse auf jeder Ebene durchsucht werden (sie ist nicht spezifiziert).

Wir werden einige Anmerkungen zu `$TEXMF` unten an.

#### $OSFONTDIR//

`$OSFONTDIR` ist eine Variable, deren Wert als Umgebungsvariable definiert sein sollte, die den Speicherort der Schriften enthält: Der genaue Wert hängt natürlich vom Betriebssystem ab, auf dem TeX ausgeführt wird. Beachten Sie, dass hier das abschließende `//` Kpathsea anweist, bei der Suche nach OpenType-Schriften Unterverzeichnisse zu durchsuchen.

Die Standarddefinition von `OSFONTDIR` verwendet wird `texmf.cnf` ist:

```
OSFONTDIR = /please/set/osfontdir/in/the/environment
```

Also ist es auf jeden Fall etwas, das Sie setzen müssen, wenn Sie es verwenden möchten – Ihre Umgebungsvariable überschreibt diese in `texmf.cnf`.

Wenn Sie die Umgebungsvariable setzen `OSFONTDIR` dann kann Kpathsea zur Laufzeit überall dort, wo es `$OSFONTDIR` als Teil eines Pfad-Elements sieht (in `texmf.cnf`) kann es die Variable ersetzen `$OSFONTDIR` durch den tatsächlichen Wert, der in der Umgebungsvariable gespeichert ist `OSFONTDIR`. Denken Sie daran, dass wir bei der Verwendung innerhalb von `texmf.cnf` Pfad-Elementen die Variable `$OSFONTDIR`— mit einem führenden `$`— angeben, um Kpathsea mitzuteilen, dass dies eine Variable ist, deren *Wert* es verwenden muss.

#### Kurze Hinweise zu $TEXMF

`TEXMF` ist eine weitere Konfigurationsvariable, die in `texmf.cnf`definiert ist; zum Beispiel würden Sie in der Haupt-TeX-Live-Distribution Folgendes sehen:

```
TEXMF = {$TEXMFAUXTREES$TEXMFCONFIG,$TEXMFVAR,$TEXMFHOME,!!$TEXMFLOCAL,!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFDIST}
```

Sie müssen sich nicht mit den Details dieser Definition von `TEXMF`befassen – wir werden nicht alle Details untersuchen, sondern nur festhalten, dass die `$TEXMF` Variable innerhalb von Pfad-Elementen verwendet wird, weil sie eine Reihe von Top-Level-Ordnern definiert, die als „texmf trees“ bezeichnet werden), von denen aus Sie mit der Suche nach Dateien beginnen können.

`TEXMF` ist äußerst nützlich, wenn Sie eine TeX-Installation auf mehrere Verzeichnisse (oder Verzeichnis-„Bäume“) aufteilen möchten oder müssen. Zum Beispiel eine Haupt- oder Master-Sammlung von TeX/LaTeX-Paketen (z. B. TeX Live) und eine weitere Sammlung von Dateien und Ordnern zum Speichern lokaler LaTeX-Pakete – oder vielleicht zum Speichern lokaler Konfigurationsdateien oder angepasster Versionen standardmäßiger Pakete. Eine solche Aufteilung der TeX-Installation kann die Verwaltung von Aktualisierungen der Haupt-/Master-Sammlung (Distribution) von TeX/LaTeX-Paketen erleichtern, weil Ihre lokale Sammlung von den Master-Dateien getrennt ist, die beim Aktualisieren Ihrer TeX-Live-Distribution/Installation mit aktualisiert werden.

Für weitere Details zur Verwaltung komplexerer TeX-Installationen wird der interessierte Leser auf diese beiden Arbeiten verwiesen:

* [Verwaltung mehrerer TDS-Bäume](http://tug.org/TUGboat/Articles/tb22-3/tb72downes.pdf) von Michael J. Downes;
* [texmf-Bäume jonglieren](http://www.ntg.nl/maps/27/17.pdf) von Siep Kroonenberg.

#### TeX-Verzeichnisstruktur

Jeder, der eine TeX-Installation verwaltet hat, weiß, dass moderne TeX-Systeme wie TeX Live viele zehntausend Dateien enthalten, die eine enorme Bandbreite an Dateitypen umfassen. Die TeX Directory Structure (TDS) wurde als Best-Practice-„Bauplan“ für die Organisation der riesigen Sammlung von Dateien in einer funktionierenden TeX-Installation entworfen und wird für die Verwendung mit Kpathsea dringend empfohlen.

Für weitere Informationen wird der Leser auf die TDS-Spezifikation verwiesen: [A Directory Structure for TeX Files](https://www.tug.org/tds/tds.pdf).

## Kpathsea-Dateitypen

Die Anwendungs-Suite, die Kpathsea verwendet, muss auf eine breite Palette von Dateitypen zugreifen, daher verwendet Kpathsea eine „Konfigurationsvariable“, um die Pfade für jeden unterstützten Dateityp (oder jede Dateigruppe) zu identifizieren. Die Online-Dokumentation enthält eine vollständige Liste (siehe auch unsere [Zusammenfassungstabelle unten](#table-listing-kpathsea-config-variables)) hier sind jedoch die „Konfigurationsvariablen“ für die gängigeren Dateitypen:

|                            |                                                |
| -------------------------- | ---------------------------------------------- |
| **Konfigurationsvariable** | **Beispiele für Dateitypen**                   |
| TEXINPUTS                  | TeX-Quelldateien und Abbildungs-/Grafikdateien |
| BIBINPUTS, BSTINPUTS       | BibTeX-Bibliographie-Quelldateien              |
| TTFONTS                    | TrueType-Umrissschriften                       |
| OPENTYPEFONTS              | OpenType-Umrissschriften                       |

`TEXINPUTS` ist eine besonders wichtige Konfigurationsvariable, da sie angibt, wo eine TeX-Engine ihre Eingabe-Quelldateien bezieht. Beachten Sie, dass Bilddateien als Eingabedateien gelten und auch mit dem durch `TEXINPUTS`.

### Einige Kpathsea-Details

Wie bereits erwähnt, hat Kpathsea viele Feinheiten, die wir hier nicht im Detail untersuchen können. Hier sind jedoch Funktionen, die einige Leser möglicherweise näher erkunden möchten:

* **Dateinamendatenbank:** Um Festplattenzugriffe zu minimieren, kann Kpathsea eine „extern erstellte [Dateinamendatenbankdatei namens ls-R](http://tug.org/texinfohtml/kpathsea.html#Filename-database) verwenden, die Dateien Verzeichnissen zuordnet“. TeX Live stellt eine solche bereit und bietet Werkzeuge zum Aktualisieren, wenn neue Dateien hinzugefügt werden.
* **Umgebungsvariablen**: Zusätzlich zu „Konfigurationsvariablen“ (wie `OPENTYPEFONTS`) nutzt Kpathsea auch geschickt [Umgebungsvariablen](https://en.wikipedia.org/wiki/Environment_variable); beispielsweise kann der Laufzeitwert von Umgebungsvariablen verwendet werden, um Pfad-Elemente in der `texmf.cnf` Datei zu definieren (möglicherweise, um Variablen mit demselben Namen zu überschreiben, die in `texmf.cnf`).
* **Programmnamen:** Ein subtiler, aber wesentlicher Aspekt des Verhaltens von Kpathsea ist, dass es den Namen des ausführbaren Programms (z. B. der TeX-Engine) verwenden kann, um programspezifische Suchpfadkonstruktionen zu erstellen. Das bietet erhebliche Flexibilität, weil die Pfadsuche auf Dateien für eine bestimmte TeX-Engine ausgerichtet werden kann. Zum Beispiel für LuaTeX/LuaLaTeX:

  ```
  TEXINPUTS.lualatex = .;$TEXMF/tex/{lualatex,latex,luatex,generic,}//
  TEXINPUTS.luatex = .;$TEXMF/tex/{luatex,plain,generic,}//
  ```
* **finden `texmf.cnf`**: Eine Frage, die Sie sich vielleicht stellen, ist: Woher weiß Kpathsea, wo `texmf.cnf` ist gespeichert? Die Antwort ist eine Umgebungsvariable namens `TEXMFCNF`. Diese muss (auf dem Gerät/der Plattform, auf dem/der TeX ausgeführt wird) auf den Pfad gesetzt werden, unter dem `texmf.cnf` es gespeichert ist.

#### Kpathsea-Probleme debuggen

Overleaf-Nutzer werden diese Funktionen wahrscheinlich nicht benötigen, aber der Vollständigkeit halber führen wir sie auf:

* **kpsewhich**: Ein eigenständiges Programm (in TeX Live enthalten), das zum Testen Ihrer Einstellungen verwendet werden kann: Werte von Variablen ermitteln und Dateien finden. Interessierte Leser werden auf die [Online-Dokumentation](http://tug.org/texinfohtml/kpathsea.html#Invoking-kpsewhich) für weitere Informationen.
* **Umgebungsvariablen**: Kpathsea unterstützt eine Umgebungsvariable namens [`KPATHSEA_DEBUG`](http://www.tug.org/texinfohtml/kpathsea.html#Debugging) zur Unterstützung beim Debuggen seines Verhaltens. Sie können `KPATHSEA_DEBUG` auf verschiedene Werte setzen, je nachdem, wie viele Debug-Informationen Sie benötigen. Das Setzen von `KPATHSEA_DEBUG=-1` erzeugt eine *beträchtliche* Menge an Daten.

## Und schließlich: Ordner, Grafikdateien und latexmkrc

Wie hängt das also mit latexmkrc zusammen? Wenn Sie diesen Artikel lesen [Wie man latexmkrc mit Overleaf verwendet: Beispiele und Techniken](/latex/de/ausfuhrliche-artikel/28-how-to-use-latexmkrc-with-overleaf.md) sehen Sie, dass der (Perl-)Code im latexmkrc-Beispiel den Wert einer Umgebungsvariable setzt `TEXINPUTS`:

```
$ENV{'TEXINPUTS'}='./tex//:' . $ENV{'TEXINPUTS'};
```

Beachten Sie, dass der hier verwendete Doppelpunkt (`./tex//**:**`) ist *extrem* wichtig ist. Wenn Sie diesen Doppelpunkt weglassen, kann TeX/LaTeX möglicherweise wichtige Systemdateien, wie etwa LaTeX-Pakete, nicht finden!

Was diese latexmkrc-Datei im Grunde tut, ist, einen Pfad zu einem Top-Level-Ordner hinzuzufügen (`./tex` im obigen Beispiel) zur systemdefinierten `TEXINPUTS` Umgebungsvariable hinzuzufügen, sodass Kpathsea, wenn es die Variable verwendet `$TEXINPUTS` weiß, dass der Ordner `/tex//` durchsucht werden sollte, um Eingabedateien zu finden. Wenn Sie genau hinschauen, sehen Sie, dass der tatsächlich verwendete Pfad `./tex//:` Der Stil `//` weist Kpathsea an, den tex-Ordner rekursiv zu durchsuchen – also in alle Unterordner zu schauen, die sich in dem `tex` Ordner befinden. Wie erwähnt, haben wir auch das wichtige Doppelpunktzeichen hinzugefügt.

Wir können genau dieselbe Technik für Grafikdateien verwenden.

### Eine Anmerkung zu BibTeX

Wie bereits erwähnt, verwendet auch das BibTeX-Programm Kpathsea, um nach seinen Eingabedateien zu suchen; insbesondere:

* Der Stil `BSTINPUTS` Konfigurationsvariable (Suchpfad) wird verwendet, um nach `.bst` Dateien zu suchen;
* und `BIBINPUTS` Konfigurationsvariable (Suchpfad) wird verwendet, um nach `.bib` Dateien vorbereitet.

Wenn Sie neue `.bst` oder `.bib` Dateien zu Ihrem Overleaf-Projekt hinzufügen, können Sie die folgende Technik verwenden, um BibTeX mitzuteilen, wo diese Dateien zu finden sind – Sie müssen `TEXINPUTS` mit `BSTINPUTS` und/oder `BIBINPUTS`.

### TEXINPUTS und die Verwendung verschachtelter Ordner für Grafikdateien

Wenn Ihr Projekt viele Grafikdateien enthält, kann es praktisch sein, eine Reihe von Ordnern zu erstellen, in denen Sie sie speichern und verwalten. Der folgende Screenshot zeigt beispielsweise einen Abschnitt eines Overleaf-Projekts, der einen Top-Level-Ordner namens **`Grafiken`**:

![Abbildung, die verschachtelte Ordner in einem Overleaf-Projekt zeigt](/files/a825442ce754644644a951aad57948cc62c0ce13)

Es gibt zahlreiche (verschachtelte) Unterordner mit Grafiken für verschiedene Abschnitte unseres Dokuments.

Nehmen wir an, wir haben die obige Ordnerstruktur und möchten die `graphicx` Paket (`\usepackage{graphicx}`) und versuchen, dies so zu tun:

```latex
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics{endlinechar}% bewährte Praxis ist es, die Dateierweiterung nicht zu verwenden
\end{document}
```

Das funktioniert nicht und Sie erhalten einen Fehler wie diesen:

```
! LaTeX-Fehler: Datei `endlinechar' nicht gefunden.
l.4 \includegraphics{endlinechar}
Ich konnte die Datei mit keiner dieser Erweiterungen finden:
.pdf,.PDF,.ai,.AI,.png,.PNG,.jpg,.JPG,.jpeg,.JPEG,.jp2,.JP2,.jpf,.JPF,.bmp,.BMP,
,.ps,.PS,.eps,.EPS,.mps,.MPS,.pz,.eps.Z,.ps.Z,.ps.gz,.eps.gz
```

Dieser Fehler tritt auf, weil unsere Grafikdatei an einem Ort gespeichert ist, den TeX/LaTeX (und Kpathsea) nicht kennt und daher nicht finden kann – der Pfad zur Grafikdatei lautet:

```
./graphics/Introduction/Chapter1/Section1/Subsection3/endlinechar.png
```

**Hinweis**: Es gilt allgemein als bewährte Praxis, ***Leerzeichen in den Ordnernamen zu vermeiden***. Zwar ist es durchaus möglich, Leerzeichen in Ordnernamen zu verwenden, wenn man die unten besprochenen Techniken anwendet, doch würden wir aus Gründen der Portabilität des Dokuments außerhalb der Overleaf-Plattform davon abraten.

Wie in diesem [Overleaf-Hilfsartikel](/latex/de/weitere-themen/27-inserting-images.md) können Sie natürlich Ordner verwenden, um Ihre Grafiken zu speichern, aber Sie müssen LaTeX mitteilen, wo sie gespeichert sind. Hier betrachten wir zwei Lösungen:

* Verwendung des Befehls \graphicspath;
* Verwendung unseres Wissens über Kpathsea und `TEXINPUTS`.

### Verwendung von \graphicspath

Die `graphicx` Paket stellt den `\graphicspath` Befehl, mit dem Sie Pfade deklarieren können, in denen sich Ihre Grafiken befinden; wir könnten also so etwas tun:

```latex
\graphicspath{{./graphics/Introduction/Chapter1/Section1/Subsection3/}}
```

und LaTeX findet nun alle unter diesem Pfad gespeicherten Grafiken.

**Hinweis**: Wenn Sie *muss* Leerzeichen in Ordnernamen haben, müssen Sie die Pfade in doppelte Anführungszeichen setzen (`"..."`):

```latex
\graphicspath{{"./graphics/Introduction/Chapter 1/Section 1/Subsection 3/"}}
```

**Hinweis**: Sie können mehrere Pfade so angeben:

```latex
\graphicspath{{path1}{path2}{path3}...{pathN}}
```

wobei `...` bedeutet zusätzliche Pfade, die in geschweifte Klammern eingeschlossen sind.

**Hinweis**: Wir beginnen den Pfad mit `./graphics` und nicht nur mit `/graphics`. Der Punkt (.) teilt dem Betriebssystem mit, dass der Pfad relativ zum aktuellen Arbeitsverzeichnis ist.

Die `\graphicspath` Befehl funktioniert gut, aber wenn Sie viele Ordner haben, kann es recht mühsam werden, jeden Pfad hinzuzufügen; außerdem würden Pfade, die über `\graphicspath` nicht mehr funktionieren, wenn Sie die Ordner umbenennen oder neu strukturieren. Gibt es einen einfacheren Weg? Ja, Sie können eine latexmkrc-Datei verwenden!

#### \graphicspath und Rekursion (Unterverzeichnisse)

Beachten Sie, dass es Online-Diskussionen/-Debatten darüber gibt, ob einige Systeme `\graphicspath` die rekursive Suche in Unterverzeichnissen unterstützen/ermöglichen, wenn Sie `//` am Ende des Pfads hinzufügen: Siehe zum Beispiel diese Diskussionen auf tex.stackexchange:

* [Rekursive Suche mit LaTeX \graphicspath](https://tex.stackexchange.com/questions/25443/latex-graphicspath-recursive-search);
* [Graphicspath für MikTeX](https://tex.stackexchange.com/questions/3131/graphicspath-for-miktex).

Für die größtmögliche Kompatibilität sollten Sie davon ausgehen, dass `\graphicspath` die rekursive Verzeichnissuche nicht unterstützt.

### Kpathsea und TEXINPUTS (latexmkrc-Datei zur Rettung)

**HINWEIS:** Beachten Sie, dass die folgende Technik auf Overleaf und passend konfigurierten lokalen TeX-Installationen gut funktioniert; **aber** wenn Sie eine latexmkrc-Datei verwenden, kann Ihr Projekt mit anderen TeX-Installationen inkompatibel werden, etwa mit denen, die von Verlagen und Online-Systemen zur Einreichung von Fachzeitschriften verwendet werden. Drittanbieter-TeX-Installationen unterstützen die Verwendung von latexmkrc möglicherweise oder auch nicht. Wenn Sie Ihr Overleaf-Projekt für die Verwendung anderswo exportieren müssen oder es bei einer Zeitschrift einreichen möchten, sollten Sie alle Leerzeichen aus den Pfadnamen entfernen und zur besseren Kompatibilität einen `\graphicspath` Befehl hinzufügen, der alle Pfade definiert:

```latex
\graphicspath{{path1}{path2}{path3}...{pathN}}
```

wobei `...` bedeutet zusätzliche Pfade, die in geschweifte Klammern eingeschlossen sind.

Die unten besprochene Technik (unter Verwendung von `TEXINPUTS`) wurde auf Overleaf mit den Engines pdfTeX, XeTeX und LuaTeX erfolgreich getestet (d. h. den Compiler-Optionen pdfLaTeX, XeLaTeX und LuaLaTeX im Overleaf-Menü):

![Abbildung, die zeigt, wie man den LaTeX-Compiler auf Overleaf auswählt](/files/d0024226322f7f60205f86a9f51cd4ef0a8d9f6a)

Zurück zu unserem Beispiel: Wir möchten diesen Code (mit tief verschachtelten Ordnern) verwenden, und wir werden dafür eine latexmkrc-Datei einsetzen:

```latex
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics{endlinechar}% bewährte Praxis ist es, die Dateierweiterung nicht zu verwenden
\end{document}
```

Hier ist ein Screenshot, der zeigt, dass der obige Code problemlos funktioniert: LaTeX hat unsere Grafikdatei (`endlinechar.png`) gefunden, obwohl sie sich in einer tief verschachtelten Ordnerstruktur befindet (ohne Leerzeichen in den Ordnernamen).

![Abbildung, die zeigt, wie ein Projekt mit verschachtelten Ordnern auf Overleaf kompiliert wird](/files/2996fcde4eabdca9af8885dce6c5354191fbcfd4)

Wie haben wir das also gemacht? Sie müssen lediglich:

* eine neue Datei ohne Erweiterung erstellen und sie latexmkrc nennen;
* die folgende Zeile zu dieser Datei hinzufügen:

  ```
  $ENV{'TEXINPUTS'}='./graphics//:'.$ENV{'TEXINPUTS'};
  ```

Kpathsea kennt nun die unter `**graphics**` und aufgrund des `//` wird es auch in die Unterordner schauen.

Beachten Sie erneut, dass der Doppelpunkt in `./graphics//:` ist eigentlich *extrem* wichtig ist. Wenn Sie diesen Doppelpunkt weglassen, kann TeX/LaTeX möglicherweise wichtige Systemdateien, wie etwa LaTeX-Pakete, nicht finden!

Anhand des obigen einfachen Projektbeispiels können Sie es jetzt kompilieren, und voilà! LaTeX findet Ihre Grafikdatei — und Sie können die Ordner unter /graphics umbenennen oder neu organisieren, ohne dass LaTeX sie nicht mehr findet.

## Tabelle mit den Kpathsea-„Konfigurationsvariablen“

Die folgende Tabelle ist eine Zusammenfassung, die aus [den in der Kpathsea-Dokumentation aufgeführten Daten](http://tug.org/texinfohtml/kpathsea.html#Supported-file-formats).

|                                                     |                                                                                     |                                |
| --------------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------ |
| **Kpathsea-Konfigurationsvariable**                 | **Beschreibung des Dateityps**                                                      | **Dateiendung**                |
| AFMFONTS                                            | Adobe-Schriftmetriken                                                               | .afm                           |
| MFBASES, TEXMFINI                                   | Metafont-Speicherabbild                                                             | .base                          |
| BIBINPUTS, TEXBIB                                   | BibTeX-Bibliographiequelle                                                          | .bib                           |
| BLTXMLINPUTS                                        | BibLaTeXML-Bibliographiedateien für Biber                                           | .bltxml                        |
| BSTINPUTS                                           | BibTeX-Stil                                                                         | .bst                           |
| CLUAINPUTS                                          | dynamische Bibliotheken für Lua                                                     | .dll und .so                   |
| CMAPFONTS                                           | Zeichenzuordnungsdateien                                                            | .cmap                          |
| TEXMFCNF                                            | Laufzeit-Konfigurationsdateien                                                      | .cnf                           |
| CWEBINPUTS                                          | CWEB-Eingabedateien                                                                 | .w, .web, .ch                  |
| TEXCONFIG                                           | Dvips-‚config.\*‘-Dateien, wie z. B. config.ps                                      |                                |
| ENCFONTS                                            | Kodierungsvektoren                                                                  | .enc                           |
| TEXFORMATS, TEXMFINI                                | TeX-Speicherabbild                                                                  | .fmt                           |
| FONTCIDMAPS                                         | CJK-Zuordnung                                                                       | .cid                           |
| FONTFEATURES                                        | hauptsächlich für OpenType-Schriftmerkmale                                          | .fea                           |
| FONTS, GFFONTS, GLYPHFONTS, TEXFONTS                | generische Schrift-Bitmap                                                           | .gf                            |
| TEXPICTS, TEXINPUTS                                 | eingebettete PostScript-Grafiken                                                    | .eps, .epsi                    |
| TEXINDEXSTYLE, INDEXSTYLE                           | makeindex-Stildateien                                                               | .ist                           |
| LIGFONTS                                            | Ligaturdefinitionsdateien                                                           | .lig                           |
| TEXMFDBS                                            | Dateinamendatenbanken                                                               |                                |
| TEXFONTMAPS                                         | Schriftzuordnungen                                                                  | .map                           |
| MPMEMS, TEXMFINI                                    | MetaPost-Speicherabbild                                                             | .mem                           |
| MPSUPPORT                                           | MetaPost-Unterstützungsdateien, verwendet von DMP                                   |                                |
| MFINPUTS                                            | Metafont-Quelltext                                                                  | .mf                            |
| MFPOOL, TEXMFINI                                    | Metafont-Programmzeichenketten                                                      | .pool                          |
| MFTINPUTS                                           | MFT-Stildatei                                                                       | .mft                           |
| MISCFONTS                                           | schriftbezogene Dateien, die in keine der anderen Kategorien passen                 |                                |
| MLBIBINPUTS, BIBINPUTS, TEXBIB                      | MlBibTeX-Bibliographiequelle                                                        | .mlbib, .mlbib                 |
| MLBSTINPUTS, BSTINPUTS                              | MlBibTeX-Stil                                                                       | .mlbst, .bst                   |
| MPINPUTS                                            | MetaPost-Quelltext                                                                  | .mp                            |
| MPPOOL, TEXMFINI                                    | MetaPost-Programmzeichenketten                                                      | .pool                          |
| OCPINPUTS                                           | kompilierte Omega-Prozessdateien                                                    | .ocp                           |
| OFMFONTS, TEXFONTS                                  | Omega-Schriftmetriken                                                               | .ofm, .tfm                     |
| OPENTYPEFONTS                                       | OpenType-Schriftarten                                                               |                                |
| OPLFONTS, TEXFONTS                                  | Omega-Property-Listen                                                               | .opl                           |
| OTPINPUTS                                           | Omega-Übersetzungsprozessdateien                                                    | .otp                           |
| OVFFONTS, TEXFONTS                                  | Omega-virtuelle Schriftarten                                                        | .ovf                           |
| OVPFONTS, TEXFONTS                                  | Omega-virtuelle Property-Listen                                                     | .ovp                           |
| PDFTEXCONFIG                                        | PDFTeX-spezifische Konfigurationsdateien                                            |                                |
| PROGRAMFONTS, PKFONTS, TEXPKS, GLYPHFONTS, TEXFONTS | komprimierte Bitmap-Schriften                                                       | .pk                            |
| TEXPSHEADERS, PSHEADERS                             | herunterladbares PostScript                                                         | .pro                           |
| RISINPUTS                                           | RIS-Bibliographiedateien, hauptsächlich für Bibe                                    | .ris                           |
| SFDFONTS                                            | Unterschriftdefinitionsdateien                                                      | .sfd                           |
| TEXINPUTS                                           | TeX-Quelltext                                                                       | .tex                           |
| TEXDOCS                                             | Dokumentationsdateien für das TeX-System                                            |                                |
| TEXSOURCES                                          | Quelldateien für das TeX-System                                                     |                                |
| TEXMFSCRIPTS                                        | Architekturunabhängige ausführbare Dateien, die in den texmf-Bäumen verteilt werden |                                |
| TEXPOOL, TEXMFINI                                   | TeX-Programmzeichenketten                                                           | .pool                          |
| TFMFONTS, TEXFONTS                                  | TeX-Schriftmetriken                                                                 | .tfm                           |
| TRFONTS                                             | Troff-Schriften                                                                     |                                |
| TTFONTS                                             | TrueType-Umrissschriften                                                            | .ttf, ,TTF, .ttc, .TTC, .dfont |
| T1FONTS, T1INPUTS, TEXPSHEADERS, DVIPSHEADERS       | Type-1-PostScript-Umrissschriften                                                   | .pfa, .pfb                     |
| T42FONTS                                            | PostScript-Umrissschriften vom Typ 42                                               |                                |
| VFFONTS, TEXFONTS                                   | virtuelle Schriftarten                                                              | .vf                            |
| WEBINPUTS                                           | WEB-Eingabedateien                                                                  | .web, .ch                      |
| WEB2C                                               | Dateien, die speziell für die web2c-Implementierung sind                            |                                |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/de/ausfuhrliche-artikel/06-an-introduction-to-kpathsea-and-how-tex-engines-search-for-files.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
