> 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/da/dybtgaende-artikler/06-an-introduction-to-kpathsea-and-how-tex-engines-search-for-files.md).

# En introduktion til Kpathsea, og hvordan TeX-motorer søger efter filer

## Introduktion

Denne artikel giver en introduktion til, hvordan TeX-motorer finder de filer, der er nødvendige for at sætte dit dokument op—ved hjælp af LaTeX eller en anden makropakke. Selvom Overleaf befrier brugerne fra udfordringerne ved at administrere en TeX-installation ([TeX Live](https://www.tug.org/texlive/)), vil de grundlæggende principper for, hvordan TeX-motorer søger efter filer, være nyttige/interessante, hvis du vil oprette en mappestruktur for at hjælpe med at administrere dit Overleaf-projekt.

Hvorfor kunne det være sandt? Hvis du gemmer nogle af dine Overleaf-projektfiler inde i mapper, så finder LaTeX måske ikke disse filer, fordi TeX-motoren (kompileren) som standard måske ikke *ved* at den skal søge i disse mapper—og derfor ikke finder de filer, de indeholder. For at undgå dette kan du oprette og tilføje en konfigurationsfil til dit projekt kaldet en [latexmkrc-fil](https://mg.readthedocs.io/latexmk.html#configuration-files) som kan bruges til at fortælle en TeX-motor, at dine mapper findes, og at den skal søge i dem.

Hvis du vil springe direkte til et eksempel, der viser en latexmkrc-fil, kan du læse denne hjælpeartikel: [Sådan bruger du latexmkrc med Overleaf: eksempler og teknikker](/latex/da/dybtgaende-artikler/28-how-to-use-latexmkrc-with-overleaf.md). Det er måske ikke umiddelbart klart, hvordan eller hvorfor den latexmkrc-fil faktisk virker. Hvis du gerne vil vide hvorfor og måske få en bedre forståelse af, hvordan den kan bruges til yderligere konfigurationsmuligheder for dit projekt, så læs videre... I slutningen af denne artikel gennemgår vi et [praktisk eksempel](#kpathsea-and-texinputs-latexmkrc-file-to-the-rescue)—hvor vi bruger vores viden om, hvordan TeX søger efter filer—til at oprette en latexmkrc-fil til at håndtere indlejrede mapper, der indeholder dine grafikfiler.

## TeX og platformsuafhængighed

Da Knuth skabte TeX, var platformsuafhængighed et centralt princip, der styrede dets design og implementering, og den filosofi afspejles i hele TeX’s interne funktioner (f.eks. brug af heltalsaritmetik, "hjemmelavet" strenghåndtering, hukommelsesstyring osv.). Selv i dag rejser platformsuafhængigheden for moderne TeX-baserede motorer stadig spørgsmål og debat på offentlige fora; se for eksempel denne diskussion på tex.stackexchange: [Er XeTeX og LuaTeX platformafhængige?](https://tex.stackexchange.com/questions/94297/are-xetex-and-luatex-platform-dependent) som indeholder kommentarer og observationer fra en række kendte TeX-eksperter.

Men lad os foreløbig lægge de finere detaljer til side og bemærke, at TeX-motorer stadig skal være meget bærbare—i stand til at virke på flere operativsystemer og producere "identiske" resultater. Et nøgleaspekt ved bærbarhed er at søge efter filer på en platformsuafhængig måde.

## TeX-motorer søger ikke efter filer… virkelig!?

Nej, TeX-motorer *direkte* søger ikke efter filer *af sig selv*. Når en `.tex` fil behandles, kan en TeX-motor identificere behovet for at åbne en bestemt fil, men den *overdrager* opgaven med at finde den til et andet stykke software kaldet [*Kpathsea*](https://tug.org/kpathsea/): et eksternt softwarebibliotek, som ikke er en del af TeX-motorernes *kerne* kildekode. Det, Kpathsea i praksis leverer, er en API ([Application Programming Interface](https://en.wikipedia.org/wiki/Application_programming_interface)) som TeX-motorer (plus BibTeX, MetaPost og andre programmer) kan kalde, når de har brug for at åbne en bestemt fil: Kpathsea udfører det faktiske arbejde med at finde den fil.

Da Knuth skrev den oprindelige TeX-motor—hvorfra alle andre TeX-motorer i sidste ende er nedstammet—var problemet med at finde/åbne filer en betydelig udfordring, delvist på grund af datidens meget forskellige teknologiske økosystem. Faktisk omtaler Knuth i TeX’s kildekode filinput/-output som "portabilitetens plage" (se side 12, afsnit 25 i [TeX: The Program](https://www.amazon.co.uk/Computers-Typesetting-TeX-Program-TEX/dp/0201134373)).

TeX-fællesskabet erkendte behovet for at harmonisere (standardisere) filsøgning for TeX—*og TeX-relateret software*—og besluttede at give TeX værktøjerne til at gøre det. For at løse det meget vanskelige problem med en platformsuafhængig metode til at finde filer skrev Karl Berry, et fremtrædende medlem af TeX-fællesskabet, softwaren til at løse *sti*-søgningsproblemet: en løsning han kaldte [**Kpathsea**](http://tug.org/texinfohtml/kpathsea.html)—som er afledt af **K**arls **Path** **Sea**rching (se dette [interview med Karl Berry](http://www.tug.org/interviews/berry.html)).

Vi kan bemærke, at det hedder K**sti**sea og ikke K**fil**sea, fordi, som [dokumentationen](http://tug.org/texinfohtml/kpathsea.html) bemærker, er det et \*sti-\*søgebibliotek. Det er vigtigt at erkende, at Kpathsea ikke kun bruges af TeX-motorer; forskellige TeX-relaterede programmer, herunder BibTeX og MetaPost, bruger også Kpathsea til at søge efter inputfiler.

Overordnet set, når TeX/LaTeX-makroer skal åbne en bestemt fil, vil de kommandoer, som disse makroer er bygget af, i sidste ende blive omdannet til lavniveau TeX-instruktioner (TeX-primitiver), som TeX-motorer faktisk udfører. Hvis disse instruktioner indeholder behovet for at åbne en fil, vil TeX-motoren kalde på Kpathsea og i praksis sige: "find venligst denne fil"; hvis søgningen i Kpathsea lykkes, åbnes filen. Men hvis Kpathsea ikke kan finde filen, vil TeX-motoren blive informeret om det og stoppe eksekveringen for at udstede den berygtede fejl ``! Jeg kan ikke finde filen `...'`` Sandheden er, at Kpathsea ikke kan finde den.

### Noter om LuaTeX

Strengt taget bør vi tage det forbehold i dette afsnit ved at bemærke, at LuaTeX faktisk tilbyder en mekanisme, hvor brugeren kan levere sin egen kode til filsøgning ved hjælp af *tilbageskaldsfunktioner*. LuaTeX gør det muligt for brugere at skrive funktioner i scriptsproget Lua og registrere dem hos LuaTeX, så det vil kalde den brugerdefinerede funktion på bestemte stadier under LuaTeX’s eksekvering—deraf betegnelsen *tilbageskaldsfunktioner*. Det er en meget kraftfuld teknik, og den interesserede læser kan finde mere information i afsnit 9 i [LuaTeX Reference Manual](http://www.pragma-ade.com/general/manuals/luatex.pdf) (på skrivestidspunktet fører dette link til LuaTeX 1.09).

### Kpathsea-konfigurationsfilen: texmf.cnf

Hver TeX-installation indeholder en tekstfil kaldet `texmf.cnf` som er en konfigurationsfil, der bruges af Kpathsea: den indeholder talrige "configvariabler", som definerer de stier, som Kpathsea vil bruge til at søge efter forskellige typer filer, som TeX-motorer (eller BibTeX, MetaPost osv.) måtte have brug for. Som vi vil se nedenfor, definerer disse "configvariabler" søgestier, der er konstrueret ud fra såkaldte *stielementer*: ved hjælp af forskellige konstruktioner, variabler og parametre til at definere hvert stielement som en "skabelon", som Kpathsea behandler for at generere de faktiske, fysiske mapper, der skal søges i.

For at give et konkret eksempel er her en sådan configvariabel, som definerer søgestierne for OpenType-skrifttyper—for nu skal du ikke bekymre dig om betydningen af denne stis opbygning:

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

Det eneste vigtige her er, at filen `texmf.cnf` (læst af Kpathsea) definerer en configvariabel kaldet `OPENTYPEFONTS` som bruges til at definere den/de sti(er), som Kpathsea vil bruge til at søge efter OpenType-skrifttyper. Højre side af "=" ligner ikke nogen sti, du ser på en typisk enhed, fordi den er konstrueret ved hjælp af forskellige variabler og parametre til at definere hver sti som en "skabelon" eller "blåtryk", som Kpathsea vil bruge til at generere rigtige mapper at søge i.

### Kpathseas begreb om en "sti"

Det måske centrale begreb at forstå er Kpathseas opfattelse af en "sti": den grundlæggende konstruktion, som Kpathsea bruger til at finde ud af, hvor en bestemt fil befinder sig. Som vi så i `OPENTYPEFONTS` eksemplet ovenfor, ser Kpathseas opfattelse af en sti meget anderledes ud end de stier, vi er vant til at bruge på vores stationære eller bærbare enheder.

For at citere fra Kpathseas [dokumentationen](http://tug.org/texinfohtml/kpathsea.html#Searching-overview):

> ... en *søgesti* er en kolonsepareret liste over *stielementer*, som er katalognavne med et par "ekstra finesser".

—men bemærk, at et semikolon (`;`) bruges også til at adskille *stielementer*. Senere vil vi kort angive karakteren af nogle af disse "ekstra finesser".

I vores `OPENTYPEFONTS` eksempel er der tre stielementer, som hver er afgrænset med semikolon (`;`):

![Billede, der viser de stielementer, der findes i en Kpathsea-stidefinition](/files/4099d5f441deb03e131e2c51845e0eeb88e7d4b2)

1. `.` (hvilket betyder den aktuelle mappe)
2. `$TEXMF/fonts/{opentype,truetype}//`
3. `$OSFONTDIR//`

Bemærk, at en dobbelt skråstreg (`//`) i et stielement betyder søg i undermapper (rekursivt).

En typisk `texmf.cnf` fil vil indeholde talrige "configvariabler" til at definere søgestier for de filtyper, som Kpathsea kan søge efter.

## Kpathsea: En meget kort oversigt

Kpathsea er et sofistikeret bibliotek—med mange fine detaljer og nuancer—og selv et kort blik på dets [dokumentationen](http://tug.org/texinfohtml/kpathsea.html) gør det klart, at vi ikke kan gå i dybden med alle detaljer. Men vi kan forsøge at give

### Kpathseas kerneformål

Som dokumentationen bemærker, er Kpathseas grundlæggende formål "at returnere et filnavn fra en liste af mapper angivet af brugeren", og at disse mapper (søgestier) angives ved hjælp af "et par ekstra finesser".

### Disse "ekstra finesser"

De "få ekstra finesser", der er nævnt ovenfor, omfatter forskellige parametre og variabler, som Kpathsea bruger til at konstruere sine søgestier (eller "sti-skabeloner"), så den kan definere stier på en mere generel måde. Når en TeX-motor faktisk kører (eksekverer), kan Kpathsea bruge den aktuelle værdi af disse parametre/variabler til at udregne de faktiske stier ved at erstatte disse variabler med deres faktiske (køretids-)værdier. Du kan nemt identificere disse variabler (i stielementer), fordi de starter med et `$` tegn.

Således siger vi, at Kpathsea *udvider* et stielement, hvilket betyder, at den omdanner disse parametre og variabler: den gør en sti "skabelon" til det/dem faktiske navn(e) på en eller flere fysiske mapper, hvor der skal søges efter en fil. Dette giver en stor fleksibilitet og betyder, at Kpathsea kan konstruere en liste af mapper svarende til et enkelt stielement—for eksempel hvis den får besked på at søge i undermapper.

### Vores OpenType-eksempel genbesøgt

Vi vil samle de forskellige tråde og undersøge `OPENTYPEFONTS` i lidt flere detaljer:

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

Lad os betragte de to stielementer `$TEXMF/fonts/{opentype,truetype}//` og `$OSFONTDIR//`. Her bemærker Kpathsea brugen af klammer `{...}` og behandler `$TEXMF/fonts/{opentype,truetype}` som repræsentation for *to* stielementer:

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

og at de *undermapper* i begge disse stielementer også skal søges i (angivet ved det afsluttende `//`).

**Bemærk**: Se Kpathsea-dokumentationen om [udvidelse af undermapper](http://tug.org/texinfohtml/kpathsea.html#Subdirectory-expansion) for et vigtigt forbehold vedrørende rækkefølgen, hvori undermapper på ethvert niveau gennemsøges (den er ikke specificeret).

Vi vil komme med nogle få observationer om `$TEXMF` nedenfor.

#### $OSFONTDIR//

`$OSFONTDIR` er en variabel, hvis værdi bør defineres som en miljøvariabel, der indeholder placeringen, hvor skrifttyper er gemt: den nøjagtige værdi afhænger naturligvis af det operativsystem, der bruges til at køre TeX. Bemærk, at det afsluttende `//` instruerer Kpathsea i at søge i undermapper, når der søges efter OpenType-skrifttyper.

Standarddefinitionen af `OSFONTDIR` i `texmf.cnf` er:

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

Så det er bestemt noget, du skal sætte, hvis du vil bruge det—din miljøvariabel vil tilsidesætte denne "pladsholder"-definition, der findes i `texmf.cnf`.

Hvis du sætter miljøvariablen `OSFONTDIR` så kan Kpathsea ved kørselstid, hvor den end ser `$OSFONTDIR` som en del af et stielement (i `texmf.cnf`) kan den erstatte variablen `$OSFONTDIR` med den faktiske værdi, der er gemt i miljøvariablen `OSFONTDIR`. Husk, at når du bruger det inden for `texmf.cnf` stielementer, angiver vi variablen `$OSFONTDIR`—med et foranstillet `$`—for at fortælle Kpathsea, at dette er en variabel, hvis *værdi* den skal bruge.

#### Korte noter om $TEXMF

`TEXMF` er en anden configvariabel, der er defineret i `texmf.cnf`; for eksempel ville du i den primære TeX Live-distribution se:

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

Du behøver ikke at bekymre dig om detaljerne i denne definition af `TEXMF`—vi vil ikke udforske alle detaljerne, men blot bemærke, at `$TEXMF` variablen bruges i stielementer, fordi den definerer en række mapper på øverste niveau (kaldet "texmf-træer"), hvorfra du kan starte søgningen efter filer.

`TEXMF` er yderst nyttig, hvis du ønsker eller har brug for at splitte en TeX-installation på tværs af flere mapper (eller mappe-"træer"). For eksempel en hovedsamling eller master-samling af TeX/LaTeX-pakker (f.eks. TeX Live) og en anden samling af filer og mapper, der bruges til at gemme lokale LaTeX-pakker—eller måske bruges til at gemme lokale konfigurationsfiler eller tilpassede versioner af standardpakker. At opdele TeX-installationen på denne måde kan gøre det lettere at håndtere opgraderingen af hoved-/master-samlingen (distributionen) af TeX/LaTeX-pakker, fordi din lokale samling er adskilt fra master-filerne, som opdateres, når du opgraderer din TeX Live-distribution/-installation.

For yderligere detaljer om håndtering af mere komplekse TeX-installationer henvises den interesserede læser til disse to artikler:

* [Håndtering af flere TDS-træer](http://tug.org/TUGboat/Articles/tb22-3/tb72downes.pdf) af Michael J Downes;
* [At jonglere med texmf-træer](http://www.ntg.nl/maps/27/17.pdf) af Siep Kroonenberg.

#### TeX-mappestruktur

Alle, der har administreret en TeX-installation, ved, at moderne TeX-systemer, såsom TeX Live, indeholder mange titusinder af filer, der omfatter et stort udvalg af filtyper. TeX Directory Structure (TDS) blev designet som et best practice-"blåtryk" til at organisere den store samling af filer i en fungerende TeX-installation og anbefales kraftigt til brug sammen med Kpathsea.

For yderligere information henvises læseren til TDS-specifikationen: [En mappestruktur til TeX-filer](https://www.tug.org/tds/tds.pdf).

## Kpathsea-filtyper

Suiten af programmer, der bruger Kpathsea, skal have adgang til et bredt udvalg af filtyper, så Kpathsea bruger en "configvariabel" til at identificere sti(er) for hver filtype (eller gruppe af filer), den understøtter. Online-dokumentationen har en komplet liste (se også vores [oversigtstabel nedenfor](#table-listing-kpathsea-config-variables)) men her er "configvariablerne" for de mere almindelige filtyper:

|                            |                                      |
| -------------------------- | ------------------------------------ |
| **Konfigurationsvariabel** | **Eksempler på filtyper**            |
| TEXINPUTS                  | TeX-kildefiler og figur-/grafikfiler |
| BIBINPUTS, BSTINPUTS       | BibTeX-bibliografikildfiler          |
| TTFONTS                    | TrueType-omridsfonte                 |
| OPENTYPEFONTS              | OpenType-omridsfonte                 |

`TEXINPUTS` er en særligt vigtig configvariabel, fordi den angiver, hvor en TeX-motor henter sine inputkildefiler. Bemærk, at billedfiler betragtes som inputfiler og også kan søges efter ved hjælp af stien defineret af `TEXINPUTS`.

### Nogle Kpathsea-nuancer

Som nævnt har Kpathsea mange nuancer, som vi ikke kan udforske i detaljer her. Her er dog funktioner, som nogle læsere måske vil undersøge:

* **filnavnedatabase:** For at minimere disksøgninger kan Kpathsea gøre brug af en "eksternt bygget [filnavnedatabasefil ved navn ls-R](http://tug.org/texinfohtml/kpathsea.html#Filename-database) der kortlægger filer til mapper". TeX Live leverer en sådan samt værktøjerne til at opdatere den, hvis der tilføjes nye filer.
* **miljøvariabler**: Ud over "configvariabler" (såsom `OPENTYPEFONTS`) gør Kpathsea også smart brug af [miljøvariabler](https://en.wikipedia.org/wiki/Environment_variable)miljøvariabler; for eksempel kan miljøvariablers køretidsværdi bruges til at definere stielementer i `texmf.cnf` filen (eventuelt for at tilsidesætte variabler med samme navn, som er defineret i `texmf.cnf`).
* **programnavn:** Et subtilt, men essentielt aspekt af Kpathseas adfærd er, at den kan bruge navnet på det eksekverbare program (f.eks. TeX-motoren) til at konstruere programspecifikke søgesti-konstruktioner. Det giver betydelig fleksibilitet, fordi stisøgning kan rettes mod filer for en bestemt TeX-motor. For eksempel for LuaTeX/LuaLaTeX:

  ```
  TEXINPUTS.lualatex = .;$TEXMF/tex/{lualatex,latex,luatex,generic,}//
  TEXINPUTS.luatex = .;$TEXMF/tex/{luatex,plain,generic,}//
  ```
* **at finde `texmf.cnf`**: Et spørgsmål, du måske stiller, er, hvordan Kpathsea ved, hvor `texmf.cnf` er gemt? Svaret er en miljøvariabel kaldet `TEXMFCNF`. Denne skal sættes (på den enhed/platform, der kører TeX) til stien, hvor `texmf.cnf` er gemt.

#### Fejlfinding af Kpathsea-problemer

Brugere af Overleaf får næppe brug for disse funktioner, men vi oplister dem for fuldstændighedens skyld:

* **kpsewhich**: Et selvstændigt program (inkluderet i TeX Live), der kan bruges til at teste dine indstillinger: bestemme værdien af variabler og finde filer. Interesserede læsere henvises til den [online-dokumentation](http://tug.org/texinfohtml/kpathsea.html#Invoking-kpsewhich) for yderligere information.
* **miljøvariabler**: Kpathsea understøtter en miljøvariabel kaldet [`KPATHSEA_DEBUG`](http://www.tug.org/texinfohtml/kpathsea.html#Debugging) til at hjælpe med at fejlsøge dens adfærd. Du kan sætte `KPATHSEA_DEBUG` til forskellige værdier afhængigt af, hvor meget fejlsøgningsinformation du har brug for. Sætter du `KPATHSEA_DEBUG=-1` vil generere en *betydelig* mængde data.

## Og til sidst: mapper, grafikfiler og latexmkrc

Så hvordan hænger ovenstående sammen med latexmkrc? Hvis du læser denne artikel [Sådan bruger du latexmkrc med Overleaf: eksempler og teknikker](/latex/da/dybtgaende-artikler/28-how-to-use-latexmkrc-with-overleaf.md) kan du se, at (Perl)-koden i latexmkrc-eksemplet sætter værdien af en miljøvariabel `TEXINPUTS`:

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

Bemærk, at kolon-tegnet (:) brugt her (`./tex//:`) er *ekstremt* vigtigt. Hvis du udelader den kolon, kan TeX/LaTeX måske ikke finde vitale systemfiler, såsom LaTeX-pakker!

Det, som denne latexmkrc-fil i praksis gør, er at tilføje en sti til en mappe på øverste niveau (`./tex` i eksemplet ovenfor) til den systemdefinerede `TEXINPUTS` miljøvariabel, så når Kpathsea bruger variablen `$TEXINPUTS` vil den derefter være klar over, at mappen `/tex//` skal gennemsøges for at finde inputfiler. Hvis du ser nærmere efter, vil du se, at den faktiske sti, der bruges, er `./tex//:` den `//` fortæller Kpathsea at søge rekursivt i tex-mappen—dvs. kigge i eventuelle undermapper i den `tex` mappen. Som nævnt tilføjede vi også det vigtige kolon-tegn.

Vi kan bruge præcis den samme teknik til billedfiler.

### Et sideblik på BibTeX

Som nævnt bruger BibTeX-programmet også Kpathsea til at søge efter sine inputfiler; især:

* den `BSTINPUTS` configvariablen (søgestien) bruges til at søge efter `.bst` filer;
* og `BIBINPUTS` configvariablen (søgestien) vil blive brugt til at søge efter `.bib` filer.

Hvis du tilføjer nye `.bst` eller `.bib` filer til dit Overleaf-projekt, kan du bruge teknikken nedenfor til at fortælle BibTeX, hvor disse filer findes—du skal erstatte `TEXINPUTS` med `BSTINPUTS` og/eller `BIBINPUTS`.

### TEXINPUTS og brug af indlejrede mapper til grafikfiler

Hvis dit projekt har mange grafikfiler, kan det være praktisk at oprette et sæt mapper til at gemme og administrere dem i. For eksempel viser det følgende skærmbillede en del af et Overleaf-projekt, der bruger en top-mappe kaldet **`graphics`**:

![Billede, der viser indlejrede mapper i et Overleaf-projekt](/files/e937ddd1d51f4f851bcf9b99926cafd0731c0d12)

Der er adskillige (indlejrede) undermapper, der indeholder grafik til forskellige afsnit af vores dokument.

Antag, at vi har ovenstående mappestruktur og ønsker at bruge `graphicx` pakken (`\usepackage{graphicx}`) og at vi prøver at gøre det sådan her:

```latex
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics{endlinechar}% best practice er ikke at bruge filendelsen
\end{document}
```

Det vil ikke virke, og du vil få en fejl som denne:

```
! LaTeX-fejl: Filen `endlinechar' blev ikke fundet.
l.4 \includegraphics{endlinechar}
Jeg kunne ikke finde filen med nogen af disse filendelser:
.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
```

Den fejl opstår, fordi vores grafikfil er gemt et sted, som TeX/LaTeX (og Kpathsea) ikke kender til, og derfor ikke kan finde—stien til grafikfilen er:

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

**Bemærk**: Det anses generelt for god praksis at ***undgå mellemrum i mappenavnene***. Selvom det bestemt er muligt at have mellemrum i mappenavne, og selvom de nedenfor diskuterede teknikker kan bruges, vil vi fraråde det af hensyn til dokumentportabilitet uden for Overleaf-platformen.

Som forklaret i denne [Overleaf-hjælpeartikel](/latex/da/flere-emner/27-inserting-images.md) kan du naturligvis bruge mapper til at gemme dine grafikfiler, men du skal fortælle LaTeX, hvor de er gemt. Her ser vi på to løsninger:

* Brug af kommandoen \graphicspath;
* Brug af vores viden om Kpathsea og `TEXINPUTS`.

### Brug af \graphicspath

Den `graphicx` pakken giver `\graphicspath` kommandoen, som du kan bruge til at erklære stier, hvor dine grafikfiler befinder sig; så kunne vi gøre noget i denne retning:

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

og LaTeX vil nu finde alle grafikfiler, der er gemt under den sti.

**Bemærk**: Hvis du *skal* har mellemrum i mappenavnene, skal du omslutte stierne i dobbelte anførselstegn (`"..."`):

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

**Bemærk**: Du kan erklære flere stier sådan her:

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

hvor `...` betyder yderligere stier omsluttet af klammer.

**Bemærk**: Vi starter stien med `./graphics` og ikke blot `/graphics`. Punktummet (.) fortæller operativsystemet, at stien er relativ til den aktuelle arbejdsmappe.

Den `\graphicspath` kommandoen fungerer fint, men hvis du har mange mapper, kan det blive ret besværligt at tilføje hver sti; desuden vil stier defineret via `\graphicspath` ikke længere virke, hvis du omdøber mapperne eller omstrukturerer dem. Findes der en nemmere måde? Ja, du kan bruge en latexmkrc-fil!

#### \graphicspath og rekursion (undermapper)

Bemærk, at der er online diskussioner/debatter om, hvorvidt nogle systemer understøtter/aktiverer `\graphicspath` til rekursivt at søge i undermapper, hvis du tilføjer `//` i slutningen af stien: se for eksempel disse diskussioner på tex.stackexchange:

* [LaTeX \graphicspath rekursiv søgning](https://tex.stackexchange.com/questions/25443/latex-graphicspath-recursive-search);
* [Graphicspath til MikTeX](https://tex.stackexchange.com/questions/3131/graphicspath-for-miktex).

For størst kompatibilitet bør du antage, at `\graphicspath` ikke understøtter rekursiv mappe-søgning.

### Kpathsea og TEXINPUTS (latexmkrc-filen til undsætning)

**FORBEHOLD:** Bemærk, at den følgende teknik virker fint på Overleaf og på passende konfigurerede lokale TeX-installationer; **men** hvis du bruger en latexmkrc-fil, kan dit projekt blive inkompatibelt med andre TeX-installationer, såsom dem, der bruges af forlag og online indsendelsessystemer til tidsskrifter. Tredjeparts TeX-installationer kan, men behøver ikke, understøtte eller tillade brugen af latexmkrc. Hvis du har brug for at eksportere dit Overleaf-projekt til brug et andet sted, eller vil indsende det til et tidsskrift, bør du fjerne alle mellemrum i stinavnene og for bedre kompatibilitet tilføje en `\graphicspath` kommando, som definerer alle stierne:

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

hvor `...` betyder yderligere stier omsluttet af klammer.

Teknikken, der diskuteres nedenfor (ved brug af `TEXINPUTS`) er blevet testet med succes på Overleaf med pdfTeX-, XeTeX- og LuaTeX-motorerne (dvs. pdfLaTeX-, XeLaTeX- og LuaLaTeX-kompileringsmulighederne i Overleaf-menuen):

![Billede, der viser, hvordan man vælger LaTeX-kompileren i Overleaf](/files/8026102f0f8f1c1e54077744873355614bf235e2)

Når vi vender tilbage til vores eksempel, vil vi bruge denne kode (med dybt indlejrede mapper), og vi vil bruge en latexmkrc-fil til at opnå det:

```latex
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics{endlinechar}% best practice er ikke at bruge filendelsen
\end{document}
```

Her er et skærmbillede, der viser, at ovenstående kode virker uden problemer: LaTeX har fundet vores grafikfil (`endlinechar.png`) selvom den ligger i en dybt indlejret mappestruktur (uden mellemrum i mappenavnene).

![Billede, der viser et projekt med indlejrede mapper, der kompilerer på Overleaf](/files/f51134c17ccf24bcf9fc7e65eac9dc5bc0730869)

Så hvordan gjorde vi dette? Alt, du behøver at gøre, er:

* oprette en ny fil uden filendelse og kalde den latexmkrc;
* tilføje følgende linje til den fil:

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

Kpathsea vil nu kende mapperne under `**graphics**` og på grund af den `//` vil den også kigge i undermapperne.

Bemærk igen, at kolon i `./graphics//:` er faktisk *ekstremt* vigtigt. Hvis du udelader den kolon, kan TeX/LaTeX måske ikke finde vitale systemfiler, såsom LaTeX-pakker!

Ved at bruge det enkle projekteksempel ovenfor kan du nu kompilere det, og voila! LaTeX finder din grafikfil — og du kan omdøbe eller omorganisere mapperne under /graphics, og det vil ikke forhindre LaTeX i at finde dem.

## Tabel over Kpathseas “konfigurationsvariabler”

Følgende tabel er et sammendrag baseret på [data anført i Kpathsea-dokumentationen](http://tug.org/texinfohtml/kpathsea.html#Supported-file-formats).

|                                                     |                                                                      |                                |
| --------------------------------------------------- | -------------------------------------------------------------------- | ------------------------------ |
| **Kpathsea-konfigurationsvariabel**                 | **Beskrivelse af filtype**                                           | **Filendelse**                 |
| AFMFONTS                                            | Adobe-fontmetrikker                                                  | .afm                           |
| MFBASES, TEXMFINI                                   | Metafont-hukommelsesdump                                             | .base                          |
| BIBINPUTS, TEXBIB                                   | BibTeX-bibliografikilde                                              | .bib                           |
| BLTXMLINPUTS                                        | BibLaTeXML-bibliografifiler til Biber                                | .bltxml                        |
| BSTINPUTS                                           | BibTeX-stil                                                          | .bst                           |
| CLUAINPUTS                                          | dynamiske biblioteker til Lua                                        | .dll og .so                    |
| CMAPFONTS                                           | tegnkortfiler                                                        | .cmap                          |
| TEXMFCNF                                            | Kørselskonfigurationsfiler                                           | .cnf                           |
| CWEBINPUTS                                          | CWEB-inputfiler                                                      | .w, .web, .ch                  |
| TEXCONFIG                                           | Dvips-'config.\*'-filer, såsom config.ps                             |                                |
| ENCFONTS                                            | kodningsvektorer                                                     | .enc                           |
| TEXFORMATS, TEXMFINI                                | TeX-hukommelsesdump                                                  | .fmt                           |
| FONTCIDMAPS                                         | CJK-kortlægning                                                      | .cid                           |
| FONTFEATURES                                        | primært til OpenType-skrifttypefunktioner                            | .fea                           |
| FONTS, GFFONTS, GLYPHFONTS, TEXFONTS                | generisk font-bitmap                                                 | .gf                            |
| TEXPICTS, TEXINPUTS                                 | indkapslede PostScript-figurer                                       | .eps, .epsi                    |
| TEXINDEXSTYLE, INDEXSTYLE                           | makeindex-stilfiler                                                  | .ist                           |
| LIGFONTS                                            | ligaturdefinitionsfiler                                              | .lig                           |
| TEXMFDBS                                            | filnavnedatabaser                                                    |                                |
| TEXFONTMAPS                                         | fontmaps                                                             | .map                           |
| MPMEMS, TEXMFINI                                    | MetaPost-hukommelsesdump                                             | .mem                           |
| MPSUPPORT                                           | MetaPost-understøttelsesfiler, brugt af DMP                          |                                |
| MFINPUTS                                            | Metafont-kilde                                                       | .mf                            |
| MFPOOL, TEXMFINI                                    | Metafont-programstrenge                                              | .pool                          |
| MFTINPUTS                                           | MFT-stilfil                                                          | .mft                           |
| MISCFONTS                                           | skrifttype-relaterede filer, der ikke passer i de andre kategorier   |                                |
| MLBIBINPUTS, BIBINPUTS, TEXBIB                      | MlBibTeX-bibliografikilde                                            | .mlbib, .mlbib                 |
| MLBSTINPUTS, BSTINPUTS                              | MlBibTeX-stil                                                        | .mlbst, .bst                   |
| MPINPUTS                                            | MetaPost-kilde                                                       | .mp                            |
| MPPOOL, TEXMFINI                                    | MetaPost-programstrenge                                              | .pool                          |
| OCPINPUTS                                           | kompilerede procesfiler til Omega                                    | .ocp                           |
| OFMFONTS, TEXFONTS                                  | Omega-fontmetrikker                                                  | .ofm, .tfm                     |
| OPENTYPEFONTS                                       | OpenType-skrifttyper                                                 |                                |
| OPLFONTS, TEXFONTS                                  | Omega-egenskabslister                                                | .opl                           |
| OTPINPUTS                                           | Omega-oversættelsesprocesfiler                                       | .otp                           |
| OVFFONTS, TEXFONTS                                  | Omega-virtuelle skrifttyper                                          | .ovf                           |
| OVPFONTS, TEXFONTS                                  | Omega-virtuelle egenskabslister                                      | .ovp                           |
| PDFTEXCONFIG                                        | PDFTeX-specifikke konfigurationsfiler                                |                                |
| PROGRAMFONTS, PKFONTS, TEXPKS, GLYPHFONTS, TEXFONTS | pakkede bitmap-skrifttyper                                           | .pk                            |
| TEXPSHEADERS, PSHEADERS                             | downloadbar PostScript                                               | .pro                           |
| RISINPUTS                                           | RIS-bibliografifiler, primært til Bibe                               | .ris                           |
| SFDFONTS                                            | subfontdefinitionsfiler                                              | .sfd                           |
| TEXINPUTS                                           | TeX-kilde                                                            | .tex                           |
| TEXDOCS                                             | dokumentationsfiler til TeX-systemet                                 |                                |
| TEXSOURCES                                          | kildefiler til TeX-systemet                                          |                                |
| TEXMFSCRIPTS                                        | arkitekturuafhængige eksekverbare filer distribueret i texmf-træerne |                                |
| TEXPOOL, TEXMFINI                                   | TeX-programstrenge                                                   | .pool                          |
| TFMFONTS, TEXFONTS                                  | TeX-fontmetrikker                                                    | .tfm                           |
| TRFONTS                                             | Troff-skrifttyper                                                    |                                |
| TTFONTS                                             | TrueType-omridsfonte                                                 | .ttf, ,TTF, .ttc, .TTC, .dfont |
| T1FONTS, T1INPUTS, TEXPSHEADERS, DVIPSHEADERS       | Type 1 PostScript-konturskrifttyper                                  | .pfa, .pfb                     |
| T42FONTS                                            | Type 42 PostScript-konturskrifttyper                                 |                                |
| VFFONTS, TEXFONTS                                   | virtuelle skrifttyper                                                | .vf                            |
| WEBINPUTS                                           | WEB-inputfiler                                                       | .web, .ch                      |
| WEB2C                                               | filer specifikke for web2c-implementeringen                          |                                |


---

# 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/da/dybtgaende-artikler/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.
