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

# Importación y exportación de Pandoc

### Importación / Exportación de Pandoc

Overleaf puede convertir documentos a y desde LaTeX usando [Pandoc](https://pandoc.org/). La conversión se ejecuta dentro de un **contenedor Docker aislado** gestionado por el `clsi` servicio, por lo que la función está desactivada por defecto y debe activarse con un par de variables de entorno.

#### Qué hace

| Dirección    | De → A                     | Formatos                   | Dónde                                                                                               |
| ------------ | -------------------------- | -------------------------- | --------------------------------------------------------------------------------------------------- |
| **Importar** | documento → proyecto LaTeX | `docx`, `markdown`         | *Nuevo proyecto → Importar* (sube un `.docx` / `.md` y lo convierte en un editable `.tex` proyecto) |
| **Exportar** | proyecto LaTeX → documento | `docx`, `markdown`, `html` | *Menú → Descargar / Exportar* (renderiza el proyecto a través de Pandoc)                            |

***

### Variables de entorno

Hay **dos** variables que importan, y una parecida que no **no**.

1\. `ENABLE_PANDOC_CONVERSIONS` — el interruptor maestro

```bash
ENABLE_PANDOC_CONVERSIONS=true
```

* Tipo: booleano (`true` lo activa; cualquier otra cosa lo desactiva).
* **Debe configurarse en AMBOS `web` y `clsi` servicios.** Son procesos separados con configuración separada:
  * `web` lo lee en `enablePandocConversions` (`services/web/config/settings.defaults.js`). Controla las rutas de importación, las rutas de exportación y la `ol-ExposedSettings.enablePandocConversions` bandera que le dice al frontend si mostrar la interfaz de Importar/Exportar.
  * `clsi` lo lee en `enablePandocConversions` (`services/clsi/config/settings.defaults.cjs`). Controla los endpoints que ejecutan Pandoc.
* Si está activado en `web` pero no en `clsi` (o viceversa), la interfaz aparecerá pero la conversión fallará — mantenlos sincronizados.

2\. `PANDOC_IMAGE` — la imagen de contenedor que clsi ejecuta para convertir

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

### Requisitos previos

Como las conversiones se ejecutan como contenedores Docker lanzados por `clsi`:

1. **`clsi` debe ejecutarse en modo aislado con acceso a Docker.** En la pila de desarrollo `clsi` ya tiene `SANDBOXED_COMPILES=true` y el socket de Docker del host (`/var/run/docker.sock`) montado.
2. **La `PANDOC_IMAGE` debe estar presente** en ese host Docker (descargada o compilada localmente) antes de la primera conversión.

***

### Configuración rápida

La pila de desarrollo (`develop/dev.env`) ya incluye:

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

Como la imagen oficial es privada, compila la incluida **una vez** antes de usar la función:

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

Luego reinicia (o inicia de nuevo) la pila para que `clsi` y `web` tomen las variables.

***

### Compilando la imagen de Pandoc

Una imagen estándar de Pandoc funciona porque clsi invoca Pandoc de forma genérica (sin plantillas/filtros personalizados). Solo necesita tres elementos esenciales en tiempo de ejecución, todos gestionados por `develop/pandoc/Dockerfile`:

```dockerfile
# Imagen personalizada de Pandoc para las conversiones aisladas de clsi
# (importación/exportación: docx / markdown / html, mediante ENABLE_PANDOC_CONVERSIONS).
#
# Por qué existe esto:
#   La imagen oficial quay.io/sharelatex/pandoc:3.9 es privada (401, no se puede descargar).
#   clsi invoca pandoc de forma genérica (sin plantillas/filtros/reference-doc personalizados), así que una
#   imagen estándar de pandoc funciona: solo necesita tres elementos esenciales en tiempo de ejecución que clsi supone:
#
#   1. Sin ENTRYPOINT `pandoc` — clsi ejecuta Cmd ["pandoc", ...]; con el
#      entrypoint predeterminado eso se convertiría en `pandoc pandoc ...`.
#   2. `zip` — el segundo paso de la conversión de importación ejecuta `zip -r` para empaquetar la salida.
#   3. Usuarios que coincidan con cómo clsi ejecuta el contenedor de conversión (User=$TEXLIVE_IMAGE_USER):
#        - `tex` con UID 1000 — predeterminado de desarrollo / microservicios.
#        - `www-data` con UID 33 — los contenedores *hermanos* aislados de Server Pro configuran
#          TEXLIVE_IMAGE_USER=www-data (véase /etc/overleaf/env.sh). clsi (ejecutándose como
#          www-data) crea el directorio de conversión propiedad de 33:33, así que el contenedor debe ejecutarse
#          como www-data(33) para escribir en él; de lo contrario, pandoc falla con
#          "unable to find user www-data" o "permission denied".
#      Alpine ya trae un grupo `www-data` con GID 82, así que lo movemos a GID 33 para
#      que coincida con el host/la imagen texlive.
#
# Compilar (la etiqueta debe coincidir con PANDOC_IMAGE en develop/dev.env):
#   docker build -t overleaf-pandoc:local develop/pandoc
#
# Nota: fijado en `latest` (pandoc 3.10 al momento de escribir esto). Fija a una
# etiqueta específica de pandoc/core para compilaciones totalmente reproducibles.
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
```

Compílalo y etiquétalo para que la etiqueta coincida `PANDOC_IMAGE`:

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

Para producción, fija `pandoc/core` a una versión específica en lugar de `latest` para compilaciones reproducibles, y establece `PANDOC_IMAGE` como la ruta de tu registro.

***

### Solución de problemas

| Síntoma                                                                 | Causa probable                                                                                      |
| ----------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| No aparecen los botones de Importar/Exportar                            | `ENABLE_PANDOC_CONVERSIONS` no `true` en **web**                                                    |
| La interfaz aparece, pero la conversión falla con un error del servidor | `ENABLE_PANDOC_CONVERSIONS` no configurado en **clsi**, o `PANDOC_IMAGE` faltante en el host Docker |
| `clsi` error al descargar la imagen (401)                               | `PANDOC_IMAGE` sigue apuntando al valor privado predeterminado; compila/apunta a tu propia imagen   |
| El contenedor se ejecuta `pandoc pandoc …` / argumentos incorrectos     | La imagen tiene un `pandoc` `ENTRYPOINT`; usa `ENTRYPOINT []`                                       |
| La salida de importación está vacía / falla el paso zip                 | `zip` no está instalado en la imagen                                                                |
| Errores de permisos en los archivos convertidos                         | La imagen no tiene un usuario `tex` con 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/es/configuracion/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.
