Come scrivere espressioni in Html

14 gen. '99
Leonardo Maffi

N.B. questo documento è ancora un poco disorganizzato.

    Oggi nei computer esistono moltissimi formati testuali, molti dei quali complessi, proprietari, illeggibili dalle persone e difficilmente convertibili in altri formati. Si è nel marasma più totale. L'Html e suoi sviluppi stanno emergendo come uno dei principali e più diffusi. C'è la necessità di arrivare a uno o pochi formati testuali. Ma i testi devono assolvere a molti scopi, e chi scrive un romanzo, un articolo su una rivista raffinata, una tesi di analisi numerica o di chimica, chi deve fare una pagina pubblicitaria sul Web, ecc, hanno tutti esigenze differenti.
    Ma non bisogna dimenticare che il Web ha diffusione mondiale e usare troppi standard potrebbe creare problemi. Inoltre occorre pensare non solo ai molti sitemi di computer che esistono oggi, ma anche a quelli che esisteranno in futuro. Non è una richiesta esosa pretendere che fra quaranta anni si possa continuare a leggere doscumenti scritti oggi. Ben pochi fra i file oggi in uso saranno correntemente utilizzabili nel 2040 o oltre. Io penso che un testo scritto correttamente in Html sarà leggibile, almeno da convertitori, per almeno altri venti anni. Oggi usare formati diversi dal Txt ASCII a 7 bit non garantisce di essere leggibili a lunga scadenza. Mentre i libri di Gutemberg sono ben leggibili e lo stesso vale per le ben più antiche tavolette di argilla (Vedi La conservazione dei documenti digitali, di Jeff Rothenberg, Le Scienze n. 319, marzo 1995).
    La generazione di formule in Html è molto importante. Occorre uno standard a larga diffusione, altrimenti in futuro sarà molto difficile leggere testi elettronci scritti in questi anni. La situazione mi sembra un poco paradossale pensando che sono i ricercatori, fisici, che hanno creato il WWW, ed ancora oggi non c'è un modo decente per pubblicare formule. A meno di usare Ps, Ddf, ecc.
    Non è male cercare di scrivere in un formato di file leggibile per almeno altri venti anni. Un modo per rendere longevo un formato di file è utilizzare l'Ascii a 7 bit e definire i comandi nel file che siano leggibili da una persona. L'Html è fatto in tale modo. I file Doc del Word 97 no. Tale restrizione ha il difetto di rendere il file meno sintetico, ma ha il vantaggio che in caso di necessità sono sufficienti un editor di testi per scrivere e leggere il file. Ciò fa sì che almeno una parte del contenuto possa essere leggibile anche a lunga scadenza, da persone prive di manuali del formato file.
    Oggi esistono vari metodi per scrivere formule in un documento leggibile da computer. Ma quasi tutti hanno dei difetti. Secondo me un metodo ideale deve essere massimamente standard e diffuso, deve essere sintetico e privo di ridondanze inutili per una persona, deve essere comprensibile alla lettura in inglese con un editor Ascii anche a costo della massima sintetiticità (anche se in un formato per computer fosse esprimibile con la metà o un terzo di bit), e deve essere estendibile e elastico in modo da poter essere usato negli infiniti campi della matematica, fisica, chimica, ecc, presenti sul pianeta, anche del futuro a medio termine (diciamo 100 anni).
(Il fatto è che nessuno dei maggiori produttori di browser sente che la necessità di scrivere formule è molto diffusa. Per la maggior parte delle persone testo lampeggiante o scorrevole è più importante).
    Inventare tale formato non è uno scherzo. Anche perchè si hanno interessi contrastanti. Da una parte si vuole che sia molto sintetico e leggibile da chiunque in inglese, dall'altra si vuole che con esso sia possibile esprimere qualsiasi formula, in base ai propri gusti tipografici. Si possono volere caratteri di colore, forma, font, dimensione differenti. Si può desiderare inventare nuovi simboli e nuove disposizioni di simboli, di inserire collegamenti ipertestuali e una cera interattività. I formati oggi esistenti rispettano quasi tutte queste richieste, ma nessuno contemporaneamente. In particolare non è facile con nessun formato definire nuovi simboli e nuovi modi di comporli (forse è possibile in TEX, non lo conosco a sufficienza, vedi più avanti).
(I formati testuali più longevi per fare ciò sono una descrizione in inglese in Ascii della formula, allegata ad una bitmap binaria di dimensioni definite nel testo (ad esempio un Pbm), che mostri le formule. Il tutto non è utilizzabile facilmente da un computer, ma lo è da una persona, e si presume che le persone cambino più lentamente dei computer.)
Per rendere il formato compatto e comprensibile occorre che contenga quasi solo la semantica della formula, espressa in inglese. Ciò ha lo svantaggio di non poter definire un formalismo e un modo di visualizzazione personali. Formati come il TEX sono quasi semantici, cioè producono formule eseguibili da un computer, con lo svantaggio di avere un sintassi complessa, che richiede un manuale per essere capita. Sono comunque sufficientemente elastici dal punto di vista tipografico. Metodi come MathML (vedi oltre) sono quasi illeggibili da una persona, nonostante siano scritti in Ascii, perchè adatti per una lettura e scrittura automatiche. Sono anche estremamente logorroici.
Metodi come EzMath o Minse (realizzato in locale) sono comprensibili o quasi, e sufficientemente sintetici, ma impongono un formato specifico di visualizzazione, a meno che in precedenza non si riesca a definirne un'altro.
Penso che un formato ideale per formule non esista, o sia molto difficile da ideare. Più modestamente, un formato che rispetti le mie richieste può essere simile al seguente:

