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

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

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

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

#### Τι κάνει

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

***

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

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

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

```bash
ENABLE_PANDOC_CONVERSIONS=true
```

* Τύπος: boolean (`true` το ενεργοποιεί· οτιδήποτε άλλο το απενεργοποιεί).
* **Πρέπει να οριστεί ΚΑΙ στα ΔΥΟ τα `web` και `clsi` υπηρεσίες.** Είναι ξεχωριστές διεργασίες με ξεχωριστή διαμόρφωση:
  * `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.** Στη στοίβα ανάπτυξης `clsi` έχει ήδη `SANDBOXED_COMPILES=true` και το socket Docker του host (`/var/run/docker.sock`) προσαρτημένο.
2. **Το `PANDOC_IMAGE` πρέπει να υπάρχει** σε εκείνον τον Docker host (τραβηγμένο ή χτισμένο τοπικά) πριν από την πρώτη μετατροπή.

***

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

Η στοίβα ανάπτυξης (`develop/dev.env`) συνοδεύεται ήδη από:

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

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

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

Έπειτα (επαν)εκκινήστε τη στοίβα ώστε `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, δεν μπορεί να ληφθεί).
#   Το 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 — προεπιλογή ανάπτυξης / microservices.
#        - `www-data` με UID 33 — τα απομονωμένα *αδελφά* κοντέινερ του 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.
#
# Build (το tag πρέπει να ταιριάζει με το PANDOC_IMAGE στο develop/dev.env):
#   docker build -t overleaf-pandoc:local develop/pandoc
#
# Σημείωση: καρφιτσωμένο στο `latest` (pandoc 3.10 κατά τη συγγραφή). Καρφιτσώστε σε συγκεκριμένο
# pandoc/core tag για πλήρως αναπαραγώγιμες δημιουργίες.
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` λείπει από τον Docker host |
| `clsi` σφάλμα λήψης της εικόνας (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://ayakaleaf-pro.ayaka.space/on-premises/el/diamorfosi/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.
