> 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/es/configuracion/overleaf-toolkit/importacion-y-exportacion-de-pandoc.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 mediante Pandoc)                               |

***

### variables de entorno

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

1\. `ENABLE_PANDOC_CONVERSIONS` — el interruptor principal

```bash
ENABLE_PANDOC_CONVERSIONS=true
```

* Tipo: booleano (`true` lo activa; cualquier otra cosa lo desactiva).
* **Debe configurarse en AMBOS los `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 el `ol-ExposedSettings.enablePandocConversions` indicador que le dice al frontend si debe mostrar la interfaz de Importación/Exportación.
  * `clsi` lo lee en `enablePandocConversions` (`services/clsi/config/settings.defaults.cjs`). Controla los endpoints que ejecutan Pandoc.
* Si está habilitado 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 iniciados por `clsi`:

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

***

### Configuración rápida

El stack 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) el stack para que `clsi` y `web` aplique 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:
#   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
#   una imagen estándar de pandoc funciona — solo necesita tres elementos esenciales en tiempo de ejecución que clsi asume:
#
#   1. Sin ENTRYPOINT de `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 — valor predeterminado de desarrollo / microservicios.
#        - `www-data` con UID 33 — los contenedores *hermanos* aislados de Server Pro establecen
#          TEXLIVE_IMAGE_USER=www-data (ver /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 incluye un grupo `www-data` en el GID 82, así que lo movemos al GID 33 para
#      que coincida con la imagen del host/texlive.
#
# Compilar (la etiqueta debe coincidir con PANDOC_IMAGE en develop/dev.env):
#   docker build -t overleaf-pandoc:local develop/pandoc
#
# Nota: fijado a `latest` (pandoc 3.10 en el momento de escribir esto). Fija un
# etiqueta 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 asígnale una etiqueta para que coincida con `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` a la ruta de tu registro.

***

### Solución de problemas

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