@imontene/mdrender 2.9.0 → 2.11.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,34 @@
1
1
  # Cambios
2
2
 
3
+ ## 2.11.0 — 2026-11-06
4
+
5
+ - **Acabado de los diagramas Mermaid**, en todos los temas:
6
+ - esquinas ligeramente redondeadas en todas las figuras: rectángulos, subgraphs, actores y
7
+ notas, y también rombos, hexágonos, paralelogramos, trapecios y banderas, redibujados con
8
+ las esquinas suavizadas;
9
+ - títulos de los subgraphs en negrita, medidos así por Mermaid para que no se desborden;
10
+ - rellenos de figuras y subgraphs con su color, pero al 72 % de opacidad, para que se vean el
11
+ fondo y las marcas de agua. Se quitó la sombra del estilo de Mermaid 12, que agrisaba los
12
+ rellenos translúcidos; los PDF con diagramas pesan menos, porque Chrome la guardaba como
13
+ imagen.
14
+
15
+ ## 2.10.0 — 2026-11-04
16
+
17
+ - **Tema de revista de tecnología** `--theme tech_magazine` (o `tech_magazine-dark`, con la
18
+ página en negro), que no se usa por defecto:
19
+ - con `title`, portada a sangre con una imagen de `tech_magazine/<magazine-name>/`, el nombre
20
+ de la revista, la etiqueta, el título, la bajada y la firma;
21
+ - Inter de 300 a 800 en una columna sin justificar, Newsreader en la bajada, la capitular y
22
+ las citas destacadas; alertas como recuadros, tablas como fichas técnicas, código en
23
+ tarjetas oscuras;
24
+ - pie con la revista, la fecha y el número de página, sin pie en la portada.
25
+ - Front matter de la portada: `magazine-name` (por defecto `AlphaZeroChess`, con 4 portadas
26
+ incluidas), `cover` (número de imagen; al azar si falta), `cover-text` (`top` o `bottom`),
27
+ `cover-ink` (`dark` o `light`) y `accent`. Un `magazine.json` en la carpeta de la revista
28
+ fija su acento y la tinta de cada portada.
29
+ - Nueva especificación del Markdown que esperan los temas `academic_basic` y `tech_magazine`:
30
+ [docs/ESPECIFICACION_TEMAS.md](docs/ESPECIFICACION_TEMAS.md).
31
+
3
32
  ## 2.9.0 — 2026-10-29
4
33
 
5
34
  - Los elementos de listas con viñetas y numeradas (también anidadas o dentro de citas y
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
 
@@ -335,6 +392,12 @@ resumen se separan con una línea en blanco.
335
392
  - Si una fórmula o diagrama tiene un error, el documento se genera igual con una caja roja en
336
393
  su lugar, se informa `error: archivo.md:LÍNEA: mensaje` y el comando termina con código `2`.
337
394
 
395
+ **Acabado de los diagramas**: en todos los temas, las figuras de Mermaid tienen las esquinas
396
+ ligeramente redondeadas (rectángulos, rombos, hexágonos, paralelogramos, trapecios, banderas,
397
+ subgraphs, actores y notas), los títulos de los subgraphs van en negrita, y el relleno de figuras
398
+ y subgraphs conserva su color pero es algo transparente, de modo que se ven el fondo de la página
399
+ y las marcas de agua.
400
+
338
401
  **Autoajuste de diagramas de flujo**: en el PDF, un diagrama más ancho que la columna o más alto
339
402
  que la página se reduce entero, y su texto puede quedar diminuto. Por eso mdrender dibuja cada
340
403
  `flowchart`/`graph` con varios anchos de ajuste de las etiquetas y se queda con el que imprime el
@@ -414,6 +477,6 @@ cambios: [CHANGELOG.md](CHANGELOG.md).
414
477
 
415
478
  ## Licencia
416
479
 
417
- [MIT](LICENSE). Manrope, Inter, JetBrains Mono y STIX Two Text se distribuyen bajo la
480
+ [MIT](LICENSE). Manrope, Inter, JetBrains Mono, STIX Two Text y Newsreader se distribuyen bajo la
418
481
  [SIL Open Font License 1.1](https://openfontlicense.org); los ejecutables incluyen
419
482
  `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
+ }