Blocco Formula
Notazione matematica e scientifica — frazioni, esponenti, pedici, lettere greche e formule chimiche tramite \ce{...} — renderizzata lato server come immagine con un vero testo alternativo, dato che nessun client email compone realmente formule matematiche.
Come funziona
Il blocco prende una piccola stringa di notazione simile a LaTeX (ad esempio, \frac{-b \pm \sqrt{b^2-4ac}}{2a}) e la renderizza lato server in una PNG tramite GET /api/formula. Si tratta di un endpoint firmato costruito sulle stesse primitive di rasterizzazione/codifica PNG scritte da zero già usate dai blocchi grafico di analisi: non c'è mai alcuna libreria matematica lato client coinvolta, e nessuna dipendenza npm dietro il renderer.
Il contenuto di una formula è fisso una volta autorato, a differenza della GIF del conto alla rovescia, che deve essere rigenerata a ogni visualizzazione per restare accurata. Così l'intera richiesta di rendering (notazione, modalità di visualizzazione, colore) viene firmata direttamente nell'URL, e l'endpoint non ha bisogno di alcuna lettura da Firestore — la risposta porta un header di cache immutabile a lunga durata.
La sintassi di notazione copre frazioni, esponenti (^), pedici (_), radici quadrate, lettere greche, funzioni con nome (\sin, \lim, \log e altre), simboli di insiemistica/logica (\forall, \in, \cup, \neg e altri) e operatori comuni. \left(/\right( sono riconosciuti ma renderizzati a dimensione normale anziché adattati automaticamente al loro contenuto, poiché si tratta di un piccolo renderer bitmap, non di un motore TeX completo. \text{...} torna a parole semplici a metà formula per etichettare un termine.
Le formule chimiche hanno una propria macro \ce{...}: un piccolo sottoinsieme in stile mhchem. I conteggi degli elementi diventano automaticamente pedici (H2O viene renderizzato con un 2 in pedice), le cariche ioniche finali diventano automaticamente apici (H3O+, SO4^2-), e -> viene renderizzato come una freccia di reazione. Questo significa che \ce{2H2 + O2 -> 2H2O} non richiede di scrivere a mano ^/_ per ogni conteggio di atomi e carica.
La sintassi che il parser non riconosce — documenti LaTeX completi, pacchetti, matrici, tabelle — non interrompe mai l'invio. Degrada a renderizzare la stringa di notazione grezza come testo letterale semplice. Questa garanzia è applicata su due livelli: il parser stesso degrada le macro sconosciute a testo letterale, e la chiamata più esterna del renderer non genera mai un'eccezione nemmeno in un caso limite di impaginazione.
L'immagine viene impaginata a una scala appropriata alla propria modalità di visualizzazione: più grande per Block, più piccola per Inline. Si riduce automaticamente se supererebbe il budget di dimensione sicuro per l'email. La maggior parte delle formule ci sta al primo tentativo; solo un'espressione insolitamente lunga richiede una scala più piccola, e un caso patologico si blocca alla scala minima invece di ripetere il tentativo all'infinito.
L'<img> renderizzato porta attributi width/height espliciti dimensionati da quel passaggio di impaginazione, così Outlook e altri client non ricalcolano il layout a scatti mentre l'immagine si carica. Fondamentalmente, porta anche un attributo alt impostato sulla stringa di notazione grezza stessa. Una formula non resta mai intrappolata dentro un'immagine senza un equivalente testuale per un client che blocca le immagini o uno screen reader che non può interpretare una bitmap.
Campi configurabili:
- Notation (LaTeX-like) — il testo della formula, limitato a 300 caratteri (un valore troppo lungo viene troncato silenziosamente prima del rendering, senza mai interrompere l'invio).
- Display mode — Inline (piccolo, sta all'interno di una riga di testo) o Block (più grande, su una riga propria).
- Alignment — Left, Center o Right (solo in modalità Block).
- Color — il colore del tratto della notazione; un valore non valido o vuoto ricade sul colore predefinito quasi nero del renderer invece di raggiungere l'endpoint firmato con un valore che verrebbe rifiutato.
- Background color, padding, border e border radius della card.
Una notazione vuota non renderizza nulla anziché un'immagine vuota — il blocco semplicemente non genera output se non c'è testo da comporre.
Sintassi supportata
Ogni esempio qui sotto è una vera immagine firmata dal vivo dell'endpoint effettivo /api/formula, non un mockup, quindi ciò che vedi qui è esattamente ciò che viene renderizzato nella casella di posta di un destinatario. Qualsiasi cosa non presente in questo elenco (documenti LaTeX completi, pacchetti, matrici, tabelle, accenti come \bar/\hat, ellissi come \dots) non viene riconosciuta. Viene renderizzata letteralmente come proprio testo digitato invece di interrompere l'invio, quindi di solito è evidente in un'anteprima che una macro non è supportata.
Fractions
\frac{a+b}{c-d}Exponents and subscripts
a_n = a_1 + (n-1)dSquare roots, nested with a fraction
\sigma = \sqrt{\frac{1}{n}\sum (x_i - \mu)^2}The quadratic formula — fractions, ±, and a square root together
x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}Greek letters
\Delta = b^2 - 4acNamed functions and limits (upright, not italicized)
\lim_{x \to 0} \frac{\sin x}{x} = 1Set and logic symbols
\forall x \in S,\ x^2 \geq 0\left(/\right) delimiters — recognized, but not auto-scaled to their contents
y = \left(x+1\right)^2\text{...} for a label mid-formula
d = 5\text{ mi}Chemical formulas via \ce{...} — auto-subscripted atom counts, a reaction arrow
\ce{2H2 + O2 -> 2H2O}\ce{...} — auto-superscripted ionic charges
\ce{SO4^2-}Esempi
Subject
This week in study group: the quadratic formula
Un'email di riepilogo per una lezione di chimica compone in linea una reazione bilanciata all'interno di una frase: "Fotosintesi: \ce{6CO2 + 6H2O -> C6H12O6 + 6O2}" proprio accanto al testo esplicativo. Vedi Istruzione per come Formula si integra insieme a Compito, Quiz e Mazzo di flashcard in un digest per la classe. Un set di esercizi di fisica inserisce la formula quadratica in modalità Block come riga propria, con dimensione maggiore e centrata, prima di un esempio svolto. Una newsletter di statistica usa una breve formula in linea come \mu = \frac{\sum x_i}{n} a metà frase senza interrompere il flusso del paragrafo circostante. Nota che si tratta di \mu, non di \bar{x}: le macro per accenti come \bar/\hat non sono nell'elenco di sintassi supportata qui sopra, quindi una semplice lettera greca è il sostituto sicuro per una media dove ne serve una.
Come appare il fallback statico
<div style="margin:8px 0;text-align:left">
<img src="https://mailinapp.com/api/formula?d=eyJub3RhdGlvbiI6...&s=abc123..."
width="184" height="52" alt="E = mc^2"
style="display:inline-block;max-width:100%;height:auto;vertical-align:middle" />
</div>
Esiste un solo livello di rendering — un <img> firmato il cui testo alt porta sempre la stringa di notazione esatta, così la formula comunica comunque anche dove l'immagine stessa non si carica.