Sí, creo que el resumen de Sam es acertado: si queremos que el correo electrónico / la vista de impresión muestren matemáticas renderizadas, necesitamos renderizado de matemáticas del lado del servidor (o al menos “pre-renderizado” del lado del servidor), porque los clientes de correo electrónico no ejecutarán MathJax.
Un enfoque realista sería:
- Durante la cocción (o en un trabajo en segundo plano después de la cocción), buscar los tramos de matemáticas (en línea + visualización).
- Renderizar cada expresión a SVG (o MathML como alternativa) usando MathJax en un entorno Node.
- Reemplazar las matemáticas en el HTML cocido utilizado para correo electrónico/impresión con:
\u003csvg ...\u003een línea (mejor fidelidad, sin búsqueda externa), o\u003cimg src=\"data:image/svg+xml;base64,...\"\u003e(más compatible para algunos clientes, pero puede volverse grande).
- Almacenar en caché mediante una clave estable (por ejemplo,
sha256(latex + display_mode + macros + font_config)), para que solo rendericemos una vez por fórmula única.
Las partes complicadas (pero manejables si se delimitan cuidadosamente):
- Simulación de DOM: La salida de “navegador” de MathJax quiere un DOM; por lo que probablemente necesitaríamos
mathjax-full+jsdom(o usar la ruta del adaptador puro). - Rendimiento / tiempos de espera: hacerlo de forma asíncrona en una cola de trabajos y degradar elegantemente (dejar LaTeX tal como está si el renderizado falla).
- Peculiaridades de los clientes de correo electrónico: algunos clientes eliminan SVG; por lo que tener un plan de respaldo es importante (por ejemplo, texto plano/LaTeX, o MathML donde sea compatible).
Si alguien quiere una prueba rápida, el primer experimento que haría es:
- Un pequeño script de Node usando
mathjax-fullpara renderizar$begin:math:text$E\\=mc\\^2$end:math:text$a SVG, - Ver qué suposiciones hace (DOM vs adaptador),
- Luego decidir si MiniRacer es un callejón sin salida y deberíamos tratar esto como “necesita Node disponible” (o un servicio pequeño).
Si esa prueba funciona, entonces podemos hablar sobre dónde encaja (tubería de correo electrónico vs cocción vs vista de impresión), y qué almacenamos en caché/guardamos.