Sì, penso che il riassunto di Sam sia perfetto: se vogliamo che le email / la vista di stampa mostrino la matematica renderizzata, abbiamo bisogno del rendering della matematica lato server (o almeno di una “pre-renderizzazione” lato server), perché i client di posta elettronica non eseguiranno MathJax.
Un approccio realistico sarebbe:
- Durante la cottura (o in un processo in background dopo la cottura), trovare gli span matematici (inline + display).
- Renderizzare ogni espressione in SVG (o MathML come fallback) usando MathJax in un ambiente Node.
- Sostituire la matematica nell’HTML cotto utilizzato per email/stampa con uno dei seguenti:
<img>inline\u003csvg ...\u003e(migliore fedeltà, nessun recupero esterno), oppure<img>\u003cimg src=\"data:image/svg+xml;base64,...\"\u003e(più compatibile per alcuni client, ma può diventare grande).
- Memorizzare nella cache tramite una chiave stabile (ad esempio
sha256(latex + display_mode + macros + font_config)), in modo da eseguire il rendering una sola volta per ogni formula unica.
Le parti complicate (ma gestibili se circoscritte attentamente):
- Simulazione DOM: L’output “browser” di MathJax vuole un DOM; quindi probabilmente avremmo bisogno di
mathjax-full+jsdom(o usare la rotta dell’adattatore puro). - Prestazioni / timeout: farlo in modo asincrono in una coda di lavoro e degradare con grazia (lasciare il LaTeX così com’è se il rendering fallisce).
- Bizzarrie dei client di posta elettronica: alcuni client rimuovono SVG; quindi avere un piano di fallback è importante (ad esempio, testo semplice/LaTeX, o MathML dove supportato).
Se qualcuno vuole fare un rapido test, il primo esperimento che farei è:
- Un minuscolo script Node che utilizza
mathjax-fullper renderizzare$begin:math:text$E\\=mc\\^2$end:math:text$in SVG, - Vedere quali presupposti fa (DOM vs adattatore),
- Quindi decidere se MiniRacer è un vicolo cieco e dovremmo trattarlo come “necessita di Node disponibile” (o un piccolo servizio).
Se quel test funziona, allora possiamo discutere dove si inserisce (pipeline email vs cottura vs vista di stampa) e cosa memorizziamo nella cache/archiviamo.