@imontene/mdrender 2.8.1 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # Cambios
2
2
 
3
+ ## 2.10.0 — 2026-11-04
4
+
5
+ - **Tema de revista de tecnología** `--theme tech_magazine` (o `tech_magazine-dark`, con la
6
+ página en negro), que no se usa por defecto:
7
+ - con `title`, portada a sangre con una imagen de `tech_magazine/<magazine-name>/`, el nombre
8
+ de la revista, la etiqueta, el título, la bajada y la firma;
9
+ - Inter de 300 a 800 en una columna sin justificar, Newsreader en la bajada, la capitular y
10
+ las citas destacadas; alertas como recuadros, tablas como fichas técnicas, código en
11
+ tarjetas oscuras;
12
+ - pie con la revista, la fecha y el número de página, sin pie en la portada.
13
+ - Front matter de la portada: `magazine-name` (por defecto `AlphaZeroChess`, con 4 portadas
14
+ incluidas), `cover` (número de imagen; al azar si falta), `cover-text` (`top` o `bottom`),
15
+ `cover-ink` (`dark` o `light`) y `accent`. Un `magazine.json` en la carpeta de la revista
16
+ fija su acento y la tinta de cada portada.
17
+ - Nueva especificación del Markdown que esperan los temas `academic_basic` y `tech_magazine`:
18
+ [docs/ESPECIFICACION_TEMAS.md](docs/ESPECIFICACION_TEMAS.md).
19
+
20
+ ## 2.9.0 — 2026-10-29
21
+
22
+ - Los elementos de listas con viñetas y numeradas (también anidadas o dentro de citas y
23
+ alertas) se justifican en el PDF como los demás párrafos, con partición de palabras. El
24
+ código y las tablas dentro de una lista siguen alineados a la izquierda.
25
+
3
26
  ## 2.8.1 — 2026-10-29
4
27
 
5
28
  - Tema `academic_basic`: márgenes laterales de 8 mm (antes 16 mm), con más ancho para las dos
