> 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/de/konfiguration/overleaf-toolkit/pandoc-import-und-export.md).

# Pandoc-Import und -Export

### Pandoc Import / Export

Overleaf kann Dokumente mit [Pandoc](https://pandoc.org/)in und aus LaTeX konvertieren. Die Konvertierung läuft in einem **sandboxed Docker-Container** verwaltet vom `clsi` Dienst, daher ist die Funktion standardmäßig deaktiviert und muss mit einigen Umgebungsvariablen eingeschaltet werden.

#### Was es macht

| Richtung   | Von → Zu                 | Formate                    | Wo                                                                                                                    |
| ---------- | ------------------------ | -------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| **Import** | Dokument → LaTeX-Projekt | `docx`, `markdown`         | *Neues Projekt → Importieren* (lädt eine `.docx` / `.md` hoch und wandelt sie in ein bearbeitbares `.tex` Projekt um) |
| **Export** | LaTeX-Projekt → Dokument | `docx`, `markdown`, `html` | *Menü → Herunterladen / Exportieren* (rendert das Projekt über Pandoc)                                                |

***

### Umgebungsvariablen

Es gibt **zwei** Variablen, die wichtig sind, und eine ähnlich aussehende, die es **nicht**.

1\. `ENABLE_PANDOC_CONVERSIONS` — der Hauptschalter

```bash
ENABLE_PANDOC_CONVERSIONS=true
```

* Typ: boolesch (`true` aktiviert es; alles andere deaktiviert es).
* **Muss auf BEIDEN `web` und `clsi` Diensten gesetzt sein.** Es sind getrennte Prozesse mit getrennter Konfiguration:
  * `web` liest es ein in `enablePandocConversions` (`services/web/config/settings.defaults.js`). Es steuert die Import-Routen, die Export-Routen und den `ol-ExposedSettings.enablePandocConversions` Schalter, der dem Frontend mitteilt, ob die Import-/Export-Oberfläche angezeigt werden soll.
  * `clsi` liest es ein in `enablePandocConversions` (`services/clsi/config/settings.defaults.cjs`). Es steuert die Endpunkte, die Pandoc ausführen.
* Wenn es aktiviert ist auf `web` aber nicht auf `clsi` (oder umgekehrt), erscheint die Oberfläche, aber die Konvertierung schlägt fehl — halte sie synchron.

2\. `PANDOC_IMAGE` — das Container-Image, das clsi ausführt, um zu konvertieren

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

### Voraussetzungen

Da Konvertierungen als Docker-Container laufen, die von `clsi`:

1. **`clsi` gestartet werden,** muss im sandboxed-Modus mit Docker-Zugriff laufen. `clsi` Im Dev-Stack `hat bereits` SANDBOXED\_COMPILES=true`/var/run/docker.sock`und den Host-Docker-Socket (
2. **Die `PANDOC_IMAGE` ) eingehängt.** muss auf diesem Docker-Host vorhanden sein

***

### Schnelleinrichtung

Der Dev-Stack (`develop/dev.env`) enthält bereits:

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

Da das offizielle Image privat ist, baue das mitgelieferte **einmal** vor der Nutzung der Funktion:

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

Dann starte den Stack (neu), damit `clsi` und `web` die Variablen übernommen werden.

***

### Das Pandoc-Image bauen

Ein Standard-Pandoc-Image funktioniert, weil clsi Pandoc generisch aufruft (keine benutzerdefinierten Templates/Filter). Es benötigt nur drei Laufzeit-Bestandteile, die alle von `develop/pandoc/Dockerfile`:

```dockerfile
# Benutzerdefiniertes Pandoc-Image für sandboxed-Konvertierungen von clsi
# (Import/Export: docx / markdown / html, über ENABLE_PANDOC_CONVERSIONS).
#
# Warum es das gibt:
#   Das offizielle quay.io/sharelatex/pandoc:3.9-Image ist privat (401, kann nicht ziehen).
#   clsi ruft pandoc generisch auf (keine benutzerdefinierten Templates/Filter/reference-doc), daher funktioniert
#   ein Standard-pandoc-Image — es braucht nur drei Laufzeit-Bestandteile, die clsi voraussetzt:
#
#   1. Kein `pandoc`-ENTRYPOINT — clsi führt Cmd ["pandoc", ...] aus; mit dem Standard-
#      EntryPoint würde daraus `pandoc pandoc ...` werden.
#   2. `zip` — der zweite Schritt der Importkonvertierung führt `zip -r` aus, um die Ausgabe zu verpacken.
#   3. Benutzer, die dazu passen, wie clsi den Konvertierungs-Container ausführt (User=$TEXLIVE_IMAGE_USER):
#        - `tex` mit UID 1000 — Standard in Dev / Microservices.
#        - `www-data` mit UID 33 — Server-Pro-Sandboxed-*Sibling*-Container setzen
#          TEXLIVE_IMAGE_USER=www-data (siehe /etc/overleaf/env.sh). clsi (laufend als
#          www-data) erstellt das Konvertierungsverzeichnis im Besitz von 33:33, also muss der Container laufen
#          als www-data(33), um hineinschreiben zu können — andernfalls schlägt pandoc fehl mit entweder
#          "unable to find user www-data" oder "permission denied".
#      Alpine liefert bereits eine `www-data`-Gruppe mit GID 82, daher verschieben wir sie auf GID 33, um
#      zum Host/texlive-Image zu passen.
#
# Build (Tag muss mit PANDOC_IMAGE in develop/dev.env übereinstimmen):
#   docker build -t overleaf-pandoc:local develop/pandoc
#
# Hinweis: auf `latest` festgelegt (pandoc 3.10 zum Zeitpunkt des Schreibens). Für vollständig
# reproduzierbare Builds auf ein bestimmtes pandoc/core-Tag festlegen.
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
```

Baue und tagge es so, dass der Tag mit `PANDOC_IMAGE`:

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

Für die Produktion `pandoc/core` auf eine bestimmte Version statt auf `latest` für reproduzierbare Builds, und setze `PANDOC_IMAGE` auf deinen Registry-Pfad.

***

### Fehlerbehebung

| Symptom                                                                              | Wahrscheinliche Ursache                                                                               |
| ------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------- |
| Import/Export-Schaltflächen werden nicht angezeigt                                   | `ENABLE_PANDOC_CONVERSIONS` nicht `true` auf **web**                                                  |
| Die Oberfläche erscheint, aber die Konvertierung schlägt mit einem Serverfehler fehl | `ENABLE_PANDOC_CONVERSIONS` nicht gesetzt auf **clsi**, oder `PANDOC_IMAGE` fehlt auf dem Docker-Host |
| `clsi` Fehler beim Abrufen des Images (401)                                          | `PANDOC_IMAGE` verweist noch auf das private Standard-Image; baue/verweise auf dein eigenes Image     |
| Container läuft `pandoc pandoc …` / falsche Argumente                                | Image hat einen `pandoc` `ENTRYPOINT`; verwende `ENTRYPOINT []`                                       |
| Import-Ausgabe ist leer / zip-Schritt schlägt fehl                                   | `zip` ist im Image nicht installiert                                                                  |
| Berechtigungsfehler bei konvertierten Dateien                                        | Image hat keinen `tex` Benutzer mit 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/de/konfiguration/overleaf-toolkit/pandoc-import-und-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.
