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

# Import och export med Pandoc

### Pandoc import/export

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

#### Vad det gör

| Riktning      | Från → Till              | Format                     | Var                                                                                                         |
| ------------- | ------------------------ | -------------------------- | ----------------------------------------------------------------------------------------------------------- |
| **Importera** | dokument → LaTeX-projekt | `docx`, `markdown`         | *Nytt projekt → Importera* (laddar upp ett `.docx` / `.md` och gör det till ett redigerbart `.tex` projekt) |
| **Exportera** | 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 det **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`). Det styr importvägarna, exportvägarna och `ol-ExposedSettings.enablePandocConversions` flaggan 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`). Det styr slutpunkterna som kör Pandoc.
* Om den är aktiverad på `web` men inte på `clsi` (eller tvärtom) kommer gränssnittet att visas men konverteringen att misslyckas — håll dem synkade.

2\. `PANDOC_IMAGE` — containeravbildningen 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-containrar som startas av `clsi`:

1. **`clsi` måste köras i sandlådemodus med Docker-åtkomst.** I utvecklingsstacken `clsi` har redan `SANDBOXED_COMPILES=true` och Docker-socketen på värden (`/var/run/docker.sock`) monterad.
2. **Den `PANDOC_IMAGE` måste finnas** på den Docker-värden (hämtad eller byggd lokalt) innan 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 avbildningen ä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` plockar upp variablerna.

***

### Bygga Pandoc-avbildningen

En standard-Pandoc-avbildning fungerar eftersom clsi anropar Pandoc generiskt (inga anpassade mallar/filter). Den behöver bara tre nödvändiga komponenter vid körning, alla hanterade av `develop/pandoc/Dockerfile`:

```dockerfile
# Anpassad Pandoc-avbildning för clsis sandlådekonverteringar
# (import/export: docx / markdown / html, via ENABLE_PANDOC_CONVERSIONS).
#
# Varför detta finns:
#   Den officiella quay.io/sharelatex/pandoc:3.9-avbildningen är privat (401, kan inte hämtas).
#   clsi anropar pandoc generiskt (inga anpassade mallar/filter/reference-doc), så en
#   standard-pandocavbildning fungerar — den behöver bara tre nödvändiga komponenter 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 konverteringscontainern (User=$TEXLIVE_IMAGE_USER):
#        - `tex` med UID 1000 — standard för dev / mikrotjänster.
#        - `www-data` med UID 33 — Server Pro sandlådade *syskon*-containrar sätter
#          TEXLIVE_IMAGE_USER=www-data (se /etc/overleaf/env.sh). clsi (som kör som
#          www-data) skapar konverteringskatalogen ägd av 33:33, så containern måste köra
#          som www-data(33) för att skriva till den — annars misslyckas pandoc med antingen
#          "kan inte hitta användaren www-data" eller "åtkomst nekas".
#      Alpine levererar redan en `www-data`-grupp med GID 82, så vi flyttar den till GID 33 för att
#      matcha värden/texlive-avbildningen.
#
# 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 skrivande stund). Lås till en specifik
# pandoc/core-tagg 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
```

I produktion, lås `pandoc/core` till en specifik version istället för `senaste` för reproducerbara byggen, och sätt `PANDOC_IMAGE` till sökvägen i ditt register.

***

### 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 avbildningen (401)                      | `PANDOC_IMAGE` pekar fortfarande på den privata standardinställningen; bygg/peka på din egen avbildning |
| Containern kör `pandoc pandoc …` / fel argument                    | Avbildningen har en `pandoc` `ENTRYPOINT`; använd `ENTRYPOINT []`                                       |
| Importutdata är tom / zip-steget misslyckas                        | `zip` är inte installerat i avbildningen                                                                |
| Behörighetsfel på konverterade filer                               | Avbildningen 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://overleaf-pro.ayaka.space/on-premises/sv/konfiguration/overleaf-toolkit/import-och-export-med-pandoc.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.
