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

# Pandoc-Import und -Export

### Pandoc-Import / Export

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

#### Was es tut

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

***

### Umgebungsvariablen

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

1\. `ENABLE_PANDOC_CONVERSIONS` — der Hauptschalter

```bash
ENABLE_PANDOC_CONVERSIONS=true
```

* Typ: boolean (`true` aktiviert ihn; alles andere deaktiviert ihn).
* **Muss bei BEIDEN gesetzt sein `web` und `clsi` Diensten.** Es sind getrennte Prozesse mit getrennter Konfiguration:
  * `web` liest es ein in `enablePandocConversions` (`services/web/config/settings.defaults.js`). Es schaltet die Import-Routen, die Export-Routen und die `ol-ExposedSettings.enablePandocConversions` Flag, das 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 schaltet die Endpunkte frei, die Pandoc ausführen.
* Wenn es aktiviert ist auf `web` aber nicht auf `clsi` (oder umgekehrt), erscheint die UI, aber die Konvertierung schlägt fehl — halte sie synchron.

2\. `PANDOC_IMAGE` — das Container-Image, das clsi zur Konvertierung ausführt

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

### Voraussetzungen

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

1. **`clsi` muss im sandboxed-Modus mit Docker-Zugriff laufen.** Im Dev-Stack `clsi` hat bereits `SANDBOXED_COMPILES=true` und den Docker-Socket des Hosts (`/var/run/docker.sock`) eingehängt.
2. **Das `PANDOC_IMAGE` muss vorhanden sein** auf diesem Docker-Host (heruntergeladen oder lokal gebaut) vor der ersten Konvertierung.

***

### Schnelleinrichtung

Der Dev-Stack (`develop/dev.env`) wird bereits mitgeliefert mit:

```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 (neu) den Stack starten, 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 Laufzeitgrundlagen, 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 existiert:
#   Das offizielle quay.io/sharelatex/pandoc:3.9-Image ist privat (401, kann nicht gepullt werden).
#   clsi ruft pandoc generisch auf (keine benutzerdefinierten Templates/Filter/Reference-Doc), daher funktioniert ein
#   Standard-Pandoc-Image funktioniert — es benötigt nur drei Laufzeitgrundlagen, die clsi voraussetzt:
#
#   1. Kein `pandoc`-ENTRYPOINT — clsi führt Cmd ["pandoc", ...] aus; mit dem Standard-
#      EntryPoint würde das zu `pandoc pandoc ...` werden.
#   2. `zip` — der zweite Schritt der Import-Konvertierung führt `zip -r` aus, um die Ausgabe zu paketieren.
#   3. Benutzer, die dazu passen, wie clsi den Konvertierungscontainer ausführt (User=$TEXLIVE_IMAGE_USER):
#        - `tex` mit UID 1000 — Standard für 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 mit Besitzer 33:33, daher muss der Container
#          als www-data(33) laufen, um hineinschreiben zu können — andernfalls schlägt pandoc fehl mit entweder
#          "unable to find user www-data" oder "permission denied".
#      Alpine bringt bereits eine `www-data`-Gruppe mit GID 82 mit, daher verschieben wir sie auf GID 33, um
#      mit dem Host-/texlive-Image übereinzustimmen.
#
# Build (der 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). Pinne auf eine bestimmte
# pandoc/core-Tag für vollständig reproduzierbare 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
```

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

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

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

***

### Fehlerbehebung

| Symptom                                                                  | Wahrscheinliche Ursache                                                                               |
| ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------- |
| Import-/Export-Schaltflächen erscheinen nicht                            | `ENABLE_PANDOC_CONVERSIONS` nicht `true` auf **web**                                                  |
| UI 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 Herunterziehen des Images (401)                       | `PANDOC_IMAGE` zeigt immer noch auf das private Standard-Image; baue/verwende 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://ayakaleaf-pro.ayaka.space/on-premises/de/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.
