> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Import og eksport med Pandoc

### Import / eksport med Pandoc

Overleaf kan konvertere dokumenter til og fra LaTeX ved hjelp av [Pandoc](https://pandoc.org/). Konverteringen kjører i en **sandkasset Docker-container** som administreres av `clsi`-tjenesten, så funksjonen er av som standard og må slås på med et par miljøvariabler.

#### Hva den gjør

| Retning | Fra → til | Formater | Hvor |
| - | - | - | - |
| **Import** | dokument → LaTeX-prosjekt | `docx`, `markdown` | *New Project → Import* (laster opp en `.docx` / `.md` og gjør den om til et redigerbart `.tex`-prosjekt) |
| **Eksport** | LaTeX-prosjekt → dokument | `docx`, `markdown`, `html` | *Menu → Download / Export* (gjengir prosjektet gjennom Pandoc) |

***

### Miljøvariabler

Det er **to** variabler som betyr noe, og én som ligner, men som **ikke** gjør det.

1\. `ENABLE_PANDOC_CONVERSIONS` — hovedbryteren

```bash theme={null}
ENABLE_PANDOC_CONVERSIONS=true
```

* Type: boolsk (`true` aktiverer den; alt annet deaktiverer den).
* <strong>Må settes på BÅDE `web`- og `clsi`-tjenesten.</strong> De er separate prosesser med separat konfigurasjon:
  * `web` leser den inn i `enablePandocConversions` (`services/web/config/settings.defaults.js`). Den styrer importrutene, eksportrutene og flagget `ol-ExposedSettings.enablePandocConversions`, som forteller frontend om import-/eksportgrensesnittet skal vises.
  * `clsi` leser den inn i `enablePandocConversions` (`services/clsi/config/settings.defaults.cjs`). Den styrer endepunktene som kjører Pandoc.
* Hvis den er aktivert på `web`, men ikke på `clsi` (eller omvendt), vises grensesnittet, men konverteringen mislykkes — hold dem synkronisert.

2\. `PANDOC_IMAGE` — container-imaget som clsi kjører for å konvertere

```bash theme={null}
PANDOC_IMAGE=your-repo/pandoc:3.9
```

### Forutsetninger

Siden konverteringer kjører som Docker-containere startet av `clsi`:

1. <strong>`clsi` må kjøre i sandkassemodus med tilgang til Docker.</strong> I utviklingsstakken har `clsi` allerede `SANDBOXED_COMPILES=true`, og vertens Docker-socket (`/var/run/docker.sock`) er montert.
2. **`PANDOC_IMAGE` må finnes** på den Docker-verten (hentet eller bygget lokalt) før den første konverteringen.

***

### Rask oppsett

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

```bash theme={null}
ENABLE_PANDOC_CONVERSIONS=true
PANDOC_IMAGE=overleaf-pandoc:local
```

Siden det offisielle imaget er privat, må du bygge det medfølgende imaget **én gang** før du bruker funksjonen:

```bash theme={null}
docker build -t overleaf-pandoc:local develop/pandoc
```

Start deretter stakken (på nytt) slik at `clsi` og `web` plukker opp variablene.

***

### Bygge Pandoc-imaget

Et standard Pandoc-image fungerer fordi clsi kaller Pandoc generisk (ingen egne maler/filtre). Det trenger bare tre grunnleggende ting ved kjøring, som alle håndteres av `develop/pandoc/Dockerfile`:

```dockerfile theme={null}
# Custom Pandoc image for clsi sandboxed conversions
# (import/export: docx / markdown / html, via ENABLE_PANDOC_CONVERSIONS).
#
# Why this exists:
#   The official quay.io/sharelatex/pandoc:3.9 image is private (401, can't pull).
#   clsi invokes pandoc generically (no custom templates/filters/reference-doc), so a
#   stock pandoc image works — it just needs three runtime essentials that clsi assumes:
#
#   1. No `pandoc` ENTRYPOINT — clsi runs Cmd ["pandoc", ...]; with the default
#      entrypoint that would become `pandoc pandoc ...`.
#   2. `zip` — the import conversion's second step runs `zip -r` to package the output.
#   3. Users matching how clsi runs the conversion container (User=$TEXLIVE_IMAGE_USER):
#        - `tex` at UID 1000 — dev / microservices default.
#        - `www-data` at UID 33 — Server Pro sandboxed *sibling* containers set
#          TEXLIVE_IMAGE_USER=www-data (see /etc/overleaf/env.sh). clsi (running as
#          www-data) creates the conversion dir owned by 33:33, so the container must run
#          as www-data(33) to write into it — otherwise pandoc fails with either
#          "unable to find user www-data" or "permission denied".
#      Alpine already ships a `www-data` group at GID 82, so we move it to GID 33 to
#      match the host/texlive image.
#
# Build (tag must match PANDOC_IMAGE in develop/dev.env):
#   docker build -t overleaf-pandoc:local develop/pandoc
#
# Note: pinned to `latest` (pandoc 3.10 at time of writing). Pin to a specific
# pandoc/core tag for fully reproducible 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
```

Bygg og tagg det slik at taggen samsvarer med `PANDOC_IMAGE`:

```bash theme={null}
docker build -t overleaf-pandoc:local develop/pandoc
```

I produksjon bør du låse `pandoc/core` til en bestemt versjon i stedet for `latest` for reproduserbare bygg, og sette `PANDOC_IMAGE` til stien i ditt eget register.

***

### Feilsøking

| Symptom | Sannsynlig årsak |
| - | - |
| Import-/eksportknappene vises ikke | `ENABLE_PANDOC_CONVERSIONS` er ikke `true` på **web** |
| Grensesnittet vises, men konverteringen feiler med en serverfeil | `ENABLE_PANDOC_CONVERSIONS` er ikke satt på **clsi**, eller `PANDOC_IMAGE` mangler på Docker-verten |
| `clsi`-feil ved henting av imaget (401) | `PANDOC_IMAGE` peker fortsatt på det private standardimaget; bygg/pek til ditt eget image |
| Containeren kjører `pandoc pandoc …` / feil argumenter | Imaget har et `pandoc`-`ENTRYPOINT`; bruk `ENTRYPOINT []` |
| Importresultatet er tomt / zip-trinnet feiler | `zip` er ikke installert i imaget |
| Tillatelsesfeil på konverterte filer | Imaget har ingen `tex`-bruker med UID 1000 |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.