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

# Pandoc-import och export

### Pandoc-import/export

Overleaf kan konvertera dokument till och från LaTeX med hjälp av [Pandoc](https://pandoc.org/). Konverteringen körs i en **sandboxad Docker-behållare** som hanteras av `clsi` tjänsten, så funktionen är av som standard och måste slås på med ett par miljövariabler.

#### Vad den gör

| Riktning   | Från → Till              | Format                     | Var                                                                                                        |
| ---------- | ------------------------ | -------------------------- | ---------------------------------------------------------------------------------------------------------- |
| **Import** | dokument → LaTeX-projekt | `docx`, `markdown`         | *Nytt projekt → Importera* (laddar upp en `.docx` / `.md` och gör det till ett redigerbart `.tex` projekt) |
| **Export** | LaTeX-projekt → dokument | `docx`, `markdown`, `html` | *Meny → Ladda ner / exportera* (renderar projektet via Pandoc)                                             |

***

### Miljövariabler

Det finns **två** variabler som spelar roll, och en liknande som gör **inte**.

1\. `ENABLE_PANDOC_CONVERSIONS` — huvudomkopplaren

```bash
ENABLE_PANDOC_CONVERSIONS=true
```

* Typ: boolean (`true` aktiverar det; allt annat inaktiverar det).
* **Måste vara satt på BÅDA `web` och `clsi` tjänsterna.** De är separata processer med separat konfiguration:
  * `web` läser in det i `enablePandocConversions` (`services/web/config/settings.defaults.js`). Den styr importvägarna, exportvägarna och `ol-ExposedSettings.enablePandocConversions` flagga som talar om för frontend om Import/Export-gränssnittet ska visas.
  * `clsi` läser in det i `enablePandocConversions` (`services/clsi/config/settings.defaults.cjs`). Den styr endpoints som kör Pandoc.
* Om den är aktiverad på `web` men inte på `clsi` (eller tvärtom) kommer gränssnittet att visas men konverteringen misslyckas — håll dem synkroniserade.

2\. `PANDOC_IMAGE` — containeravbilden som clsi kör för att konvertera

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

### Förutsättningar

Eftersom konverteringar körs som Docker-behållare startade av `clsi`:

1. **`clsi` måste det köras i sandboxat läge med Docker-åtkomst.** I utvecklingsstacken `clsi` har redan `SANDBOXED_COMPILES=true` och värdens Docker-socket (`/var/run/docker.sock`) monterad.
2. **Fältet `PANDOC_IMAGE` måste finnas** på den Docker-värden (hämtad eller byggd lokalt) före den första konverteringen.

***

### Snabb installation

Utvecklingsstacken (`develop/dev.env`) levereras redan med:

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

Eftersom den officiella avbilden är privat, bygg den medföljande **en gång** innan du använder funktionen:

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

Starta sedan om stacken så att `clsi` och `web` läser in variablerna.

***

### Bygga Pandoc-avbilden

En standard-Pandoc-avbild fungerar eftersom clsi anropar Pandoc generiskt (inga egna mallar/filter). Den behöver bara tre nödvändiga saker vid körning, allt hanteras av `develop/pandoc/Dockerfile`:

```dockerfile
# Egen Pandoc-avbild för clsis sandboxade konverteringar
# (import/export: docx / markdown / html, via ENABLE_PANDOC_CONVERSIONS).
#
# Varför detta finns:
#   Den officiella quay.io/sharelatex/pandoc:3.9-avbilden är privat (401, kan inte hämtas).
#   clsi anropar pandoc generiskt (inga egna mallar/filter/reference-doc), så en
#   standard-pandoc-avbild fungerar — den behöver bara tre nödvändiga saker vid körning som clsi förutsätter:
#
#   1. Ingen `pandoc`-ENTRYPOINT — clsi kör Cmd ["pandoc", ...]; med standard-
#      entrypoint skulle det bli `pandoc pandoc ...`.
#   2. `zip` — importkonverteringens andra steg kör `zip -r` för att paketera utdata.
#   3. Användare som matchar hur clsi kör konverteringsbehållaren (User=$TEXLIVE_IMAGE_USER):
#        - `tex` med UID 1000 — standard för dev / mikrotjänster.
#        - `www-data` med UID 33 — Server Pro:s sandboxade *syskon*-behållare sätter
#          TEXLIVE_IMAGE_USER=www-data (se /etc/overleaf/env.sh). clsi (som körs som
#          www-data) skapar konverteringskatalogen ägd av 33:33, så behållaren måste köras
#          som www-data(33) för att skriva i den — annars misslyckas pandoc med antingen
#          "unable to find user www-data" eller "permission denied".
#      Alpine levererar redan en `www-data`-grupp med GID 82, så vi flyttar den till GID 33 för att
#      matcha värden/texlive-avbilden.
#
# Bygg (taggen måste matcha PANDOC_IMAGE i develop/dev.env):
#   docker build -t overleaf-pandoc:local develop/pandoc
#
# Obs: låst till `latest` (pandoc 3.10 vid skrivandet). Lås till en specifik
# pandoc/core-tag för helt reproducerbara byggen.
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 och tagga den så att taggen matchar `PANDOC_IMAGE`:

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

För produktion, lås `pandoc/core` till en specifik version i stället för `senaste` för reproducerbara byggen, och sätt `PANDOC_IMAGE` till din registry-sökväg.

***

### Felsökning

| Symptom                                                            | Trolig orsak                                                                                    |
| ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------- |
| Import-/exportknappar visas inte                                   | `ENABLE_PANDOC_CONVERSIONS` inte `true` på **web**                                              |
| Gränssnittet visas men konverteringen misslyckas med ett serverfel | `ENABLE_PANDOC_CONVERSIONS` inte satt på **clsi**, eller `PANDOC_IMAGE` saknas på Docker-värden |
| `clsi` fel vid hämtning av avbilden (401)                          | `PANDOC_IMAGE` pekar fortfarande på den privata standarden; bygg/peka på din egen avbild        |
| Behållaren kör `pandoc pandoc …` / fel argument                    | Avbilden har en `pandoc` `ENTRYPOINT`; använd `ENTRYPOINT []`                                   |
| Importutdata är tom / zip-steget misslyckas                        | `zip` är inte installerat i avbilden                                                            |
| Behörighetsfel på konverterade filer                               | Avbilden har ingen `tex` användare 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/sv/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.