(Il formato del Word7 è simile, in una parte del file è contenuto il testo in Ascii, con simboli di interruzione per indicare l'inseriemnto di comandi, e il resto del file contiene i comandi del Word. I formati come Rtf e Doc5 sono costituiti da testo inframezzato da infiniti slash \ seguiti da comandi in Ascii. In Doc7 i segni di interruzione sono caratteri non Ascii (non compresi fra 32 e 127), e i comandi sono esperessi in codice binario (credo). Il file risultante è meno compatto, utilizzabile anche da chi ha un semplice editor Ascii (basta isolare il blocco che è praticamente Txt puro con segni di escape), e più comprimibile. Nel complesso direi che è un miglioramnto rispetto ai vecchi formati, anche se forse non è possibile utilizzare solo uno spezzone del file, cioè questo formato è meno locale e meno resistente a certi errori dell'Rtf, e spesso anche meno sintetico).
Per esprimere le formule si potrebbe usare un metodo simile: formule in inglese sintetico, volendo precedute da specifiche tipografiche e semantiche. Nella formula si potrebbero mettere segni di "escape" Ascii, come ad esempio @  #  & \ '

(2) Un secondo metodo consisterebbe nel poter inserire tag Html all'interno della formula. La formula dovrebbe essere solo semantica, e i tag potrebbero essere omessi del tutto. Letta con un browser Html che non supporta il formato di formule, si vedrebbe la formula esatta per esteso in inglese, con le caratteristiche testuali volute; visualizzata con un editor Ascii mostrerebbe interruzioni dovute alle Tag, ma dovrebbe rimanere leggibile (basta ignorarle).

Esempio:
DERx(f(x))=LIM(n,0,(f(x+h)-f(x))/h)

Reso graficamente (lo sfondo dovrebbe adattarsi automaticamente a quello della pagina):
Formula a colori

Nel file Html apparirebbe come:

<Es><FONT FACE="Arial,Helvetica"><FONT COLOR="#FF6666">DER</FONT>x(</FONT><FONT FACE="Comic Sans MS"><FONT COLOR="#FFFF99">f</FONT></FONT><FONT FACE="Arial,Helvetica">(x))<FONT COLOR="#3366FF">=</FONT><FONT COLOR="#FF6666">LIM</FONT>(n,0,(</FONT><FONT FACE="Comic Sans MS"><FONT COLOR="#FFFF99">f</FONT></FONT><FONT FACE="Arial,Helvetica">(x+h)-</FONT><FONT FACE="Comic Sans MS"><FONT COLOR="#FFFF99">f</FONT></FONT><FONT FACE="Arial,Helvetica">(x))/h)</FONT></Es>

In effetti è un bel pastone, quasi illeggibile. Dal punto di vista semantico l'interprete ignorerebbe tali tag., ne terrebbe di conto solo nella visualizzazione di colori, font, link, e dimensioni relative a quella di default. Ad esempio 2^2verrebbe mostrata con i due 2 di dimensioni uguali 22dato che per default gli esponenti sono scritti con un font più piccolo.
(3) Specifiche semantiche aggiuntive si potrebbero mettere prima della formula, dopo il tag <Es> iniziale, forse all'interno di un tag specifico, oppure in un commento Html <--...-->. All'interno di tale commento la sintassi potrebbe essere esperessa con tag o con comandi più sintetici.

Una formula completa contiene tre tipi di informazioni:
F = Semantica della Formula,
S = definizioni di nuove forme grafiche, semantiche e strutture,
C = Informazioni extra su colori, font, link, interattività.

Esistono molte combinazioni di impaccamento di tale informazione, la lista completa è la seguente:

  1. [S C F]
  2. [S C]  [F]
  3. [F]
  4. [F C]
  5. [F S]
  6. [S]  [C]  [F]
  7. [C]  [S F]
  8. [C]
  9. [S C]
  10. [S]  [C]
  11. [S]  [F]
  12. [S]  [C F]
 Le informazioni su colori, font, ecc, potrebbero essere espresse in Html (C2) oppure in un formato più specifico (C1). Da notare che i caratteri di "SUM" sono "SUM" e quindi l'editor dovrebbe interpretarli come sommatoria. Ma da Html non sono leggibili come tali, per cui forse non andrebbero accettati per tale scopo...
Nella sezione S potrebbero essere inclusi dei comandi rapidi per scegliere fra modi di visuallizzazione alternativi diffusi, ad esempio | o : o "tc" per "tale che". Volendo si possono definire anche modi nuovi e strutture e caratteri nuovi, ma di solito con due-cinque varianti già predefinite dovrebbe essere possibile cavarsela in fretta.
Forse una estenzione dell'Html in qusta maniera non richiede semplicemente una plug-in, forse serve una patch.

Ecco una rassegna dei metodi disponibili al momento per la creazione di formule in documenti per computer, possibilmente leggibili sul Web.
 

1. Formule non strutturate

    Un metodo diffuso in documenti alfanumerici (ASCII, da ora in poi Ascii o ascii), specialmente messaggi fra informatici, è quello di usare una formula per esteso, non grafica, con una sintassi comprensibile, simile ad esempio a quella del pascal: f(x)= sin(x)+exp(sommatoria(x=1,20, x^2))+ln(x) inframezzata da parole e funzioni per esteso.
 

2. Testo e elementi grafici dell'Html

    Per ora nell'Html che ho usato finora non c'è un modo automatico per inserire formule tipograficamente complesse.
Anche in Txt puro non si dovrebbe poter scrivere altro che caratteri, ma anni di esperienza hanno insegnato come poter risolvere il problema in parte:

                         d(n)
                          |
                +   u(n)  |+     +-----+
    x(n) ---------O---+---O------|  Q  |-----+------ y(n)
                - |   | +        +-----+     |
                  |   |          -   +       |
                  |   +------------O---------+
                  |                |
                  |    +------+    |
                  +----| h(m) |----+
                       +------+

                                                          2
       f              w           w'          | 1 - 1/w' |
     ========================================================
       0   (0kHz)     0           1            0   (-inf dB)
     1/8T  (6kHz)   pi/4T    exp(-j pi/4)     0.5  (  -3 dB)
     1/6T  (8kHz)   pi/3T    exp(-j pi/3)      1   (   0 dB)
     1/4T (12kHz)   pi/2T    exp(-j pi/2)      2   (  +3 dB)
     1/2T (24kHz)   pi/T         -1            4   (  +6 dB)
 
 

             w=2pi/T
         T    /             2
       -----  | | 1 - 1/w' |  dw  =  2
        2pi   /
            w=0

                        K
                      -----
               K       \        k      K!        -k
      (1 - 1/z)    =     >  (-1)   -----------  z
                       /            (K-k)! k!
                      -----
                       k=0

                               K
                             -----
                             \        k-1      K!       -k
                   =  1  -     >  (-1)    -----------  z
                             /             (K-k)! k!
                             -----
                              k=1

