> 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/el/rythmisi/overleaf-toolkit/eisagogi-kai-eksagogi-pandoc.md).

# Εισαγωγή και εξαγωγή Pandoc

### Εισαγωγή / Εξαγωγή Pandoc

Το Overleaf μπορεί να μετατρέπει έγγραφα προς και από LaTeX χρησιμοποιώντας [Pandoc](https://pandoc.org/). Η μετατροπή εκτελείται μέσα σε ένα **απομονωμένο κοντέινερ Docker** που διαχειρίζεται το `clsi` service, οπότε η λειτουργία είναι απενεργοποιημένη από προεπιλογή και πρέπει να ενεργοποιηθεί με μερικές μεταβλητές περιβάλλοντος.

#### Τι κάνει

| Κατεύθυνση   | Από → Προς           | Μορφές                     | Πού                                                                                                |
| ------------ | -------------------- | -------------------------- | -------------------------------------------------------------------------------------------------- |
| **Εισαγωγή** | έγγραφο → έργο LaTeX | `docx`, `markdown`         | *Νέο έργο → Εισαγωγή* (ανεβάζει ένα `.docx` / `.md` και το μετατρέπει σε επεξεργάσιμο `.tex` έργο) |
| **Εξαγωγή**  | έργο LaTeX → έγγραφο | `docx`, `markdown`, `html` | *Μενού → Λήψη / Εξαγωγή* (αποδίδει το έργο μέσω Pandoc)                                            |

***

### Μεταβλητές περιβάλλοντος

Υπάρχουν **δύο** μεταβλητές που έχουν σημασία, και μία παρόμοια που το κάνει **μην**.

1\. `ENABLE_PANDOC_CONVERSIONS` — ο κύριος διακόπτης

```bash
ENABLE_PANDOC_CONVERSIONS=true
```

* Τύπος: boolean (`true` το ενεργοποιεί· οτιδήποτε άλλο το απενεργοποιεί).
* **Πρέπει να οριστεί ΚΑΙ στα δύο τα `web` και `clsi` services.** Είναι ξεχωριστές διεργασίες με ξεχωριστή ρύθμιση:
  * `web` το διαβάζει στο `enablePandocConversions` (`services/web/config/settings.defaults.js`). Ελέγχει τις διαδρομές εισαγωγής, τις διαδρομές εξαγωγής και το `ol-ExposedSettings.enablePandocConversions` σημαία που λέει στο frontend αν θα εμφανίσει το UI Εισαγωγής/Εξαγωγής.
  * `clsi` το διαβάζει στο `enablePandocConversions` (`services/clsi/config/settings.defaults.cjs`). Ελέγχει τα endpoints που εκτελούν το Pandoc.
* Αν είναι ενεργοποιημένο στο `web` αλλά όχι στο `clsi` (ή το αντίστροφο), το UI θα εμφανιστεί αλλά η μετατροπή θα αποτύχει — κρατήστε τα συγχρονισμένα.

2\. `PANDOC_IMAGE` — η εικόνα κοντέινερ που εκτελεί το clsi για να μετατρέπει

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

### Προαπαιτούμενα

Επειδή οι μετατροπές εκτελούνται ως κοντέινερ Docker που εκκινούνται από το `clsi`:

1. **`clsi` πρέπει να εκτελείται σε απομονωμένη λειτουργία με πρόσβαση στο Docker.** Στο stack ανάπτυξης `clsi` ήδη έχει `SANDBOXED_COMPILES=true` και το socket Docker του host (`/var/run/docker.sock`)
2. **Το `PANDOC_IMAGE` πρέπει να υπάρχει** σε εκείνον τον Docker host (κατεβασμένο ή χτισμένο τοπικά) πριν από την πρώτη μετατροπή.

***

### Γρήγορη ρύθμιση

Το stack ανάπτυξης (`develop/dev.env`) περιλαμβάνει ήδη τα εξής:

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

Εφόσον η επίσημη εικόνα είναι ιδιωτική, χτίστε την ενσωματωμένη **μία φορά** πριν χρησιμοποιήσετε τη λειτουργία:

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

Στη συνέχεια (επαν)εκκινήστε το stack ώστε `clsi` και `web` να φορτώσει τις μεταβλητές.

***

### Δημιουργία της εικόνας Pandoc

Μια τυπική εικόνα Pandoc λειτουργεί επειδή το clsi καλεί το Pandoc γενικά (χωρίς προσαρμοσμένα πρότυπα/φίλτρα). Χρειάζεται μόνο τρία βασικά στοιχεία εκτέλεσης, και όλα καλύπτονται από το `develop/pandoc/Dockerfile`:

```dockerfile
# Προσαρμοσμένη εικόνα Pandoc για τις απομονωμένες μετατροπές του clsi
# (εισαγωγή/εξαγωγή: docx / markdown / html, μέσω του ENABLE_PANDOC_CONVERSIONS).
#
# Γιατί υπάρχει αυτό:
#   Η επίσημη εικόνα quay.io/sharelatex/pandoc:3.9 είναι ιδιωτική (401, δεν μπορεί να γίνει pull).
#   Το clsi καλεί το pandoc γενικά (χωρίς προσαρμοσμένα πρότυπα/φίλτρα/reference-doc), οπότε μια
#   τυπική εικόνα pandoc λειτουργεί — χρειάζεται μόνο τρία βασικά στοιχεία εκτέλεσης που το clsi θεωρεί δεδομένα:
#
#   1. Χωρίς `pandoc` ENTRYPOINT — το clsi εκτελεί Cmd ["pandoc", ...]; με το προεπιλεγμένο
#      entrypoint αυτό θα γινόταν `pandoc pandoc ...`.
#   2. `zip` — το δεύτερο βήμα της μετατροπής εισαγωγής εκτελεί `zip -r` για να πακετάρει την έξοδο.
#   3. Χρήστες που ταιριάζουν με τον τρόπο που το clsi εκτελεί το κοντέινερ μετατροπής (User=$TEXLIVE_IMAGE_USER):
#        - `tex` στο UID 1000 — προεπιλογή dev / microservices.
#        - `www-data` στο UID 33 — τα απομονωμένα *sibling* κοντέινερ του Server Pro ορίζουν
#          TEXLIVE_IMAGE_USER=www-data (δείτε /etc/overleaf/env.sh). Το clsi (εκτελούμενο ως
#          www-data) δημιουργεί τον κατάλογο μετατροπής με ιδιοκτήτη 33:33, οπότε το κοντέινερ πρέπει να εκτελείται
#          ως www-data(33) για να γράφει μέσα σε αυτόν — διαφορετικά το pandoc αποτυγχάνει είτε με
#          "unable to find user www-data" είτε με "permission denied".
#      Το Alpine ήδη περιλαμβάνει μια ομάδα `www-data` στο GID 82, οπότε τη μεταφέρουμε στο GID 33 για να
#      ταιριάζει με το host/texlive image.
#
# Δημιουργία (το tag πρέπει να ταιριάζει με το PANDOC_IMAGE στο develop/dev.env):
#   docker build -t overleaf-pandoc:local develop/pandoc
#
# Σημείωση: καρφιτσωμένο στο `latest` (pandoc 3.10 τη στιγμή της συγγραφής). Καρφιτσώστε σε συγκεκριμένο
# tag του pandoc/core για πλήρως αναπαραγώγιμες δημιουργίες.
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
```

Χτίστε το και βάλτε tag ώστε το tag να ταιριάζει `PANDOC_IMAGE`:

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

Για παραγωγή, καρφιτσώστε `pandoc/core` σε συγκεκριμένη έκδοση αντί για `latest` για αναπαραγώγιμες δημιουργίες, και ορίστε `PANDOC_IMAGE` στη διαδρομή του registry σας.

***

### Αντιμετώπιση προβλημάτων

| Σύμπτωμα                                                            | Πιθανή αιτία                                                                                        |
| ------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| Τα κουμπιά Εισαγωγής/Εξαγωγής δεν εμφανίζονται                      | `ENABLE_PANDOC_CONVERSIONS` μην `true` στο **web**                                                  |
| Το UI εμφανίζεται αλλά η μετατροπή αποτυγχάνει με σφάλμα διακομιστή | `ENABLE_PANDOC_CONVERSIONS` δεν έχει οριστεί στο **clsi**, ή `PANDOC_IMAGE` λείπει στον host Docker |
| `clsi` σφάλμα κατά το pull της εικόνας (401)                        | `PANDOC_IMAGE` δείχνει ακόμα στο ιδιωτικό προεπιλεγμένο· χτίστε/δείξτε τη δική σας εικόνα           |
| Το κοντέινερ εκτελεί `pandoc pandoc …` / λανθασμένα ορίσματα        | Η εικόνα έχει ένα `pandoc` `ENTRYPOINT`; χρησιμοποιήστε `ENTRYPOINT []`                             |
| Η έξοδος της εισαγωγής είναι κενή / το βήμα zip αποτυγχάνει         | `zip` δεν είναι εγκατεστημένο στην εικόνα                                                           |
| Σφάλματα δικαιωμάτων στα μετατρεπόμενα αρχεία                       | Η εικόνα δεν έχει `tex` χρήστη στο 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/el/rythmisi/overleaf-toolkit/eisagogi-kai-eksagogi-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.
