> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-pro.ayaka.space/on-premises/da/konfiguration/overleaf-toolkit/pandoc-import-and-export.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 i en **sandboxet Docker-container** administreret af `clsi` tjenesten, så funktionen er som standard slået fra og skal slås til med et par miljøvariabler.

#### Hvad det gør

| Retning     | Fra → Til                | Formater                   | Hvor                                                                                              |
| ----------- | ------------------------ | -------------------------- | ------------------------------------------------------------------------------------------------- |
| **Import**  | dokument → LaTeX-projekt | `docx`, `markdown`         | *Nyt projekt → Import* (uploader en `.docx` / `.md` og gør den til et redigerbart `.tex` projekt) |
| **Eksport** | LaTeX-projekt → dokument | `docx`, `markdown`, `html` | *Menu → Hent ned / Eksportér* (gengiver projektet via Pandoc)                                     |

***

### Miljøvariabler

Der er **to** variabler, der er vigtige, og én næsten ens, som gør **ikke**.

1\. `ENABLE_PANDOC_CONVERSIONS` — hovedkontakten

```bash
ENABLE_PANDOC_CONVERSIONS=true
```

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

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

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

### Forudsætninger

Fordi konverteringer kører som Docker-containere, der startes af `clsi`:

1. **`clsi` skal køre i sandboxet tilstand med Docker-adgang.** I udviklingsstacken `clsi` har allerede `SANDBOXED_COMPILES=true` og værtens Docker-socket (`/var/run/docker.sock`) monteret.
2. **Det `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

Udviklingsstacken (`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 stacken (gen) for at `clsi` og `web` opfange variablerne.

***

### Bygning af Pandoc-imaget

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

```dockerfile
# Tilpasset 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 tilpassede skabeloner/filtre/reference-doc), så et
#   standard pandoc-image virker — det kræver blot tre runtime-essentials, som clsi antager:
#
#   1. Ingen `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 / mikrotjenester.
#        - `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ært-/texlive-imaget.
#
# Byg (taggen skal matche PANDOC_IMAGE i develop/dev.env):
#   docker build -t overleaf-pandoc:local develop/pandoc
#
# Bemærk: fastlåst til `latest` (pandoc 3.10 på skrivende tidspunkt). Fastlå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 fastlåse `pandoc/core` til en specifik version i stedet for `seneste` for reproducerbare builds, og sæt `PANDOC_IMAGE` til din registry-sti.

***

### Fejlfinding

| Symptom                                                   | Sandsynlig årsag                                                                                |
| --------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| Import-/eksportknapper 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 imaget (401)                  | `PANDOC_IMAGE` peger stadig på den private standard; byg/peg på dit eget image                  |
| Containeren kører `pandoc pandoc …` / forkerte argumenter | Imaget har en `pandoc` `ENTRYPOINT`; brug `ENTRYPOINT []`                                       |
| Import-output er tomt / zip-trinnet fejler                | `zip` er ikke installeret i imaget                                                              |
| Tilladelsesfejl på konverterede filer                     | Imaget 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://ayakaleaf-pro.ayaka.space/on-premises/da/konfiguration/overleaf-toolkit/pandoc-import-and-export.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.