package/README.md CHANGED
@@ -24,7 +24,8 @@ Ejemplo: [`examples/ejemplo.md`](examples/ejemplo.md) → [`examples/ejemplo.pdf
24
24
  - 🗂️ **Lotes**: varios archivos, carpetas completas o patrones `docs/**/*.md`.
25
25
  - 🔁 **`--watch`** y **vista previa en vivo** en el navegador.
26
26
  - 🎨 Estilo **Anti-Gravity** por defecto (con variante oscura), los temas clásicos **claro** y
27
- **oscuro**, el tema **académico** a dos columnas (`academic_basic`), o tu propio CSS.
27
+ **oscuro**, el tema **académico** a dos columnas (`academic_basic`), el de **revista de
28
+ tecnología** con portada (`tech_magazine`, con variante oscura), o tu propio CSS.
28
29
  - 🔌 **Sin conexión**: todo va empaquetado; por defecto no descarga nada de internet.
29
30
  - 💻 **Windows 10/11 y Linux** (x64; arm64 en Linux), probado en ambos en cada cambio.
30
31
 
@@ -137,43 +138,43 @@ equipo); `--port` fija el puerto y `--no-open` no abre el navegador.
137
138
 
138
139
  ### Opciones
139
140
 
140
- | Opción | Descripción | Por defecto |
141
- | ------------------------------ | ------------------------------------------------------------------------------------------------ | --------------------- |
142
- | `-o, --output <ruta>` | Archivo de salida, o carpeta con varios archivos | junto al `.md` |
143
- | `-f, --format <pdf\|html>` | Formato de salida | `pdf` |
144
- | `--page-size <tamaño>` | `Letter`, `A4`, `Legal` (también `A3`, `A5`, `Tabloid`) | `Letter` |
145
- | `--margin <valor>` | Las cuatro márgenes como en CSS: `10mm`, `15mm 20mm`… | `10mm` |
146
- | `--margin-top <medida>` | Margen superior, p. ej. `15mm` (prevalece sobre `--margin`) | `10mm` |
147
- | `--margin-right <medida>` | Margen derecho | `10mm` |
148
- | `--margin-bottom <medida>` | Margen inferior | `10mm` |
149
- | `--margin-left <medida>` | Margen izquierdo | `10mm` |
150
- | `--orientation <orientación>` | `portrait` (vertical) o `landscape` (horizontal) | `portrait` |
151
- | `--landscape` | Atajo de `--orientation landscape` | — |
152
- | `--toc` | Tabla de contenidos al inicio (o donde pongas `[[toc]]`) | — |
153
- | `--toc-depth <n>` | Nivel de título más profundo en la tabla de contenidos | `3` |
154
- | `--header <texto>` | Encabezado de página (ver abajo) | — |
155
- | `--footer <texto>` | Pie de página (ver abajo) | `{page} / {pages}` |
156
- | `--no-page-numbers` | Sin el pie con números de página | — |
157
- | `--font <manrope\|inter>` | Tipografía del texto (ver abajo) | `manrope` |
158
- | `--no-justify` | Párrafos alineados a la izquierda en el PDF (ver abajo) | justificado |
159
- | `--watermark <texto>` | Marca de agua en diagonal en cada página del PDF, con el degradado Anti-Gravity | — |
160
- | `--watermark-field` | Campos de luz con el degradado arriba a la izquierda y abajo a la derecha de cada página del PDF | — |
161
- | `--density <densidad>` | `normal` o `compact` (menos espacio entre líneas y bloques) | `normal` |
162
- | `--font-size <tamaño>` | Tamaño del texto en `pt` o `px`, de 6 a 24 pt; p. ej. `10pt` | `10.5pt` |
163
- | `--theme <tema\|css>` | `antigravity`, `antigravity-dark`, `light`, `dark`, `academic_basic` o un `.css` (ver abajo) | `antigravity` |
164
- | `--css <archivo.css>` | CSS adicional (se puede repetir) | — |
165
- | `--mermaid-theme <tema>` | `default`, `neutral`, `dark`, `forest`, `base` | el del tema de página |
166
- | `--mermaid-flip <auto\|never>` | Si el autoajuste puede girar un diagrama de flujo de eje (ver abajo) | `auto` |
167
- | `--no-mermaid-autofit` | Dibujar los diagramas de flujo tal como están escritos | — |
168
- | `--lang <código>` | Idioma del documento; `en` para inglés (`pt`, `fr`, `de`…) | `es` |
169
- | `--title <texto>` | Título del documento (muestra un bloque de título) | primer `# título` |
170
- | `--config <archivo>` | Archivo de configuración | el más cercano |
171
- | `--no-config` | Ignorar `mdrender.config.json` | — |
172
- | `--browser <ruta>` | Ruta a Chrome/Edge/Chromium (o variable `MDRENDER_BROWSER`) | autodetección |
173
- | `--allow-remote` | Permitir que el PDF descargue imágenes/CSS de internet | bloqueado |
174
- | `-w, --watch` | Regenerar al guardar | — |
175
- | `-q, --quiet` | Mostrar solo advertencias y errores | — |
176
- | `-v, --verbose` | Mostrar también configuración, navegador y tiempos | — |
141
+ | Opción | Descripción | Por defecto |
142
+ | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
143
+ | `-o, --output <ruta>` | Archivo de salida, o carpeta con varios archivos | junto al `.md` |
144
+ | `-f, --format <pdf\|html>` | Formato de salida | `pdf` |
145
+ | `--page-size <tamaño>` | `Letter`, `A4`, `Legal` (también `A3`, `A5`, `Tabloid`) | `Letter` |
146
+ | `--margin <valor>` | Las cuatro márgenes como en CSS: `10mm`, `15mm 20mm`… | `10mm` |
147
+ | `--margin-top <medida>` | Margen superior, p. ej. `15mm` (prevalece sobre `--margin`) | `10mm` |
148
+ | `--margin-right <medida>` | Margen derecho | `10mm` |
149
+ | `--margin-bottom <medida>` | Margen inferior | `10mm` |
150
+ | `--margin-left <medida>` | Margen izquierdo | `10mm` |
151
+ | `--orientation <orientación>` | `portrait` (vertical) o `landscape` (horizontal) | `portrait` |
152
+ | `--landscape` | Atajo de `--orientation landscape` | — |
153
+ | `--toc` | Tabla de contenidos al inicio (o donde pongas `[[toc]]`) | — |
154
+ | `--toc-depth <n>` | Nivel de título más profundo en la tabla de contenidos | `3` |
155
+ | `--header <texto>` | Encabezado de página (ver abajo) | — |
156
+ | `--footer <texto>` | Pie de página (ver abajo) | `{page} / {pages}` |
157
+ | `--no-page-numbers` | Sin el pie con números de página | — |
158
+ | `--font <manrope\|inter>` | Tipografía del texto (ver abajo) | `manrope` |
159
+ | `--no-justify` | Párrafos alineados a la izquierda en el PDF (ver abajo) | justificado |
160
+ | `--watermark <texto>` | Marca de agua en diagonal en cada página del PDF, con el degradado Anti-Gravity | — |
161
+ | `--watermark-field` | Campos de luz con el degradado arriba a la izquierda y abajo a la derecha de cada página del PDF | — |
162
+ | `--density <densidad>` | `normal` o `compact` (menos espacio entre líneas y bloques) | `normal` |
163
+ | `--font-size <tamaño>` | Tamaño del texto en `pt` o `px`, de 6 a 24 pt; p. ej. `10pt` | `10.5pt` |
164
+ | `--theme <tema\|css>` | `antigravity`, `antigravity-dark`, `light`, `dark`, `academic_basic`, `tech_magazine`, `tech_magazine-dark` o un `.css` (ver abajo) | `antigravity` |
165
+ | `--css <archivo.css>` | CSS adicional (se puede repetir) | — |
166
+ | `--mermaid-theme <tema>` | `default`, `neutral`, `dark`, `forest`, `base` | el del tema de página |
167
+ | `--mermaid-flip <auto\|never>` | Si el autoajuste puede girar un diagrama de flujo de eje (ver abajo) | `auto` |
168
+ | `--no-mermaid-autofit` | Dibujar los diagramas de flujo tal como están escritos | — |
169
+ | `--lang <código>` | Idioma del documento; `en` para inglés (`pt`, `fr`, `de`…) | `es` |
170
+ | `--title <texto>` | Título del documento (muestra un bloque de título) | primer `# título` |
171
+ | `--config <archivo>` | Archivo de configuración | el más cercano |
172
+ | `--no-config` | Ignorar `mdrender.config.json` | — |
173
+ | `--browser <ruta>` | Ruta a Chrome/Edge/Chromium (o variable `MDRENDER_BROWSER`) | autodetección |
174
+ | `--allow-remote` | Permitir que el PDF descargue imágenes/CSS de internet | bloqueado |
175
+ | `-w, --watch` | Regenerar al guardar | — |
176
+ | `-q, --quiet` | Mostrar solo advertencias y errores | — |
177
+ | `-v, --verbose` | Mostrar también configuración, navegador y tiempos | — |
177
178
 
178
179
  **Página**: por defecto hoja **Letter vertical con márgenes de 10 mm**. Las medidas aceptan
179
180
  `mm`, `cm`, `in` o `px`. `--margin` fija las cuatro márgenes a la vez y `--margin-top`,
@@ -219,6 +220,62 @@ En el HTML se ve a una sola columna. Chrome no ubica las figuras arriba o abajo
219
220
  como en LaTeX: quedan donde aparecen en el texto, y las que ocupan las dos columnas pueden
220
221
  dejar algo de espacio libre antes de ellas.
221
222
 
223
+ Qué debe cumplir un `.md` para cada uno de estos dos temas:
224
+ [docs/ESPECIFICACION_TEMAS.md](docs/ESPECIFICACION_TEMAS.md).
225
+
226
+ **Revista de tecnología** (`--theme tech_magazine`, o `tech_magazine-dark` con la página en
227
+ negro): el aspecto de una revista de divulgación tecnológica. Ejemplo:
228
+ [`examples/revista-tecnologia.md`](examples/revista-tecnologia.md) →
229
+ [`examples/revista-tecnologia.pdf`](examples/revista-tecnologia.pdf).
230
+
231
+ - **Portada a sangre**: con `title` en el front matter, la primera página es una portada con
232
+ una imagen de borde a borde, el nombre de la revista arriba, la etiqueta (`kicker`), el
233
+ título, la bajada (`subtitle`) y la firma (`author` y `date`). La portada no lleva
234
+ encabezado ni pie.
235
+ - Inter de 300 a 800 en una columna amplia sin justificar, y la serifa
236
+ [Newsreader](https://fonts.google.com/specimen/Newsreader) en la bajada, la letra capitular
237
+ del primer párrafo y las citas destacadas (`> cita`).
238
+ - Las alertas (`> [!NOTE]`) son recuadros grises redondeados: su primera línea en negrita hace
239
+ de título. Las tablas son fichas técnicas, el código va en una tarjeta oscura y `---` se ve
240
+ como «• • •».
241
+ - Imágenes solas como figuras con esquinas redondeadas y su texto alternativo como leyenda.
242
+ - Pie con el nombre de la revista y la fecha a la izquierda y el número de página a la
243
+ derecha; `--header` y `--footer` aceptan además `{magazine}`.
244
+
245
+ Campos del front matter (o de `mdrender.config.json`) para la portada:
246
+
247
+ | Campo | Qué hace | Por defecto |
248
+ | --------------- | ---------------------------------------------------------------------------------------- | ------------------------------ |
249
+ | `magazine-name` | Nombre de la revista: aparece en la portada y el pie, y elige la carpeta de imágenes | `AlphaZeroChess` |
250
+ | `cover` | Número de la imagen de portada (`2` o `"02"` toma `cover02.png`) | una al azar en cada conversión |
251
+ | `cover-text` | `top` o `bottom`: dónde va el texto de la portada | `top` |
252
+ | `cover-ink` | `dark` o `light`: texto oscuro sobre imágenes claras o blanco sobre oscuras | `light` (ver abajo) |
253
+ | `accent` | Color de acento: capitular, títulos pequeños, líneas (`"#2f6bff"`, `rgb(…)`, un nombre…) | el de la revista, o `#2f6bff` |
254
+
255
+ Las imágenes se buscan en `tech_magazine/<magazine-name>/`, primero junto al `.md` y si no,
256
+ entre las que trae mdrender (hoy, `AlphaZeroChess` con 4 portadas). El número de una imagen es
257
+ el último grupo de cifras de su nombre: `cover03.png`, `portada-3.jpg`. Admite PNG, JPEG, WebP,
258
+ AVIF y SVG.
259
+
260
+ Un `magazine.json` opcional en esa carpeta fija el acento de la revista y, para cada portada, la
261
+ tinta y el velo detrás del texto. Lo que diga para una portada prevalece sobre `cover-ink`,
262
+ porque la imagen decide qué color se lee sobre ella. En `AlphaZeroChess`, las portadas 1 y 3
263
+ llevan texto oscuro y la 2 y la 4 texto claro:
264
+
265
+ ```json
266
+ {
267
+ "accent": "#2f6bff",
268
+ "covers": {
269
+ "1": { "ink": "dark", "veil": "rgba(255, 255, 255, 0.6)" },
270
+ "2": { "ink": "light", "veil": "rgba(8, 14, 28, 0.85)" }
271
+ }
272
+ }
273
+ ```
274
+
275
+ Sin `title` no hay portada y el documento empieza con el primer párrafo. Con una portada al
276
+ azar, cada conversión puede salir distinta: fija `cover` para que el PDF sea siempre igual.
277
+ Las imágenes van tal cual en el PDF: una PNG de portada de 2 MB suma unos 2 MB.
278
+
222
279
  **Marca de agua**: dos marcas con el degradado azul → cian → violeta del design system
223
280
  Anti-Gravity, cada una por separado y solo en el PDF:
224
281
 
@@ -240,11 +297,12 @@ Ambas van incrustadas en el PDF, también en el encabezado, el pie y los diagram
240
297
  tiene cursivas (el navegador inclina la normal) ni algunos símbolos como `→`, `✓` o `≤`, que
241
298
  se toman de Inter.
242
299
 
243
- **Párrafos justificados**: en el PDF, los párrafos del texto, de las citas y de las alertas
244
- se justifican, y las palabras largas se parten con guion al final de la línea según el idioma
245
- del documento (`lang`: español, inglés, portugués, francés, alemán o italiano; en otros idiomas
246
- se justifica sin partir palabras). Listas, tablas, notas al pie, el índice y los diagramas
247
- quedan alineados a la izquierda, igual que el HTML. El texto del PDF solo lleva el guion donde
300
+ **Párrafos justificados**: en el PDF, los párrafos del texto, de las citas y de las alertas, y
301
+ los elementos de listas con viñetas o numeradas (también anidadas) se justifican, y las palabras
302
+ largas se parten con guion al final de la línea según el idioma del documento (`lang`: español,
303
+ inglés, portugués, francés, alemán o italiano; en otros idiomas se justifica sin partir
304
+ palabras). Tablas, notas al pie, el índice, los diagramas y el código dentro de una lista quedan
305
+ alineados a la izquierda, y el HTML no cambia. El texto del PDF solo lleva el guion donde
248
306
  la palabra se corta, así que copiar y buscar funcionan con las palabras completas.
249
307
  `--no-justify` (o `justify: false`) vuelve a alinear a la izquierda.
250
308
 
@@ -413,6 +471,6 @@ cambios: [CHANGELOG.md](CHANGELOG.md).
413
471
 
414
472
  ## Licencia
415
473
 
416
- [MIT](LICENSE). Manrope, Inter, JetBrains Mono y STIX Two Text se distribuyen bajo la
474
+ [MIT](LICENSE). Manrope, Inter, JetBrains Mono, STIX Two Text y Newsreader se distribuyen bajo la
417
475
  [SIL Open Font License 1.1](https://openfontlicense.org); los ejecutables incluyen
418
476
  `THIRD-PARTY-NOTICES.txt` con las licencias de todos los componentes.
@@ -0,0 +1,19 @@
1
+ /* mdrender magazine theme, dark page (tech_magazine-dark): loaded after theme-tech-magazine.css. */
2
+
3
+ :root {
4
+ --tm-bg: #000000;
5
+ --tm-ink: #f5f5f7;
6
+ --tm-ink-secondary: #d2d2d7;
7
+ --tm-ink-muted: #98989d;
8
+ --tm-hairline: #38383a;
9
+ --tm-surface: #1c1c1e;
10
+ --tm-code-bg: #1c1c1e;
11
+ /* The accent lightened so it reads on black. */
12
+ --tm-accent-text: color-mix(in srgb, var(--tm-accent) 72%, white);
13
+ }
14
+
15
+ /* Pictures drawn on a light card keep it, outlined so they do not float. */
16
+ figure img,
17
+ .figure img {
18
+ box-shadow: 0 0 0 1px #2c2c2e;
19
+ }