> 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/on-premises/da/konfiguration/overleaf-toolkit/pandoc-import-og-eksport.md).

# Pandoc-import og -eksport

### Pandoc import/eksport

Overleaf kan konvertere dokumenter til og fra LaTeX ved hjælp af [Pandoc](https://pandoc.org/). Konverteringen kører inde i en **sandboxet Docker-container** administreret af `clsi` tjenesten, så funktionen er slået fra som standard og skal aktiveres med et par miljøvariabler.

#### Hvad den gør

| Retning     | Fra → Til                | Formater                   | Hvor                                                                                             |
| ----------- | ------------------------ | -------------------------- | ------------------------------------------------------------------------------------------------ |
| **Import**  | dokument → LaTeX-projekt | `docx`, `markdown`         | *Nyt projekt → Import* (Uploader en `.docx` / `.md` og gør det til en redigerbar `.tex` projekt) |
| **Eksport** | LaTeX-projekt → dokument | `docx`, `markdown`, `html` | *Menu → Download / eksport* (gengiver projektet via Pandoc)                                      |

***

### miljøvariabler

Der er **to** variabler, der betyder noget, og én dobbeltgænger, der også gør **ikke**.

1\. `ENABLE_PANDOC_CONVERSIONS` — hovedkontakten

```bash
ENABLE_PANDOC_CONVERSIONS=true
```

* Type: boolean (`true` aktiverer den; alt andet deaktiverer den).
* **Skal være sat på BÅDE de `web` og `clsi` tjenester.** De er separate processer med separat konfiguration:
  * `web` læser den ind i `enablePandocConversions` (`services/web/config/settings.defaults.js`). Den styrer import-ruterne, eksport-ruterne og `ol-ExposedSettings.enablePandocConversions` flag, der fortæller frontend, om Import/Eksport-UI'et skal vises.
  * `clsi` læser den ind i `enablePandocConversions` (`services/clsi/config/settings.defaults.cjs`). Den styrer endepunkterne, der kører Pandoc.
* Hvis den er aktiveret på `web` men ikke på `clsi` (eller omvendt), vil UI'et vises, men konverteringen vil fejle — hold dem synkroniserede.

2\. `PANDOC_IMAGE` — containeraftrykket, som clsi kører for at konvertere

```bash
PANDOC_IMAGE=your-repo/pandoc:3.9
```

### Forudsætninger

Fordi konverteringer kører som Docker-containere oprettet af `clsi`:

1. **`clsi` skal køre i sandboxet tilstand med Docker-adgang.** I udviklingsstakken `clsi` har allerede `SANDBOXED_COMPILES=true` og værtens Docker-socket (`/var/run/docker.sock`) monteret.
2. **Den `PANDOC_IMAGE` skal være til stede** på den Docker-vært (hentet eller bygget lokalt) før den første konvertering.

***

### Hurtig opsætning

Udviklingsstakken (`develop/dev.env`) leveres allerede med:

```bash
ENABLE_PANDOC_CONVERSIONS=true
PANDOC_IMAGE=overleaf-pandoc:local
```

Da det officielle image er privat, skal du bygge det medfølgende én **gang** før du bruger funktionen:

```bash
docker build -t overleaf-pandoc:local develop/pandoc
```

Start derefter stakken (igen), så `clsi` og `web` den indlæser variablerne.

***

### Bygning af Pandoc-image

Et standard Pandoc-image virker, fordi clsi kalder Pandoc generisk (ingen brugerdefinerede skabeloner/filtre). Det kræver kun tre runtime-elementer, som alle håndteres af `develop/pandoc/Dockerfile`:

```dockerfile
# Brugerdefineret Pandoc-image til clsis sandboxede konverteringer
# (import/eksport: docx / markdown / html, via ENABLE_PANDOC_CONVERSIONS).
#
# Hvorfor dette findes:
#   Det officielle quay.io/sharelatex/pandoc:3.9-image er privat (401, kan ikke hentes).
#   clsi kalder pandoc generisk (ingen brugerdefinerede skabeloner/filtre/reference-doc), så et
#   standard pandoc-image virker — det kræver bare tre runtime-elementer, som clsi forudsætter:
#
#   1. Intet `pandoc` ENTRYPOINT — clsi kører Cmd ["pandoc", ...]; med standard-
#      entrypoint ville det blive til `pandoc pandoc ...`.
#   2. `zip` — importkonverteringens andet trin kører `zip -r` for at pakke outputtet.
#   3. Brugere, der matcher, hvordan clsi kører konverteringscontaineren (User=$TEXLIVE_IMAGE_USER):
#        - `tex` med UID 1000 — standard for dev / microservices.
#        - `www-data` med UID 33 — Server Pro sandboxede *søster*-containere sætter
#          TEXLIVE_IMAGE_USER=www-data (se /etc/overleaf/env.sh). clsi (kørende som
#          www-data) opretter konverteringsmappen ejet af 33:33, så containeren skal køre
#          som www-data(33) for at kunne skrive i den — ellers fejler pandoc med enten
#          "unable to find user www-data" eller "permission denied".
#      Alpine leverer allerede en `www-data`-gruppe med GID 82, så vi flytter den til GID 33 for at
#      matche værten/texlive-image.
#
# Byg (taggen skal matche PANDOC_IMAGE i develop/dev.env):
#   docker build -t overleaf-pandoc:local develop/pandoc
#
# Bemærk: låst til `latest` (pandoc 3.10 på tidspunktet for skrivningen). Lås til en specifik
# pandoc/core-tag for fuldt reproducerbare builds.
FROM pandoc/core:latest

ENTRYPOINT []

RUN apk add --no-cache zip \
 && adduser -D -u 1000 tex \
 && (delgroup www-data 2>/dev/null || true) \
 && addgroup -g 33 www-data \
 && adduser -D -u 33 -G www-data www-data
```

Byg og tag det, så taggen matcher `PANDOC_IMAGE`:

```bash
docker build -t overleaf-pandoc:local develop/pandoc
```

Til produktion skal du låse `pandoc/core` til en specifik version i stedet for `latest` for reproducerbare builds, og sæt `PANDOC_IMAGE` til din registry-sti.

***

### Fejlfinding

| Symptom                                                   | Sandsynlig årsag                                                                                |
| --------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| Import/Eksport-knapper vises ikke                         | `ENABLE_PANDOC_CONVERSIONS` ikke `true` på **web**                                              |
| UI'et vises, men konverteringen fejler med en serverfejl  | `ENABLE_PANDOC_CONVERSIONS` ikke sat på **clsi**, eller `PANDOC_IMAGE` mangler på Docker-værten |
| `clsi` fejl ved hentning af image (401)                   | `PANDOC_IMAGE` peger stadig på den private standard; byg/peg på dit eget image                  |
| Containeren kører `pandoc pandoc …` / forkerte argumenter | Image'et har et `pandoc` `ENTRYPOINT`; brug `ENTRYPOINT []`                                     |
| Importoutput er tomt / zip-trinnet fejler                 | `zip` er ikke installeret i image'et                                                            |
| Tilladelsesfejl på konverterede filer                     | Image'et har ingen `tex` bruger med UID 1000                                                    |


---

# 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/on-premises/da/konfiguration/overleaf-toolkit/pandoc-import-og-eksport.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.