In Html (2.0 ?) sono presenti vari strutturatori di testo e qualche elemento grafico, come la linea orizzontale:








e la tabella:
 

 
444
  5
 as
 6
Usando in maniera molto accorta le tabelle si possono creare formule decenti e abbastanza stabili fra vari browser, come:
 
NMSE =   
J-1 K-1  
å
å
[G(j,k) - G'(j,k)]2
j = 2
 k = 2

J-1 K-1  
å
å
[G(j,k)]2
j = 2
 k = 2
 
 
Dove   G(j,k) = F(j + 1, k) + F(j - 1, k) + F(j, k + 1) + F(j, k - 1) - 4·F(j , k)

    Il problema è che tale metodo non è comunque massimamente elastico, e inoltre richiede un mucchio di tentativi e di tempo per creare una formula e per modificarla. (forse una volta presa l'abitudine si può fare un pochino più in frettta) e di non generare formule eseguibili.
Questo metodo ha il vantaggio di essere abbastanza standard e di produrre formule incluse nel file Html. Inoltre con accortezza si può cambiare i colori e stili di caratteri, ecc. (a differenza di metodi di visualizzazione grafica automatica di formule, come l'Equation Writer della calcolatrice HP48SX e credo il visualizzatore del Mathematica).
    Il metodo basato su Html è a bassa tecnologia, con tutti i pregi e difetti di ciò. Fra i pregi c'è la semplicità, infatti non servono plug-in o estenzioni da centinaia di KB, e la libertà di fare le cose come uno vuole (nessuno costringe a rappresentare le formule in un dato modo).
Questo metodo dovrebbe essere usato quando possibile, al posto di immagini o di metodi non standard.
 

3. Uso di formati testuali differenti

    Su Internet si sta diffondendo l'uso in linea (o non) di documenti in Adobe Pdf. Tale formato è blandamente compresso, e pare che permetta di definire le pagine come in un libro; quindi con formule, immagini, figure vettoriali, ecc. Anche il formato PostScript è diffuso nella distribuzione di articoli tecnici. Non è un formato compresso, ma questo è quasi un vantaggio, perchè così si può conservare il file comprimendolo per bene con un buon compressore, come szip o altri. Un difetto di tali formati (specialmente il Pdf?) è che sono proprietari.
    Il difetto principale è che sono formati chiusi. L'Html non è tipograficamente sofisticato come il Pdf ma ha l'immane vantaggio di essere aperto alla modifica e scrittura manuale. Un file Html può essere letto, con un po' di impegno, anche con un semplice editor testi tipo wordpad, e con lo stesso si possono scrivere pagine Html decenti. Tale vincolo ha dato vari problemi e poche raffinatezze all'html, ma gli ha dato la libertà. Tutti nel mondo possono leggerlo e scriverlo senza mezzi particolari, e questo gli ha dato la grande popolarità che ha. Il formato Pdf è chiuso, e spesso non si sa come convertirlo in un formato aperto come Txt o Rtf (esistono convertitori, ma costano, ne esiste uno freeware che non sono riuscito a far funzionare).
Il formato Pdf richiede una pesante plug-in per il browser, più grande di un mega, che richiede tempo anche solo per essere caricata da Hd e che rende il sistema meno affidabile.
 

4. Immagini Gif o Png

Formula: Iud(x0, y0) = 1/(sum(i=0,i<m,sum(j=0,j<n,A(i,j)))) * sum(i=0,i<m,sum(j=0,j<n, I(x0 - m mod 2 +i, y0 mod 2 + j) * A(i,j) ))

    Questo metodo è piuttosto robusto, infatti praticamente tutti i browser caricano immagini in Gif (meno in Png, come questa, che è più compressa). Inoltre l'immagine è stampabile senza problemi (a differenza di formule prodotte da applet o altro), benchè si vedano i pixel. La formula sarà visibile nella stessa maniera esatta da tutti.
    Questa immagine è binaria, ma se non si accetta una certa perdita qualitativa, si possono usare immagini a 16 toni di grigio o più. Il problema del colore di fondo differente può essere parzialmente risolto con una Gif trasparente.
    Per pagine Html a massima diffusione, con una o poche formule complesse questo metodo è fra i più adatti, almeno finchè non diventerà standard una estenzione dell'Html per scrivere formule.
Un'altro difetto di questo metodo è che la formula non è "testo", per cui per poterla copiare in altri documenti o per poterla usare usare, va ricopiata in un'altro formato.
Chi non può visualizzare immagini è nei guai. Questo problema potrebbe essere risolto in parte come ho fatto quì, mettendo nell'Alt della immagine la formula stessa trascritta in Ascii in qualche modo leggibile (ho usato la sintassi della HP48SX sum è il segno di sommatoria). Questo fa sì che chi ha solo l'html possa comunque leggere la formula. Infatti un problema delle immagini è che esse sono esterne al testo. Questo è spesso un vantaggio, ad esempio permette di mantenere i file Html corti e editabili a mano, e inoltre permette di aggiungere facilmente altri formati grafici leggibili dai browser, ma fa sì che un testo con formule rese in questa maniera sia una raccolta di un testo e di anche centinaia di minuscole immagini. Tali immagini occupano complessivamente parecchio spazio, e la frammentazione del tutto può portare a perdere qualche pezzetto. Vedi un esempio di spezzone di articolo:
 

2.1.1 2D-Dithering

For a 2D-Dithering I used Floyd Steinberg Dithering, but it is possible to make some experiments with Ordered Dithering or similar method.

Floyd-Steinberg Dithering and 3D-Dithering have one important feature: precious error distribution.

If original voxel intensity is  and dithered voxel intensity of the same voxel is , we can defined, that .

On the image is the one possibility of distribution of this error information.


Error diffusion in Floyd-Steinberg Dithering

This possibility of error diffusion we can describe via this equations:

2.1.2 2D-UnDithering

2D-Undithering is inverse process for Dithering. This Process we can implement using convolution [2], [3].

A
is convolutory matrix with size . But almost m and n are odd integers. Undithered intensity we can describe from dithered intensity  as:

Matrix A is an normal convolutory matrix. With good result I used these matrixes:

    Questo metodo mantiene la libertà del metodo testuale, ma in pratica richiede anche un editor grafico di formule, da cui poter copiare l'immagine, e/o un editor grafico, come il Paint Shop. (in teoria si possono fare solo usando tale programma, ma si richiede troppa pazienza e tempo).
(Molto del seguente materiale è un riassunto-traduzione dalle pagine del progetto MINSE: http://www.lfw.org/math/top.html, vedi oltre)
    Esistano sistemi come LaTeX2HTML, Hyperlatex, e altri, che permettono di generare automaticamente file Html con formule-immagini allegate. Ma tale operazione a me sembra semi-folle, a meno che non si abbia già un grosso documento TEX.
Ci sono vari difetti nell'uso di tali metodi:

Minse

    E' stato inventato anche un altro metodo per l'inserimento di formule come immagini Gif in documenti Html.
Per usarlo si scrive la semantica delle formule nel documento Html, in maniera piuttosto sintetica e abbastanza semplice. Prima e dopo la formula si pongono due Tag <SE> e </SE> non standard, che stanno a significare Structured Espression. Ecco un brano di Html, per esempio:
...
<SE>
'deriv(f(x),x)='lim('quot(f(x+h)-f(x),h),h .approach 0)
</SE>
...

Letto con un browser appare identico:
'deriv(f(x),x)='lim('quot(f(x+h)-f(x),h),h .approach 0)
Per visualizzare le formule si deve accedere alla rete e inserire la URL di un server, seguita dall'indirizzo della nostra pagina.
    Verrà mostrata un'altra pagina che contiene il testo della nostra, è che ha al posto delle nostre formule lo spazio per immagini Gif che il browser carica dallo stesso server. tale server genera al volo le formule in forma grafica, perchè nella loro Url c'è codificata tutta l'informazione contenuta nelle formula.
Nonostante tali Url siano arcane, l'utente può ignorarle e conservare solo la versione originale della pagina.
    Tale metodo, chiamato è chiamto MINSE Project: http://www.lfw.org/math/top.html  (Email autore: Ping). Indirizzo pagina script: http://wheat.uwaterloo.ca/cgi-bin/kryee/nph-pmpm.cgi
Tale servizio pubblico é in funzione dal 2 Giugno '96, ed è quindi piuttosto stabile.
Da notare che le formule sono esperesse in semantica, non nel modo in cui devono essere mostrate. C'è in pratica l'indipendenza dal medium su cui verrano rese. Queste pagine di formule possono essere visualizzate da molti, ma chi non ha browser grafici può chiedere di avere una visualizzazione testuale delle formule.
Ad esempio la formula precedente verrà mostrata come Gif:

Oppure come testo:
 
  d                 f(x + h) - f(x)
---- f(x) =  lim   -----------------
 dx         h -> 0         h
    Qusto mezzo, indipendente dal media, è stato chiamato dall'autore (Ping) Polimedia. C'è uno studio sperimentale, chiamato ASTER, per la resa delle formule in audio. Esse vengono trasmesse come file audio sintetizzati, per i non vedenti. Tali formule potrebbero essere rese anche in maniera leggibile per altri programmi, come Maple o TEX, dato che la semantica della formula è conservata.
Questo rende le formule facilmente accessibili.
Un concetto simile è stato usato nell'implementazione di Shodouka, un mediatore per la resa grafica di testo Giapponese sul Web.
    I mediatori sono modificabili con facilità, dato che la sintassi è estendibile, e l'operato di pochi server centralizzati è facile da modificare. In pratica i polimediatori sono un eccellente mezzo per la sperimentazione di nuovi media, in attesta che essi diventino comuni. A quel punto si spera che la resa venga fatta in locale dal browser e le sue plug-in.
    Il difetto principale di questo metodo è che richiede un collegamento attivo alla rete per mostrare le formule (anche se sono leggibili anche senza). Personalmente mi dà fastidio pensare di poter scrivere un lungo testo ricco di formule basandomi su software e computer altrui che possono essere disattivati o modificati. Capisco comunquie che questo disagio non è del tutto razionale.
    Ho detto che Minse è indipendente dal media. all'origine anche l'Html èra stato inteso per essere indipendente dalla piattaforma e dal media. Ma l'uso che ne è stato fatto oggi l'ha reso solo quasi indipendente dalla piattaforma.
Vedi un altro esempio di uso di MINSE: EsempioMINSE 0082 19990102.
Per chi deve scrivere una pagina Web ricca di formule da zero penso che il passaggio da TEX non sia la cosa migliore. Di seguito alcuni vantaggi del MINSE rispetto ai metodi come  LaTeX2HTML, tradotti approssimativamnte dalle pagine del sito: Ecco un confronto fra MINSE e WebEQ: Per un semplice simbolo omega (W) col WebEQ si deve inserire:
<APPLET CODEBASE=../../bin CODE=WebEQ.class
HEIGHT=25 WIDTH=20 ALIGN=top> <PARAM NAME=size VALUE=18> <PARAM NAME=color
VALUE=0xffffff> <PARAM NAME=line1 VALUE="&Omega;"></APPLET>
Con Minse sarebbe bastato
<se> ?Omega? </se>
In pagine fitte di formule le chiamate a WebEQ la trasformato in pantano interminabile.
 
 

5. Estensione dello standard dell'Html

    Questo metodo se venisse ben realizzato sarebbe il migliore. Le formule fanno parte del file Html. Una volta che lo standard si è diffuso non ci sono più problemi. Le formule vengono mostrate sullo schermo in fretta. Sono possibili diverse varianti.
 

5.1 Uso di tag in stile Html

    Pare che esista già una specie di standard, il MathML (vedi http://www.w3.org/Math), ed è supportato da un browser a bassa diffusione. Ecco un esempio di formula scritta in tale estensione:

<mrow>
  <mi>x</mi>
  <mo>=</mo>
  <mfrac>
    <mrow>
      <mo>-</mo>
      <mi>b</mi>
      <mo>&pm;</mo>
      <msqrt>
        <mrow>
          <msup>
            <mrow>
              <mi>b</mi>
            </mrow>
            <mrow>
              <mn>2</mn>
            </mrow>
          </msup>
          <mo>-</mo>
          <mn>4</mn>
          <mi>a</mi>
          <mi>c</mi>
        </mrow>
      </msqrt>
    </mrow>
    <mrow>
      <mn>2</mn>
      <mi>a</mi>
    </mrow>
  </mfrac>
</mrow>

    E' piuttosto diffiicile apprendere a scrivere formule a mano con questo metodo, ma in linea di principio sembra possibile. Un editor è però quasi indispensabile. (La Geometry Technologies produce il pacchetto WebEQ (http://www.webeq.com) che contiene applet per scrittura formule (vedi più avanti), un editor java di MathML tanto lento su un P75 da essere inutilizzabile, e un wizard  per conversioni varie, che richiede JRE (Java Runtime Envirionment)). Anche l'editor EzMath può produrre MathML.
    Questo metodo pare essere sufficientemente elastico e libero, e permette di inserire formule nel file Html stesso, ma si vede che la formula è quasi illeggibile con un editor Ascii (per cui consiglio di inserire un commento Html con la formula in testo leggibile) e occupa molto spazio, quasi tanti byte quanto la stessa formula come immagine grafica in Png. Ciò è abbastanza grave, ma non è tragico. Questo formato comprende tag semantiche e tag per la forma grafica.
 

5.2 uso di un formato compatto per rappresentare le formule

5.2.1 WebEQ

    Il pacchetto WebEQ su menzionato permette di utilizzare WebTeX: un linguaggio simile al Tex. (ma non esattamnte standard!). Esempio (con macro):

<applet codebase="classes" code="webeq.Main"width=500 height=100>
<param name=macros value="\define{\plusN}[1]{+ {#1}}">
<param name=eq value="y \plusN{35} = x \plusN{z - w}">
</applet>

Produce l'output:

y + 35 = x + z - w

    Esso viene interpretato da una applet piuttosto robusta di circa 340KB. Il linguaggio TeX (o simili) è piuttosto complesso e pesante da usare. Ma forse tale complessità è necessaria, visto quanto complesse possono essere certe formule. Con questa variante del TeX si può fare praticamente tutto! formule molto strane, link web, descrizioni di parti della formula, colori, modifica dimensioni caratteri al volo, interattività.
Gli autori dicono che ci sono problemi a stampare una applet. Io ho visto che è possibile farlo in IE4, ma forse non in Netscae4. (Questo è un difetto terribile! E' poco utile avere un testo con delle formule e non poterlo stampare).
    Le espressioni scritte in Tex potrebbero facilmente essere eseguite, quasi come quelle di una calcolatrice Hp, o quelle del Mathematica.
    Le formule in MathML viste nel §5.1 non credo siano eseguibili facilmente, sembra solo un linguaggio che descrive l'aspetto di un testo.

Riassumendo, i pregi e difetti di questo metodo, che pare essere uno dei più potenti disponibili al momento:

Pregi:

Difetti:
 


Io potrei gradire una versione più semplice e piccola, senza possibilità di rescaling di font, senza link web, e interattività, ma installabile come una plug-in minuscola, veloce e gratuita.

Ecco qualche altro esempio che richiede per funzionare la versione 2.0:
 

Flipping Coins: A Bernoulli Process

The probability of k successes in n trials of a Bernoulli process is given by the following formula:
P(E) = CoefficienteBinomiale(n,k) * p^k * (1-p) ^(n-k)
Here, the event E consists of outcomes where exactly k heads occur in n flips of a fair coin.

    Puntando il mouse su ogni termine se ne ottiene una descrizione.  Nota che cliccando col tasto destro si ottine una finestra per specificare le dimesioni del font.

    Qui io ho fornito la formula in tre modi diffrenti, per chi ha supporto Java e le applet webeq stesse, le utilizza per mostrare la formula interattiva. Chi ha il Java non funzionante o disattivato vede una immagine identica (è una Gif binaria ottenuta grabbando l'output stesso della applet). Chi non può visualizzare neppure le immagini ha nel campo ALT dell'immagine la formula scritta in Ascii piano. Con questo metodo le formule sono lente da scrivere, ma si risolvono diversi problemi. Il tag aggiuntivo che chiama la Gif e il campo ALT non occupano molto spazio, spesso solo una riga.
N.B.: se la l'immagine della formula non si vede, ma le immagini sono abilitate, disattivare l'esecutore Java e ricaricare la pagina).

Questo è lo spezzone del file html che ha prodotto questa figura:

<APPLET ARCHIVE="webeq.zip" CODE="webeq.Main" WIDTH=510 HEIGHT=130>
<PARAM NAME=size VALUE=36>
<PARAM NAME=color VALUE="#ffffff">
<PARAM NAME=eq VALUE=" \statusline{Probability of event E: Get exactly k heads in n coin flips.} {\fghilight{#00bbbb}{P(E)}}   =  \statusline{Number of ways to get exactly k heads in n coin flips} {\fghilight{#ff6600}{\left( \binom{n}{k} \right)}}  \statusline{Probability of getting heads in one flip} {\fghilight{#ff6600}{p}}^   {\statusline{Number of heads}{\fghilight{#ff6600}{k}}}  \statusline{Probability of getting tails in one flip} {\fghilight{#ff6600}{(1-p)}}^{ \statusline{Number of tails}{\fghilight{#ff6600}{n-k}}}">
<IMG SRC="Bernoulli_0077_19981228.gif"
     ALT="P(E) = CoefficienteBinomiale(n,k) * p^k * (1-p) ^(n-k)" NOSAVE HEIGHT=130 WIDTH=510>
</APPLET>

per un totale di circa 800 byte. Il codice che specifica la formula stessa è piuttosto piccolo (sono state inserite anche informazioni inerattive).

Per chi ha EzMath 1.1 si può vedere la stessa, in soli 84 byte:

<embed type=text/ezmath width=213 height=54 alt="P(E)= vector(n,k) p^k (1-p)^{n-k}">

(Nota che non sono state inserite formule testo o immagini per browser che non possiedono la plug-ing, nè spiegazioni, inoltre il coefficiente binomiale non è ancora presente fra le funzioni disponibili, per cui ho dovuto inserirlo come vettore. Dato che questa formula non è già più semantica ho evitato di specificare function all'inizio.)
 
 

Un altro esempio:

A cross product formula

We can compute the cross product of a pair of vectors with the determinant
V1 Cross V2   =   | Tabella3x3((i, j, k),( derivata (X, u), derivata (Y, u), 0 ),(derivata (X, v), derivata (Y, v), 0 ) ) |

Codice relativo WebEQ nel file Html:

<APPLET CODE="webeq.Main" ARCHIVE="webeq.zip" WIDTH="250" HEIGHT="190">
<PARAM NAME=size VALUE=18><PARAM NAME=color VALUE="#ffffff">
<PARAM NAME=eq VALUE="\mathbf{V}_1 \times \mathbf{V}_2 = \left|\array{
   \arrayopts{\equalrows{false}}
   \mathbf{i}                     &  \mathbf{j}                     & \mathbf{k}  \\
   \frac{\partial X}{\partial u}  &  \frac{\partial Y}{\partial u}  & 0           \\
   \frac{\partial X}{\partial v}  &  \frac{\partial Y}{\partial v}  & 0
  } \right| ">
<IMG SRC="CrossProduct_0077_19981228.gif"
 ALT="V1 Cross V2   =   | Tabella3x3((i, j, k),( derivata (X, u), derivata (Y, u), 0
      ),(derivata (X, v), derivata (Y, v), 0 ) ) |"
 NOSAVE HEIGHT=190 WIDTH=250>&nbsp;</APPLET>

In EZmath:
<embed type=text/ezmath width= 230 height=150
 alt="vector V sub 1 cross vector V sub 2 = det {
       bold i,                          bold j,                           bold k;
       partial derivative of X wrt u,   partial derivative of Y wrt u,    0;
       partial derivative of X wrt nu,  partial derivative of Y wrt nu,   0
      }">

(Nota che ancora non contiene formule testo o immagini per browser che non possiedono la plug-ing)
 

5.2.2 EzMath

    Vedi http://www.w3.org/People/Raggett/EzMath/ by Dave Raggett  Email: <dsr@w3.org>, da cui ho tratto e tradotto parte delle seguenti notizie.
    EzMath è una plug-in per Netscape di dimensioni ragionevoli (circa 107KB). Non sono riuscito a farla funzionare con IE3 (benchè forse si possa modificando le chiamte come ActiveX). Essa vine chiamata in maniera simile a MathEQ, ma ci sono alcune differenze. La formula può contenere solo la semantica e qualche informazione su dimensione e stile dei caratteri, integrate. In base alla mia tassonomia è una variante del metodo 4: FC2 (vedi).
    La notazione è semantica ed è simile a come si leggono le formule ad alta voce in inglese, con qualche abbreviazione. ecco un esempio:

Nell'Html:
<embed type="text/ezmath" width= 81 height=55
 alt="partial derivative of f wrt x times partial derivative of x wrt t = partial derivative of f wrt t">

Come Viene:

    Incluso nel pacchetto totalmente freeware c'è un (veloce) editor di 119KB circa, con esempi incorporati. esso può produrre anche MathML in uscita. Uno dei difetti dell'EzMath è che se si deve ripetere molte volte una formula o uno spezzone, non si può inserirla in un file esterno chiamato molte volte. Comunque non è troppo grave, si può mettere un riferimanto alla formula nel testo.
Ecco un confronto fra vari metodi. La formula può essere scritta in Html col seguente codice:
<CENTER><TABLE CELLSPACING=0 CELLPADDING=0 >
<TR>
<TD>&nbsp;&nbsp;
<DIV ALIGN=right><TABLE ALIGN=LEFT >
<TR>
<TD ALIGN=CENTER VALIGN=CENTER NOWRAP>NMSE =&nbsp;</TD>
<TD ALIGN=CENTER NOWRAP><FONT SIZE=-2>&nbsp;</FONT>&nbsp;
<TABLE CELLSPACING=0 CELLPADDING=0 >
<TR>
<TD ALIGN=CENTER VALIGN=BOTTOM><FONT SIZE=-1>J-1</FONT></TD>
<TD ALIGN=CENTER VALIGN=BOTTOM><FONT SIZE=-1>K-1</FONT></TD>
<TD>&nbsp;</TD>
</TR>
<TR ALIGN=CENTER>
<TD>
<CENTER><FONT FACE="symbol"><FONT SIZE=+3>&aring;</FONT></FONT></CENTER>
</TD>
<TD>
<CENTER><FONT FACE="symbol"><FONT SIZE=+3>&aring;</FONT></FONT></CENTER>
</TD>
<TD VALIGN=CENTER>[G(j,k) - G'(j,k)]<SUP><FONT SIZE=-2>2</FONT></SUP></TD>
</TR>
<TR>
<TD VALIGN=TOP>
<CENTER><FONT SIZE=-1>j = 2</FONT></CENTER>
</TD>
<TD VALIGN=TOP>
<CENTER><FONT SIZE=-1>&nbsp;k = 2</FONT></CENTER>
</TD>
<TD></TD>
</TR>
</TABLE>
<HR NOSHADE>
<TABLE BORDER=0 CELLPADDING=0 >
<TR>
<TD ALIGN=CENTER VALIGN=BOTTOM><FONT SIZE=-1>J-1</FONT></TD>
<TD ALIGN=CENTER VALIGN=BOTTOM><FONT SIZE=-1>K-1</FONT></TD>
<TD>&nbsp;</TD>
</TR>
<TR ALIGN=CENTER>
<TD>
<CENTER><FONT FACE="symbol"><FONT SIZE=+3>&aring;</FONT></FONT></CENTER>
</TD>
<TD>
<CENTER><FONT FACE="symbol"><FONT SIZE=+3>&aring;</FONT></FONT></CENTER>
</TD>
<TD VALIGN=CENTER>[G(j,k)]<SUP><FONT SIZE=-2>2</FONT></SUP></TD>
</TR>
<TR>
<TD VALIGN=TOP>
<CENTER><FONT SIZE=-1>j = 2</FONT></CENTER>
</TD>
<TD VALIGN=TOP>
<CENTER><FONT SIZE=-1>&nbsp;k = 2</FONT></CENTER>
</TD>
<TD></TD>
</TR>
</TABLE>
&nbsp;</TD>
</TR>
</TABLE></DIV>
&nbsp;&nbsp;</TD>
</TR>
</TABLE></CENTER>

oppure in MathML:

<reln>
   <eq/>
   <apply>
      <times/>
      <ci>N</ci>
      <ci>M</ci>
      <ci>S</ci>
      <ci>E</ci>
   </apply>
   <apply>
      <over/>
      <apply>
         <sum/>
         <lowlimit>
            <cn>2</cn>
         </lowlimit>
         <uplimit>
            <apply>
               <minus/>
               <ci>J</ci>
               <cn>1</cn>
            </apply>
         </uplimit>
         <bvar>
            <ci>j</ci>
         </bvar>
         <apply>
            <sum/>
            <lowlimit>
               <cn>2</cn>
            </lowlimit>
            <uplimit>
               <apply>
                  <minus/>
                  <ci>K</ci>
                  <cn>1</cn>
               </apply>
            </uplimit>
            <bvar>
               <ci>k</ci>
            </bvar>
            <apply>
               <power/>
               <mfence>
                  <apply>
                     <minus/>
                     <apply>
                        <times/>
                        <ci>G</ci>
                        <mfence>
                           <ci>j</ci>
                           <ci>k</ci>
                        </mfence>
                     </apply>
                     <apply>
                        <times/>
                        <ci>G</ci>
                        <ci>'</ci>
                        <mfence>
                           <ci>j</ci>
                           <ci>k</ci>
                        </mfence>
                     </apply>
                  </apply>
               </mfence>
               <cn>2</cn>
            </apply>
         </apply>
      </apply>
      <apply>
         <sum/>
         <lowlimit>
            <cn>2</cn>
         </lowlimit>
         <uplimit>
            <apply>
               <minus/>
               <ci>J</ci>
               <cn>1</cn>
            </apply>
         </uplimit>
         <bvar>
            <ci>j</ci>
         </bvar>
         <apply>
            <sum/>
            <lowlimit>
               <cn>2</cn>
            </lowlimit>
            <uplimit>
               <apply>
                  <minus/>
                  <ci>K</ci>
                  <cn>1</cn>
               </apply>
            </uplimit>
            <bvar>
               <ci>k</ci>
            </bvar>
            <apply>
               <power/>
               <mfence>
                  <apply>
                     <times/>
                     <ci>G</ci>
                     <mfence>
                        <ci>j</ci>
                        <ci>k</ci>
                     </mfence>
                  </apply>
               </mfence>
               <cn>2</cn>
            </apply>
         </apply>
      </apply>
   </apply>
</reln>

Oppure in EzMath:

<embed type="text/ezmath" fontsize="small" bgcolor="#C0C0C0" width=249 height=111 alt="
  NMSE = sum from j=2 to J-1 of ( sum from k=2 to K-1 of ( [G(j,k) - G'(j,k)]^2  ) ) /
         sum from j=2 to J-1 of ( sum from k=2 to K-1 of ( [G(j,k)]^2  ) )
 ">

Cosi resa da EzMath:

Questa formula richiede approssimativamente:

Per mostrare ulteriolmente la compattezza di questo metodo ho scritto un piccolo Html di prova, contenete solo formule: EquazioniVarie 0082 19990102. Questo è il testo del file:

<body bgcolor=white><embed type="text/ezmath" width=425 height=426 alt="equ 1:det(a sub 11,a sub 12;a sub 21,a sub 22)=a sub 11 a sub 22- a sub 21 a sub 12,equ 2:limit as x tends to infinity of integral from 0 to x wrt y of {e^y^2}=sqrt pi/2,equ 3:a^m/a^n=either a^{m-n} when m&gt;n or 1 when m=n or 1/a^{n-m} when m&lt;n,equ 4:s sub infinity = limit as n tends to infinity of {a sub 1 (1-r^n)}/{1-r}=a sub 1/{1-r},equ 5:function f(x)=a sub 0/2+ sum from n=1 to infinity of (a sub n cos{n pi x}/L+b sub n sin{n pi x}/L)">

Questa è l'immagine risultante in Png:

Il tutto occupa solo 524 byte nell'Html, 319 byte compresso con ACB, l'immagine in Png occupa 1782 byte, 1338 compressa in Pic Minerva. La visualizzazione è quasi istantanea sul mio P75.

Altra prova. Vedi uno spezzone di articolo con formule realizzate con Png, e vedi il risultato in EzMath:  ArticoloParte 0082 19990102 .

EzMath è un programma ancora giovane, ed ha ancora varie limitazioni e bug. Nonostante ciò ritengo che sia il miglior metodo fra quelli disponibili (se non si devono fare formule troppo complesse).

Alcuni pregi e difetti di EzMath rispetto a MathEQ:

5.3 Come Mathematica e calcolatrici Hp

    Una calcolatrice Hp48 ha una sintassi piuttosto semplice per specificare formule, ad esempio per la formula di Bernulli si sarebbe scritto semplicemente:

'P(E)=COMB(n,k)*p^k*(1-p)^(n-k)'

    La visualizzazione grafica di questa formula sarebbe potuta essere simile a quella mostrata col WebEQ, ma in realtà le parentesi del coefficiente binomiale sono sostituite da COMB( , ) stesso.
Mathematica 3.0 avrebbe prodotto una formula perfetta.
Questo metodo richiede un interprete piuttosto sveglio, per risolvere i problemi di visulizzazione. Il difetto prinicipale di questa sintassi è che è assolutamente non libera, e molto poco elastica. Comunque per formule semplici è ottima, veloce da apprendere, ed estremamente compatta.
In teoria si potrebbe estendere l'Html per poter inserire formule in questo modo:

<EQUATION> P(E) = COMB(n,k) * p^k * (1-p)^(n-k) </EQUATION>

o qualcosa di simile.
    Si potrebbe perfino estendere l'Html con due linguaggi differenti, uno complesso per formule interattive e molto complesse, e uno simile a quello appena mostrato per formule semplici, che non richiede di specificare sfondi, dimensioni di applet, ecc.
[l'idea 3 è uno sviluppo di questa]
 

Riflessioni generali

    Un formato per esprimere formule deve essere semplice e sintetico per vari motivi importanti. Sintetico per ridurre i tempi di scrittura e scaricamento, semplice per permetterne la scrittura con un semplice editor. Ciò permette a tutti di poterlo usare e migliorare, e permette la comprensione delle formule anche a chi non possiede manuali della sintassi.
    I formati più semplici sono quelli di EzMathe Minse, entrambi solo quasi semantici. Comunque non credo che siano ancora ideali. EzMath ha il vantaggio di essere abbastanza leggibile, ma è troppo prolisso, e poco elastico. Ciò spesso costringe ad usare trucchi non consoni, come l'uso di "" per inserire testo grezzo nelle formule. EzMath usa una approssimazione della lingua inglese per esprimere le formule, anche quando non è necessario, cioè per esprimere operazioni che sono usate comunemente in testi non strutturati, come l'uso di + - / l'uso delle parentesi tonde non necessarimante sempre visibili, e i parametri di funzioni comuni, come la sommatoria, date come il passaggio di parametri a funzioni Pascal.
Ad esempio la sommatoria sarebbe chiaro scriverla come:
Sommatoria(i=1, 39, 1^2)

(in italiano) anche abbreviando, e non mi sembra necessario scrivere, come in EzMath:

sum from i=1 to 39 of (x^2)

Che dà problemi con le parentesi e gli spazi.
Minse è più sintetico di EzMath, ma anche leggermente più criptico, e sono richiesti vari caratteri extra.
Ecco una definizione visualizzata col EzMath:

Ed ecco un confronto della stessa definizione scritta in vari formati:

EzMath:     deriv wrt x f(x)= limit as n tends to 0 of {{f(x+h)-f(x)}/h}

Minse:      'deriv(f(x),x)='lim('quot(f(x+h)-f(x),h),h .approach 0)

Possibile1: sx(f(x))=LIM(n,0,(f(x+h)-f(x))/h)

Possibile2: DERx(f(x))=LIM(n,0,(f(x+h)-f(x))/h)

Possibile3: DERx(f(x))=LIM(n->0,(f(x+h)-f(x))/h)

Possibile4: derivatax(f(x))=limite(n->0,(f(x+h)-f(x))/h)

Possibile5: derivata(f(x),x)=limite(n->0,(f(x+h)-f(x))/h)

Possibile6: derivata(f(x)/x)=limite(n->0,(f(x+h)-f(x))/h)

Possibile7: derivata(f(x),x)=limite(n,0,(f(x+h)-f(x))/h)

    Le ultime sono possibili sintassi alternative (in italiano). Io penso che una sintassi giusta potrebbe essere simile a queste. Da notare che la sinteticità è importante, ma non deve mai andare a scapito della chiarezza. Si possono accettare anche sintassi due volte più prolisse di altre, pur che siano chiare.
    Riassumendo, penso che uno dei migliori metodi per inserire formule in documeti Html sarebbe metterli come testo Html compreso fra due Tag, come ho mostrato in un esempio. Tali formule sarebbero leggibili anche senza la plug-in. Potrebbero essere modificabili all'interno dell'editor Html. Sarebbero sufficientemete sintetiche e chiare. Volendo si poptrebbero modificare font, colori e stili dei caratteri all'interno dell'editor Html, con semplicità. Se non lo si facesse le formule verrebbero comunque ben rese dalla plug-in, e sarebbero ancora più sintetiche e modificabili da un semplice editor testuale. Varianti di visualizzazione o metodi del tutto diversi di mostrare una formula potrebbero essere espressi prima della formula, anche una sola volta nel documento Html, in maniera abbastanza semplice. Tali informazioni extra dovrebbero/potrebbero essere messe fra o dentro le Tag che indicano la formula. (occorre fare prove e esperimenti per vedere quale è la soluzione migliore).
    Questa rappresentazione sarebbe a "fisarmonica": elementare e telegrafica per formule scritte da persone poco esperte o per casi normali, e completa e potente per i casi particolari e sofisticati.
(E se si mettesse insieme testi, formule e semplici disegni vettoriali, come diagrammi con poche linee?
Talvolta è necessario mettere tutto insieme, anche bitmap, riscalate e ritagliate. Per far ciò occorrono sistemi pittosto elastici...)
 

Conclusioni

    Se si devono inserire poche formule in un testo web conviene scriverle quando possibile in Html, con immagini Gif o Png nei casi più complicati (aventi il testo in ascii della formula nel campo ALT della immagine).
    Se si possiede già un lungo testo in Latex e si ha accesso ad un sistema Unix si può provare a fare la conversione in Html con immagini-formula. (Ma si dovrebbe dare la possibilità di scaricare anche il documento originale).
    Nessun browser a larga diffusione supporta il MathML e in attesa che esca uno standard, spero simile a quello che ho esposto, in pratica non conviene ancora scrivere grandi documenti contenenti molte fomule in Html o simili (Xml, ecc). Meglio usare Pdf o Postscript (generato con vari metodi), nonostante i loro difetti.
 Data 19981228 Pag. 77

Vedi note aggiuntive