3 Marcatura di presentazione

Descrizione sommaria: Linguaggio di marcatura matematica (MathML) Versione 2.0
Precedente: 2 Fondamenti del MathML
Successivo: 4 Marcatura di contenuto
 
3 Marcatura di presentazione
3.1 Introduzione
   3.1.1 Cosa rappresentano gli elementi di presentazione
   3.1.2 Terminologia usata in questo capitolo
   3.1.3 Argomenti necessari
   3.1.4 Elementi con comportamenti speciali
   3.1.5 Sommario degli elementi di presentazione
3.2 Elementi token
   3.2.1 Attributi comuni agli elementi token
   3.2.2 Identificatore (mi)
   3.2.3 Numero (mn)
   3.2.4 Operatore, parentesi, separatore o accento (mo)
   3.2.5 Testo (mtext)
   3.2.6 Spazio (mspace)
   3.2.7 Letterale stringa (ms)
   3.2.8 Riferimento a caratteri non-ASCII (mchar)
   3.2.9 Aggiungere nuovi glifi di caratteri al MathML (mglyph)
3.3 Schemi generali di disposizione
   3.3.1 Raggruppare orizzontalmente le sottoespressioni (mrow)
   3.3.2 Frazioni (mfrac)
   3.3.3 Radicali (msqrt, mroot)
   3.3.4 Modifiche allo stile (mstyle)
   3.3.5 Messaggi di errore (merror)
   3.3.6 Aggiustare lo spazio intorno al contenuto (mpadded)
   3.3.7 Rendere il contenuto invisibile (mphantom)
   3.3.8 Contenuto tra coppie di parentesi (mfenced)
   3.3.9 Includere il contenuto nella notazione (menclose)
3.4 Schemi di apici, pedici e limiti
   3.4.1 Pedice (msub)
   3.4.2 Apice (msup)
   3.4.3 Coppia pedice-apice (msubsup)
   3.4.4 Testo sotto una base (munder)
   3.4.5 Testo sopra una base (mover)
   3.4.6 Testo sotto e sopra una base (munderover)
   3.4.7 Preapici, prepedici e indici di tensore (mmultiscripts)
3.5 Tabelle e matrici
   3.5.1 Tabella o matrice (mtable)
   3.5.2 Riga di tabella o matrice (mtr)
   3.5.3 Riga etichettata di tabella o matrice (mlabeledtr)
   3.5.4 Voce di tabella o matrice (mtd)
   3.5.5 Marcatori di allineamento
3.6 Espressioni vivacizzanti
   3.6.1 Associare un'azione ad una sottoespressione (maction)

3.1 Introduzione

Questo capitolo specifica gli elementi di `presentazione' del MathML, che possono essere usati per descrivere la struttura della disposizione della notazione matematica.

3.1.1 Cosa rappresentano gli elementi di presentazione

Gli elementi di presentazione corrispondono ai `costruttori' della tradizionale notazione matematica - ovvero, ai tipi fondamentali di simboli e di strutture che costruiscono le espressioni dalle quali è formato ogni pezzo particolare di notazione matematica tradizionale. A causa dell'importanza della tradizionale notazione visuale, le descrizioni dei costrutti notazionali che gli elementi rappresentano sono date di solito in questo documento in termini visuali. Comunque, gli elementi sono indipendenti dal mezzo nel senso che sono stati progettati per contenere abbastanza informazioni anche per buoni riproduttori vocali. Alcuni attributi di questi elementi possono avere senso solo per mezzi visuali, ma la maggior parte degli attributi può essere trattata in modo analogo anche in audio (per esempio, con una corrispondenza tra durata di tempo ed estensione orizzontale).

Gli elementi di presentazione del MathML suggeriscono soltanto (ovvero non richiedono) modi specifici di presentazione per permettere una presentazione dipendente dal mezzo e per preferenze individuali di stile. Queste specifiche descrivono piuttosto in dettaglio le regole di presentazione visuale suggerite, ma un particolare riproduttore MathML è libero di usare le sue regole finché le sue presentazioni saranno comprensibili.

Gli elementi di presentazione intendono esprimere la struttura sintattica della notazione matematica in un modo molto simile a come i titoli, le sezioni e i paragrafi catturano la struttura sintattica di livello maggiore di un documento di testo. A causa di questo, per esempio, una singola riga di identificatori e operatori, come `x + a/b', sarà spesso rappresentata non solo da un singolo elemento mrow (che viene presentato come una linea orizzontale dei suoi argomenti), ma da più elementi mrow annidati che corrispondono alle sottoespressioni annidate delle quali è composta un'espressione matematica - in questo caso,

<mrow>
  <mi> x </mi>
  <mo> + </mo>
  <mrow>
    <mi> a </mi>
    <mo> / </mo>
    <mi> b </mi>
  </mrow>
</mrow>

In modo simile, gli apici sono aggiunti non solo al carattere precedente, ma all'intera espressione che forma la loro base. Questa struttura permette una presentazione di qualità migliore della matematica, specialmente quando i dettagli dell'ambiente di riproduzione come l'ampiezza dello schermo non sono noti all'autore del documento; inoltre facilita notevolmente l'interpretazione automatica delle strutture matematiche rappresentate.

Certi caratteri MathML sono usati per nominare operatori o identificatori che nella notazione tradizionale si rappresentano nello stesso modo di altri simboli, come &DifferentialD;, &ExponentialE; o &ImaginaryI;, o operatori che normalmente si rappresentano invisibilmente, come &InvisibleTimes;, &ApplyFunction; o &InvisibleComma;. Questi sono simboli o oggetti notazionali distinti, come evidenziato dalle loro diverse riproduzioni parlate e in alcuni casi dal loro effetto sulle interruzioni di linea e sulla spaziatura nella riproduzione visuale, e come tali dovrebbero essere rappresentati da appropriati riferimenti alle specifiche entità. Per esempio, l'espressione rappresentata visivamente come `f(x)' verrebbe pronunciata di solito in inglese `f di x' piuttosto che soltanto `f x'; questo è esprimibile in MathML con l'uso dell'operatore &ApplyFunction; dopo la `f', che (in questo caso) potrà essere riprodotto acusticamente come `di'.

L'elenco completo delle entità del MathML è descritto nel Capitolo 6 [Caratteri, entità e font].

3.1.2 Terminologia usata in questo capitolo

E' fortemente consigliato che, prima di leggere il presente capitolo, si legga la Sezione 2.3 [Sintassi e grammatica del MathML] sulla sintassi e grammatica del MathML, che contiene informazioni importanti sulla notazione e sulle convenzioni del MathML. In particolare, in questo capitolo si assume che il lettore abbia una comprensione della terminologia fondamentale dell'XML descritta nella Sezione 2.3.2 [Una breve introduzione della sintassi dell'XML], e delle notazioni e convenzioni sui valori degli attributi descritte nella Sezione 2.3.4 [Valori degli attributi del MathML].

Il resto di questa sezione introduce la terminologia specifica del MathML e le convenzioni usate in questo capitolo.

3.1.2.1 Tipi di elementi di presentazione

Gli elementi di presentazione sono divisi in due classi. Gli elementi token rappresentano simboli individuali, nomi, numeri, etichette, eccetera. In generale, i token possono avere solo caratteri ed elementi mchar come contenuto. Le uniche eccezioni sono l'elemento di allineamento verticale malignmark e i riferimenti alle entità. (Si noti, comunque, che i riferimenti alle entità sono disapprovati in favore dell'elemento mchar nel MathML 2.0.) Gli schemi di disposizione costruiscono espressioni a partire dalle parti, e possono avere solo elementi come contenuto (escluso spazi bianchi, che sono ignorati). Ci sono inoltre alcuni elementi vuoti usati in congiunzione con certi schemi di disposizione.

Tutti i singoli `simboli' in un'espressione matematica devono essere rappresentati da elementi token del MathML. I tipi primari di elementi token del MathML sono identificatori (es. variabili o nomi di funzione), numeri e operatori (comprese le parentesi e i separatori come le virgole). Ci sono inoltre elementi token per rappresentare testo o spazi bianchi che hanno un significato più estetico che matematico, e per rappresentare `letterali stringa' per compatibilità con i sistemi di computer algebra. Si noti che, sebbene un elemento token rappresenti un singolo `simbolo' significativo (nome, numero, etichetta, simbolo matematico, eccetera), tali simboli possono essere composti da più di un carattere. Per esempio sin e 24 sono rappresentati rispettivamente dai singoli token <mi>sin</mi> e <mn>24</mn>.

Nella tradizionale notazione matematica le espressioni sono costruite ricorsivamente a partire da espressioni più piccole, e alla fine a partire da simboli, con le parti raggruppate e posizionate usando una di un piccolo insieme di strutture notazionali, che possono essere viste come `costruttori di espressioni'. Nel MathML le espressioni sono costruite nello stesso modo, con gli schemi di disposizione che assumono il ruolo dei costruttori di espressioni. Gli schemi di disposizione specificano il modo nel quale le sottoespressioni sono riunite a formare espressioni più grandi. La terminologia deriva dal fatto che ogni schema di disposizione corrisponde ad un modo diverso di `disporre' le sue sottoespressioni per formare un'espressione più grande nella tradizionale impaginazione matematica.

3.1.2.2 Terminologia per le altre classi di elementi e per le loro relazioni

La terminologia usata in questo capitolo per classi speciali di elementi, e per relazioni tra elementi, è la seguente: gli elementi di presentazione sono gli elementi MathML definiti nel presente capitolo. Questi elementi sono elencati nella Sezione 3.1.5 [Sommario degli elementi di presentazione]. Gli elementi di contenuto sono gli elementi MathML definiti nel Capitolo 4 [Marcatura di contenuto]. Gli elementi di contenuto sono elencati nella Sezione 4.4 [Gli elementi della marcatura di contenuto].

Un'espressione MathML è una singola istanza di un qualunque elemento di presentazione ad eccezione degli elementi vuoti none o mprescripts, oppure è una singola istanza di un qualunque elemento di contenuto che è ammesso come contenuto di elementi di presentazione (elencati nella Sezione 5.2.4 [Marcatura di contenuto nella marcatura di presentazione]). L'intuizione dietro la definizione di un'espressione è che essa è un elemento con una riproduzione non ambigua senza essere all'interno di un costrutto più grande. Una sottoespressione di un'espressione E è una qualunque espressione MathML che sia parte del contenuto di E, sia direttamente che indirettamente, ovvero sia un `figlio' di E o meno.

Poiché gli schemi di disposizione associano un significato speciale al numero e/o alle posizioni dei loro figli, un figlio di uno schema di disposizione è detto anche argomento di tale elemento. Come conseguenza delle definizioni precedenti, il contenuto di uno schema di disposizione consiste esattamente in una sequenza di zero o più elementi non sovrapposti che sono i suoi argomenti.

3.1.3 Argomenti necessari

Molti degli elementi qui descritti richiedono un numero specifico di argomenti (sempre 1, 2 o 3). Nelle descrizioni dettagliate della sintassi dell'elemento date in seguito, il numero degli argomenti necessari è indicato implicitamente dando nomi per gli argomenti alle varie posizioni. Alcuni elementi hanno requisiti addizionali sul numero o tipo degli argomenti, che sono descritti con i singoli elementi. Per esempio, alcuni elementi accettano sequenze di zero o più argomenti - ovvero possono occorrere anche senza argomenti.

Si noti che gli elementi che codificano lo spazio riprodotto contano come argomenti degli elementi nei quali appaiono. Si veda la Sezione 3.2.6 [Spazio (mspace)] per una discussione sull'uso corretto di tali elementi di spaziatura.

3.1.3.1 Elementi mrow impliciti

Gli elementi elencati nella seguente tabella che richiedono 1* argomenti (msqrt, mstyle, merror, menclose, mpadded, mphantom e mtd) in realtà accettano qualunque numero di argomenti. Comunque, se il numero di argomenti è 0, o è maggiore di 1, trattano il loro contenuto come un singolo elemento mrow implicito formato da tutti i loro argomenti.

Per esempio,

<mtd>
</mtd>

è trattato come se fosse

<mtd>
  <mrow>
  </mrow>
</mtd>

e

<msqrt>
  <mo> - </mo>
  <mn> 1 </mn>
</msqrt>

è trattato come se fosse

<msqrt>
  <mrow>
    <mo> - </mo>
    <mn> 1 </mn>
  </mrow>
</msqrt>

Questa caratteristica permette ai dati MathML di non contenere (ed ai suoi autori di omettere) molti elementi mrow che sarebbero altrimenti necessari.

Nelle descrizioni in questo capitolo dei comportamenti di presentazione degli elementi sopra elencati, si può assumere che il loro contenuto consista in esattamente un'espressione, che può essere un elemento mrow formato dai loro argomenti in questo modo. Comunque, i numeri dei loro argomenti sono mostrati nella seguente tabella come 1*, poiché sono compresi in modo più naturale come elementi che agiscono su una singola espressione.

3.1.3.2 Tabella degli argomenti richiesti

Per convenienza, ecco una tabella del numero di argomenti richiesti da ogni elemento, e i ruoli dei singoli argomenti dove essi sono distinti. Un numero di argomenti di 1* indica un elemento mrow implicito come descritto in precedenza.

Elemento Numero di argomenti richiesti Ruolo degli argomenti (dove essi differiscono per la posizione)
mrow 0 o più  
mfrac 2 numeratore denominatore
msqrt 1*  
mroot 2 base indice
mstyle 1*  
merror 1*  
mpadded 1*  
mphantom 1*  
mfenced 0 o più  
menclose 1*  
msub 2 base pedice
msup 2 base apice
msubsup 3 base pedice apice
munder 2 base testo-sotto-la-base
mover 2 base testo-sopra-la-base
munderover 3 base testo-sotto-la-base testo-sopra-la-base
mmultiscripts 1 o più base (pedice apice)* [<mprescripts/> (prepedice preapice)*]
mtable 0 o più righe 0 o più elementi mtr o mlabeledtr
mlabeledtr 1 o più un'etichetta e 0 o più elementi mtd
mtr 0 o più 0 o più elementi mtd
mtd 1*  
maction 1 o più dipende dall'attributo actiontype

3.1.4 Elementi con comportamenti speciali

Certi elementi di presentazione del MathML hanno comportamenti speciali in certi contesti. Tali comportamenti speciali sono discussi nelle descrizioni dettagliate degli elementi in seguito. Comunque, per comodità, alcune delle classi di comportamenti speciali più importanti sono elencate qui.

Certi elementi sono considerati di spaziatura; essi sono definiti nella Sezione 3.2.6 [Spazio (mspace)]. Questa definizione ha effetto su alcune delle regole di riproduzione suggerite per gli elementi mo (Sezione 3.2.4 [Operatore, parentesi, separatore o accento (mo)]).

Certi elementi, es. msup, possono ornare gli operatori che sono il loro primo argomento. Questi elementi sono elencati nella Sezione 3.2.4 [Operatore, parentesi, separatore o accento (mo)], che definisce precisamente un `operatore ornato' e spiega che effetti ha ciò sulle regole di riproduzione suggerite per gli operatori estensibili.

Certi elementi trattano i loro argomenti come gli argomenti di un `elemento mrow implicito' se ad essi non viene passato esattamente un argomento, come spiegato nella Sezione 3.1.3 [Argomenti necessari].

Nel MathML 1.x l'elemento mtable poteva dedurre gli elementi mtr intorno ai suoi argomenti, e l'elemento mtr poteva dedurre gli elementi mtd. Nel MathML 2.0 gli elementi mtr e mtd devono essere espliciti. Comunque, per compatibilità all'indietro, i riproduttori possono voler continuare a supportare gli elementi mtr e mtd impliciti.

3.1.5 Sommario degli elementi di presentazione

3.1.5.1 Elementi token

mi identificatore
mn numero
mo operatore, parentesi o separatore
mtext testo
mspace spazio
ms letterale stringa
mchar riferimento a caratteri non ASCII
mglyph aggiungere nuovi glifi di caratteri al MathML

3.1.5.2 Schemi generali di disposizione

mrow raggruppa orizzontalmente un numero qualsiasi di sottoespressioni
mfrac forma una frazione da due sottoespressioni
msqrt forma un segno di radice quadrata (radicale senza indice)
mroot forma un radicale con l'indice specificato
mstyle modifica allo stile
merror include un messaggio di errore di sintassi da un preprocessore
mpadded aggiusta lo spazio intorno al contenuto
mphantom rende il contenuto invisibile ma conserva la sua dimensione
mfenced circonda il contenuto con una coppia di parentesi
menclose include il contenuto in un simbolo estensibile come un segno di divisione lunga

3.1.5.3 Schemi di apici, pedici e limiti

msub associa un pedice a una base
msup associa un apice a una base
msubsup associa una coppia pedice-apice a una base
munder scrive del testo sotto una base
mover scrive del testo sopra una base
munderover scrive del testo sopra e sotto una base
mmultiscripts associa preapici, prepedici e indici di tensore a una base

3.1.5.4 Tabelle e matrici

mtable tabella o matrice
mlabeledtr riga in una tabella o matrice con un'etichetta o un numero di equazione
mtr riga in una tabella o matrice
mtd un elemento in una tabella o matrice
maligngroup e malignmark marcatori di allineamento

3.1.5.5 Espressioni vivacizzanti

maction associa azioni ad una sottoespressione

3.2 Elementi token

Gli elementi token possono contenere ogni sequenza di zero o più caratteri MathML. In particolare, sono permessi i token con contenuto vuoto, e dovrebbero essere tipicamente riprodotti invisibilmente, con nessuna ampiezza tranne la normale spaziatura aggiuntiva per quel tipo di elemento token.

Il set completo dei caratteri MathML è descritto nel Capitolo 6 [Caratteri, entità e font]. In generale, i caratteri MathML possono essere sia rappresentati direttamente come dati di caratteri Unicode che indirettamente tramite l'elemento &mchar; (si veda la Sezione 3.2.8 [Riferimento a caratteri non ASCII (mchar)]). I caratteri MathML possono essere inoltre rappresentati tramite riferimenti ad entità, sebbene questa pratica sia disapprovata nel MathML 2.0. I nuovi caratteri MathML, o glifi non standard per caratteri MathML esistenti, possono essere rappresentati per mezzo dell'elemento &mglyph;.

I caratteri MathML possono occorrere solo come parte del contenuto di un elemento token. L'unica eccezione è lo spazio bianco tra elementi, che è ignorato.

A parte gli elementi &mchar; e &mglyph;, l'elemento malignmark è l'unico altro elemento permesso nel contenuto di token. Si veda la Sezione 3.5.5 [Marcatori di allineamento] per dettagli.

3.2.1 Attributi comuni agli elementi token

Su tutti gli elementi token escluso mspace, mchar e mglyph, e su nessun altro elemento tranne mstyle, sono forniti vari attributi relativi alla formattazione del testo. Essi sono:

Nome valori predefinito
fontsize numero e v-unità ereditato
fontweight normal | bold ereditato
fontstyle normal | italic normal (tranne su <mi>)
fontfamily stringa | famiglia-di-font-css ereditato
color #rgb | #rrggbb | nome-di-colore-html ereditato

(Si veda la Sezione 2.3.4 [Valori degli attributi del MathML] per la terminologia e la notazione usate nelle descrizioni dei valori degli attributi.)

Gli elementi token (tranne mspace) devono essere riprodotti come il loro contenuto (ovvero, nel caso visuale, come una riga orizzontale a spaziatura stretta di glifi standard per i caratteri nel loro contenuto) usando gli attributi sopra elencati, con gli spazi intorno modificati da regole o attributi specifici ad ogni tipo di elemento token. Alcuni dei singoli attributi sono discussi ulteriormente in seguito.

Si tenga presente che tutti gli elementi MathML, compresi i token, accettano gli attributi class, style e id per compatibilità con i meccanismi dei fogli di stile, come descritto nella Sezione 2.3.5 [Attributi condivisi da tutti gli elementi del MathML]. In generale, le proprietà dei font controllate dagli attributi sopra elencati sono gestite in modo migliore utilizzando i fogli stile CSS o XSL a seconda del contesto.

Le espressioni MathML sono spesso incorporate in un formato di testo come l'HTML, e le loro presentazioni sono ugualmente incorporate nella presentazione del testo circostante. Il riproduttore del testo circostante (es. un browser) dovrebbe fornire al riproduttore MathML informazioni sull'ambiente di riproduzione, compresi gli attributi del testo circostante come la dimensione del suo font, in modo che il MathML possa essere presentato in uno stile compatibile. Per questa ragione, la maggior parte dei valori degli attributi che hanno effetti sulla riproduzione del testo sono ereditate dall'ambiente di presentazione, come mostrato nella colonna `predefinito' nella tabella precedente. (Si noti che è altrettanto importante che l'ambiente di presentazione fornisca al riproduttore informazioni aggiuntive, come la posizione della linea di base del testo circostante, che non è specificata da nessun attributo MathML.)

L'eccezione al modello generale di ereditarietà è l'attributo fontstyle, il cui valore di default è normal (non inclinato) per la maggior parte dei token, ma per mi dipende dal contenuto in un modo descritto nella sezione a proposito di mi, la Sezione 3.2.2 [Identificatore (mi)]. Si noti che l'attributo fontstyle non è ereditato nel MathML, anche se la proprietà CSS1 corrispondente `font-style' è ereditata nel CSS.

L'attributo fontsize specifica la dimensione del font desiderata. v-unità rappresenta un'unità di lunghezza verticale (si veda la Sezione 2.3.4.3 [Attributi compatibili con i CSS]). L'unità più comune per specificare le dimensioni dei font nell'impaginazione è pt (punti).

Se la dimensione richiesta del font corrente non è disponibile, il riproduttore dovrebbe approssimarla nella maniera che probabilmente condurrà alla riproduzione più comprensibile e di qualità migliore.

Molti elementi MathML cambiano automaticamente il valore di fontsize in alcuni dei loro figli; si veda la discussione sull'attributo scriptlevel nella sezione sull'elemento mstyle, la Sezione 3.3.4 [Modifiche allo stile (mstyle)].

Il valore dell'attributo fontfamily deve essere il nome di un font che può essere disponibile a un riproduttore MathML, o informazioni che permettono al riproduttore di scegliere un font in qualche maniera; i valori accettabili e i loro significati dipendono dal particolare riproduttore e dall'ambiente di riproduzione in uso, e non sono specificati dal MathML (ma si veda la nota a proposito di famiglia-di-font-css in seguito). (Si noti che il meccanismo del riproduttore per trovare i font a seconda del nome potrebbe tener conto delle maiuscole.)

Se il valore dell'attributo fontfamily non è riconosciuto da un particolare riproduttore MathML, questo non deve mai essere interpretato come un errore MathML; piuttosto, il riproduttore deve usare un font che considera un sostituto adatto per il font richiesto, oppure ignorare l'attributo e agire come se non fosse stato dato nessun valore.

Si noti che qualunque uso dell'attributo fontfamily improbabilmente sarà portabile da un riproduttore MathML a un altro. In particolare, non deve mai essere usato per cercare di ottenere l'effetto di un riferimento ad un carattere MathML non ASCII (per esempio, usando un riferimento a un carattere in un qualche font simbolico che mappa caratteri ordinari in glifi per caratteri non ASCII). Come corollario a questo principio, i riproduttori MathML devono cercare di produrre sempre presentazioni comprensibili per i caratteri MathML elencati nel Capitolo 6 [Caratteri, entità e font], anche quando questi caratteri non sono disponibili nella famiglia di font indicata. Tale presentazione è sempre possibile - come ultima risorsa, un carattere può essere riprodotto in modo da apparire come un riferimento ad entità in stile XML usando uno dei nomi di entità dati per lo stesso carattere nel Capitolo 6 [Caratteri, entità e font].

Il simbolo famiglia-di-font-css si riferisce ad un valore legale per la proprietà font-family nel CSS1, che è un elenco di nomi di famiglie di font alternative o di tipi di font generici, separati da virgole, in ordine di preferenza, come documentato più dettagliatamente nel CSS1. I riproduttori MathML sono incoraggiati a fare uso della sintassi CSS per specificare i font quando ciò è pratico nel loro ambiente di riproduzione, anche se non supportano altrimenti i CSS. (Si veda anche la sottosezione degli attributi compatibili con i CSS all'interno della Sezione 2.3.4.3 [Attributi compatibili con i CSS].)

La sintassi e il significato dell'attributo color sono come descritti per lo stesso attributo di <mstyle> (Sezione 3.3.4 [Modifiche allo stile (mstyle)]).

3.2.2 Identificatore (mi)

3.2.2.1 Descrizione

Un elemento mi rappresenta un nome simbolico o testo arbitrario che deve essere riprodotto come identificatore. Gli identificatori possono comprendere variabili, nomi di funzioni e costanti simboliche.

Non tutti gli `identificatori matematici' sono rappresentati da elementi mi - per esempio, le variabili con pedici o con apici devono essere rappresentate usando rispettivamente gli elementi msub o msup. Viceversa, testo arbitrario che assume il ruolo di un `termine' (come un'ellisse in una serie di somme) può essere rappresentato usando un elemento mi, come mostrato in un esempio nella Sezione 3.2.5.4 [Mescolare testo e matematica].

Si dovrebbe evidenziare che mi è un elemento di presentazione, e come tale si limita ad indicare che il suo contenuto dovrebbe essere presentato come identificatore. Nella maggior parte dei casi il contenuto di un elemento mi rappresenterà realmente un identificatore matematico come una variabile o un nome di funzione. Comunque, come indica il paragrafo precedente, la corrispondenza tra notazioni che dovrebbero essere riprodotte come identificatori e notazioni che intendono rappresentare identificatori matematici non è perfetta. Per un elemento la cui semantica è garantita essere quella di un identificatore, si veda la descrizione dell'elemento ci nel Capitolo 4 [Marcatura di contenuto].

3.2.2.2 Attributi

L'elemento mi accetta gli attributi elencati nella Sezione 3.2.1 [Attributi comuni agli elementi token], ma in un caso con un diverso valore predefinito:

Nome valori predefinito
fontstyle normal | italic (dipende dal contenuto; descritto in seguito)

Un tipico riproduttore grafico presenterà un elemento mi come i caratteri nel suo contenuto, senza spaziatura aggiuntiva intorno ai caratteri (tranne la spaziatura associata con gli elementi vicini). Il valore predefinito di fontstyle sarà (tipicamente) normal (non inclinato) a meno che il contenuto non sia un singolo carattere, nel qual caso esso sarà italic (corsivo). Si noti che questa regola per fontstyle è specifica degli elementi mi; il valore predefinito per l'attributo fontstyle di altri elementi token del MathML è normal.

3.2.2.3 Esempi

<mi> x </mi>
<mi> D </mi>
<mi> sin </mi>
<mi></mi>

Un elemento mi senza contenuto è permesso; <mi></mi> potrebbe, per esempio, essere usato in un `generatore di espressioni' per rappresentare una locazione in un'espressione MathML che richiede un `termine' (secondo la sintassi convenzionale per la matematica) ma ancora non ne contiene uno.

Gli identificatori comprendono nomi di funzioni come `sin'. Espressioni come `sin x' dovrebbero essere scritte usando l'operatore &ApplyFunction; (che ha anche il nome breve &af;) come mostrato in seguito; si veda anche la discussione sugli operatori invisibili nella Sezione 3.2.4 [Operatore, parentesi, separatore o accento (mo)].

<mrow>
  <mi> sin </mi>
  <mo> &ApplyFunction; </mo>
  <mi> x </mi>
</mrow>

Testo vario che dovrebbe essere trattato come un `termine' può inoltre essere rappresentato da un elemento mi, come in:

<mrow>
  <mn> 1 </mn>
  <mo> + </mo>
  <mi> ... </mi>
  <mo> + </mo>
  <mi> n </mi>
</mrow>

Quando un elemento mi è usato in tali situazioni straordinarie, impostare esplicitamente l'attributo fontstyle può dare risultati migliori del comportamento predefinito di alcuni riproduttori.

I nomi delle costanti simboliche devono essere rappresentati come elementi mi:

<mi> &pi; </mi>
<mi> &ImaginaryI; </mi>
<mi> &ExponentialE; </mi>

L'uso di riferimenti ad entità speciali per tali costanti può semplificare l'interpretazione degli elementi di presentazione del MathML. Si veda il Capitolo 6 [Caratteri, entità e font] per un elenco completo dei riferimenti ad entità carattere nel MathML.

3.2.3 Numero (mn)

3.2.3.1 Descrizione

Un elemento mn rappresenta un `letterale numerico' o altri dati che devrono essere riprodotti come un letterale numerico. Generalmente parlando, un letterale numerico è una sequenza di cifre, che può comprendere un punto decimale, che rappresenta un numero intero o reale senza segno.

Il concetto di un `numero' matematico dipende dal contesto, e non è ben definito a livello astratto. Come conseguenza, non tutti i numeri matematici dovrebbero essere rappresentati usando mn; in seguito sono mostrati esempi di numeri matematici che dovrebbero essere rappresentati diversamente, ed essi comprendono i numeri negativi, i numeri complessi, i rapporti di numeri mostrati come frazioni e i nomi delle costanti numeriche.

Viceversa, poiché mn è un elemento di presentazione, ci sono alcune situazioni dove può essere desiderabile includere testo arbitrario nel contenuto di un elemento mn che dovrebbe semplicemente essere riprodotto come letterale numerico, anche se il contenuto può non essere interpretabile in modo non ambiguo come un numero secondo una qualsiasi codifica standard particolare di numeri come sequenze di caratteri. Come regola generale, comunque, l'elemento mn deve essere riservato per situazioni dove il suo contenuto intende realmente rappresentare una quantità numerica in qualche modo. Per un elemento la cui semantica è garantita essere quella di un tipo particolare di numero matematico, si veda la descrizione di cn nel Capitolo 4 [Marcatura di contenuto].

3.2.3.2 Attributi

L'elemento mn accetta gli attributi elencati nella Sezione 3.2.1 [Attributi comuni agli elementi token].

Un tipico riproduttore grafico presenterebbe un elemento mn come i caratteri del suo contenuto, senza spaziatura aggiuntiva intorno ad essi (tranne la spaziatura degli elementi vicini come mo). A differenza di mi, gli elementi mn sono (tipicamente) presentati in un font non inclinato come comportamento predefinito, indipendentemente dal loro contenuto.

3.2.3.3 Esempi

<mn> 2 </mn>
<mn> 0.123 </mn>
<mn> 1,000,000 </mn>
<mn> 2.1e10 </mn>
<mn> 0xFFEF </mn>
<mn> MCMLXIX </mn>
<mn> ventuno </mn>

3.2.3.4 Numeri che non dovrebbero essere scritti usando mn soltanto

Molti numeri matematici dovrebbero essere rappresentati usando elementi di presentazione diversi da mn soltanto; questi comprendono i numeri complessi, i rapporti di numeri mostrati come frazioni e i nomi delle costanti numeriche. Esempi di rappresentazioni MathML di tali numeri comprendono:

<mrow>
  <mn> 2 </mn>
  <mo> + </mo>
  <mrow>
    <mn> 3 </mn>
    <mo> &InvisibleTimes; </mo>
    <mi> &ImaginaryI; </mi>
  </mrow>
</mrow>
<mfrac> <mn> 1 </mn> <mn> 2 </mn> </mfrac>
<mi> &pi; </mi>
<mi> &ExponentialE; </mi>

3.2.4 Operatore, parentesi, separatore o accento (mo)

3.2.4.1 Descrizione

Un elemento mo rappresenta un operatore o qualunque cosa che deve essere riprodotta come operatore. In generale, le convenzioni notazionali per gli operatori matematici sono piuttosto complicate, e perciò il MathML fornisce un meccanismo relativamente sofisticato per specificare il comportamento di riproduzione di un elemento mo. Come conseguenza, nel MathML l'elenco di cose che devono essere `riprodotte come operatori' comprende varie notazioni che non sono operatori matematici nel senso comune. Al di là degli operatori ordinari con le forme infisse, prefisse o postfisse, questi comprendono i caratteri di delimitazione come le parentesi tonde, quadre e le barre del `valore assoluto', i separatori come la virgola e il punto e virgola, e gli accenti matematici come una barra o una tilde sopra un simbolo.

Il termine `operatore' come usato nel presente capitolo significa ogni simbolo o notazione che deve essere riprodotta come operatore, e che è perciò rappresentabile con un elemento mo. Ovvero, il termine `operatore' comprende ogni operatore ordinario, parentesi, separatore o accento a meno che non sia diversamente specificato o chiaro dal contesto.

Tutti questi simboli sono rappresentati nel MathML con elementi mo poiché sono soggetti essenzialmente agli stessi attributi e alle stesse regole di riproduzione; sono supportate, quando esistono, sottili distinzioni nella presentazione di queste classi di simboli usando gli attributi booleani fence (parentesi), separator e accent, che possono essere usati per distinguere questi casi.

Una caratteristica basilare dell'elemento mo è che i valori predefiniti dei suoi attributi sono impostati caso per caso da un `dizionario degli operatori' come spiegato in seguito. In particolare, i valori predefiniti di fence, separator e accent possono essere trovati di solito nel dizionario degli operatori e perciò non hanno bisogno di essere specificati in ogni elemento mo.

Si noti che alcuni operatori matematici sono rappresentati non da elementi mo soltanto, ma da elementi mo `ornati' con (per esempio) testo sopra di essi; questo è ulteriormente descritto in seguito. Viceversa, come elementi di presentazione, gli elementi mo possono contenere testo arbitrario, anche quando quel testo non ha un'interpretazione standard come operatore; per un esempio si veda la discussione `Mescolare testo e matematica' nella Sezione 3.2.5 [Testo (mtext)]. Si veda inoltre il Capitolo 4 [Marcatura di contenuto] per definizioni di elementi di contenuto del MathML che garantiscono di avere la semantica di operatori matematici particolari.

3.2.4.2 Attributi

Gli elementi mo accettano gli attributi elencati nella Sezione 3.2.1 [Attributi comuni agli elementi token], e gli attributi aggiuntivi qui elencati. La maggior parte degli attributi ottiene i propri valori predefiniti dalla Sezione 3.2.4.7.1 [Il dizionario degli operatori], come descritto in seguito in questa sezione. Quando non viene trovata una voce nel dizionario per un dato elemento mo viene usato il valore predefinito qui mostrato tra parentesi.

Nome valori predefinito
form prefix | infix | postfix impostato a seconda della posizione dell'operatore in un elemento mrow (segue la regola); usato con il contenuto di mo come indice per il dizionario degli operatori
fence true | false impostato dal dizionario (false)
separator true | false impostato dal dizionario (false)
lspace numero h-unità | spazio con nome impostato dal dizionario (thickmathspace)
rspace numero h-unità | spazio con nome impostato dal dizionario (thickmathspace)
stretchy true | false impostato dal dizionario (false)
symmetric true | false impostato dal dizionario (true)
maxsize numero [ v-unità | h-unità ] | spazio con nome | infinity impostato dal dizionario (infinity)
minsize numero [ v-unità | h-unità ] | spazio con nome impostato dal dizionario (1)
largeop true | false impostato dal dictionario (false)
movablelimits true | false impostato dal dizionario (false)
accent true | false impostato dal dizionario (false)

h-unità rappresenta un'unità di lunghezza orizzontale, e v-unità rappresenta un'unità di lunghezza verticale (si veda la Sezione 2.3.4.2 [Attributi con unità]). spazio con nome è uno di veryverythinmathspace, verythinmathspace, thinmathspace, mediummathspace, thickmathspace, verythickmathspace o veryverythickmathspace. Questi valori sono configurabili dall'elemento mstyle che è discusso nella Sezione 3.3.4 [Modifiche allo stile (mstyle)]. I valori di default di veryverythinmathspace ... veryverythickmathspace sono rispettivamente 1/18em ... 7/18em.

Se non viene specificata un'unità con maxsize o minsize, il numero è un moltiplicatore della normale dimensione dell'operatore nella direzione (o nelle direzioni) nelle quali si estende. Questi attributi sono spiegati in seguito.

I tipici riproduttori grafici mostreranno tutti gli elementi mo come i caratteri nel loro contenuto, con spaziatura aggiuntiva intorno agli elementi determinata dagli attributi sopra elencati. Le regole dettagliate per determinare la spaziatura tra gli operatori nelle presentazioni visuali sono descritte in una sottosezione in seguito. Come sempre, il MathML non richiede una presentazione specifica, e queste regole sono fornite come suggerimenti per comodità degli implementatori.

I riproduttori che non hanno accesso a tutti i font dell'insieme di caratteri del MathML possono scegliere di non riprodurre un elemento mo come i caratteri precisi nel suo contenuto in alcuni casi. Per esempio, <mo> &le; </mo> potrebbe essere riprodotto come <= su un terminale. Comunque, come regola generale, i riproduttori dovrebbero tentare di riprodurre il contenuto di un elemento mo più letteralmente possibile. Ovvero, <mo> &le; </mo> e <mo> &lt;= </mo> dovrebbero essere presentati diversamente. (Il primo dovrebbe essere presentato come un singolo carattere che rappresenta un segno di minore-o-uguale, e il secondo come la sequenza di due caratteri <=.)

3.2.4.3 Esempi con operatori ordinari

<mo> + </mo>
<mo> &lt; </mo>
<mo> &le; </mo>
<mo> &lt;= </mo>
<mo> ++ </mo>
<mo> &sum; </mo>
<mo> .NOT. </mo>
<mo> and </mo>
<mo> &InvisibleTimes; </mo>

3.2.4.4 Esempi con parentesi e separatori

Si noti che gli elementi mo in questi esempi non hanno bisogno di attributi fence o separator espliciti, poiché essi possono essere trovati usando il dizionario degli operatori come descritto in seguito. Alcuni di questi esempi possono essere inoltre codificati usando l'elemento mfenced descritto nella Sezione 3.3.8 [Contenuto tra coppie di parentesi (mfenced)].

(a+b)

<mrow>
  <mo> ( </mo>
  <mrow>
    <mi> a </mi>
    <mo> + </mo>
    <mi> b </mi>
  </mrow>
  <mo> ) </mo>
</mrow>

[0,1)

<mrow>
  <mo> [ </mo>
  <mrow>
    <mn> 0 </mn>
    <mo> , </mo>
    <mn> 1 </mn>
  </mrow>
  <mo> ) </mo>
</mrow>

f(x,y)

<mrow>
  <mi> f </mi>
  <mo> &ApplyFunction; </mo>
  <mrow>
    <mo> ( </mo>
    <mrow>
      <mi> x </mi>
      <mo> , </mo>
      <mi> y </mi>
    </mrow>
    <mo> ) </mo>
  </mrow>
</mrow>

3.2.4.5 Operatori invisibili

Certi operatori che sono `invisibili' nella notazione matematica tradizionale dovrebbero essere rappresentati da riferimenti ad entità specifiche all'interno di elementi mo, piuttosto che semplicemente da niente. I riferimenti ad entità usati per questi `operatori invisibili' sono:

Nome intero Nome breve Esempi di uso
&InvisibleTimes; &it; xy
&ApplyFunction; &af; f(x) sin x
&InvisibleComma; &ic; m12

Le rappresentazioni in MathML degli esempi nella tabella precedente sono:

<mrow>
  <mi> x </mi>
  <mo> &InvisibleTimes; </mo>
  <mi> y </mi>
</mrow>
<mrow>
  <mi> f </mi>
  <mo> &ApplyFunction; </mo>
  <mrow>
    <mo> ( </mo>
    <mi> x </mi>
    <mo> ) </mo>
  </mrow>
</mrow>
<mrow>
  <mi> sin </mi>
  <mo> &ApplyFunction; </mo>
  <mi> x </mi>
</mrow>
<msub>
  <mi> m </mi>
  <mrow>
    <mn> 1 </mn>
    <mo> &InvisibleComma; </mo>
    <mn> 2 </mn>
  </mrow>
</msub>

Le ragioni per usare specifici elementi mo per gli operatori invisibili comprendono:

Per esempio, un riproduttore audio potrebbe riprodurre f(x) (rappresentata come nell'esempio precedente) dicendo `f di x', ma usare la parola `per' nella sua riproduzione di xy. Sebbene la sua riproduzione debba essere diversa a seconda della struttura degli elementi vicini (a volte escludendo `di' o `per' del tutto), il suo compito è reso molto più facile dall'uso di un diverso elemento mo per ogni operatore invisibile.

3.2.4.6 Nomi per altri operatori speciali

Il MathML comprende anche &DifferentialD; per l'uso in un elemento mo per rappresentare il simbolo di operatore differenziale denotato normalmente da `d'. Le ragioni per usare esplicitamente questa entità speciale sono simili a quelle per usare le entità speciali per gli operatori invisibili descritte nella sezione precedente.

3.2.4.7 Regole di riproduzione dettagliate per elementi mo

I tipici comportamenti di riproduzione visuale per gli elementi mo sono più complessi che per gli altri elementi token del MathML, così le regole per riprodurli sono descritte in questa sottosezione separata.

Si noti che, come tutte le regole di presentazione nel MathML, queste regole sono suggerimenti piuttosto che requisiti. Inoltre, non è stato fatto nessun tentativo di specificare completamente la presentazione; piuttosto, sono state date abbastanza informazioni per rendere l'effetto inteso dei vari attibuti di presentazione più chiaro possibile.

Il dizionario degli operatori

Molti simboli matematici, come un segno di integrale, un segno di addizione o una parentesi, hanno un uso notazionale tradizionale ben stabilito e prevedibile. Tipicamente, questo uso ammonta a certi valori predefiniti per gli attributi degli elementi mo con un contenuto specifico e un attributo form specifico. Poiché questi valori predefiniti variano da simbolo a simbolo, il MathML anticipa che i riproduttori avranno un `dizionario degli operatori' di attributi predefiniti per gli elementi mo (si veda l'Appendice D [Dizionario degli operatori]) indicizzato dal contenuto di ogni elemento mo e dall'attributo form. Se un elemento mo non è elencato nel dizionario, dovrebbero essere usati i valori predefiniti mostrati tra parentesi nella tabella degli attributi per mo, poiché questi valori sono tipicamente accettabili per un operatore generico.

Alcuni operatori sono `sovrascritti', nel senso che possono occorrere in più di una forma (prefissa, infissa o postfissa), con proprietà di riproduzione probabilmente diverse per ogni forma. Per esempio, `+' può essere sia un operatore prefisso che infisso. Tipicamente, un riproduttore visuale aggiungerà spazio ad entrambi i lati di un operatore infisso, e solo alla sinistra di un operatore prefisso. L'attributo form permette di specificare quale forma utilizzare, nel caso che siano possibili più di una forma secondo il dizionario degli operatori e il valore predefinito descritto in seguito non sia adatto.

Valore predefinito dell'attributo form

L'attributo form non deve di solito essere specificato esplicitamente, poiché ci sono efficaci regole euristiche per inferire il valore dell'attributo form dal contesto. Se non è specificato, e ci sono più forme possibili nel dizionario per un elemento mo con il contenuto dato, il riproduttore deve scegliere quale forma usare come segue (ma si vedano le eccezioni per gli operatori ornati, descritte in seguito):

Si noti che queste regole fanno riferimento all'elemento mrow nel quale si trova l'elemento mo. In alcune situazioni questo elemento mrow potrebbe essere un elemento mrow implicito presente intorno agli argomenti di un elemento come msqrt o mtd.

Le parentesi aperte (sinistre) devono avere forma prefissa (form="prefix"), e le parentesi chiuse (destre) devono avere forma postfissa (form="postfix"); i separatori sono solitamente `infissi', ma non sempre, a seconda del contesto. Come per gli operatori ordinari, questi valori non hanno normalmente bisogno di essere specificati in modo esplicito.

Se l'operatore non occorre nel dizionario con la forma specificata, il riproduttore deve usare una delle forme disponibili, in ordine di preferenza: infissa, postfissa, prefissa; se nessuna forma è disponibile per il dato contenuto dell'elemento mo, il riproduttore deve usare i valori predefiniti dati tra parentesi nella tabella degli attributi per mo.

Eccezione per gli operatori ornati

C'è un'eccezione alle regole precedenti per la scelta del valore predefinito dell'attributo form di un elemento mo. Un elemento mo che è `ornato' da uno o più pedici o apici annidati, testo circostante, spazi bianchi o modifiche allo stile si comporta diversamente. E' l'operatore ornato nel complesso (questo è definito in modo preciso, in seguito) la cui posizione in un elemento mrow è esaminata dalle regole precedenti e i cui spazi circostanti sono influenzati dalla sua forma, non l'elemento mo al suo interno; comunque, gli attributi che influenzano gli spazi circostanti sono presi dall'elemento mo al centro (o dalla voce nel dizionario di quell'elemento).

Per esempio, il `+4' in a+4b deve essere considerato un operatore infisso nel complesso, data la sua posizione al centro di un elemento mrow, ma i suoi attributi di presentazione devono essere presi dall'elemento mo che rappresenta il `+', o, quando questi non siano specificati esplicitamente, dalla voce nel dizionario degli operatori per <mo form="infix"> + </mo>. La definizione precisa di un `operatore ornato' è:

Si noti che questa definizione permette l'ornamento annidato solo quando non intervengono elementi circostanti che non fanno parte dell'elenco precedente.

Le regole precedenti per la scelta delle forme degli operatori per la definizione degli operatori ornati sono scelte in modo tale che in tutti i casi comuni non sia necessario che l'autore specifichi un attributo form.

Giustificazione per la definizione degli operatori ornati

Le seguenti note sono incluse come giustificazione per certi aspetti delle definizioni precedenti, ma non dovrebbero essere importanti per la maggior parte degli utenti del MathML.

Un elemento mfrac è compreso come `ornamento' a causa della notazione comune per un operatore differenziale:

<mfrac>
  <mo> &DifferentialD; </mo>
  <mrow>
    <mo> &DifferentialD; </mo>
    <mi> x </mi>
  </mrow>
</mfrac>

Poiché la definizione di operatore ornato ha effetti sull'uso degli attributi relativi all'estensibilità, è importante che includa parentesi ornate oltre agli operatori ordinari; quindi si applica ad ogni elemento mo.

Si noti che un elemento mrow che contiene un solo argomento è un operatore ornato se e solo se il suo argomento è un operatore ornato. Questo perché un elemento mrow con un singolo argomento deve essere equivalente in ogni aspetto a quell'argomento solo (come discusso nella Sezione 3.3.1 [Raggruppare orizzontalmente le sottoespressioni (mrow)]). Questo significa che un elemento mo che sia l'unico argomento di un elemento mrow determinerà il valore predefinito del suo attributo form a seconda della posizione di quell'elemento mrow in un altro elemento mrow circostante, eventualmente implicito (se ce n'è uno), piuttosto che a seconda della sua posizione nell'mrow dove è l'unico argomento.

Si noti che la definizione precedente definisce `ornato' un qualunque elemento mo - ovvero, `operatore ornato' può essere considerato (e implementato nei riproduttori) come una classe speciale di espressioni MathML, della quale mo è un caso specifico.

Spaziatura intorno ad un operatore

L'ammontare di spazio aggiunto intorno ad un operatore (o ad un operatore ornato), quando esso occorre in un mrow, può essere direttamente specificato dagli attributi lspace e rspace. Questi valori sono in ems se non sono date unità. Per convenzione, gli operatori che tendono a legarsi strettamente ai loro argomenti hanno valori più piccoli per la spaziatura di quelli che tendono a legarsi meno strettamente. Questa convenzione dovrebbe essere seguita nel dizionario degli operatori incluso in un riproduttore MathML. In TEX questi valori possono essere soltanto uno di tre valori; tipicamente essi sono 3/18em, 4/18em e 5/18em. Il MathML non impone questo limite.

Alcuni riproduttori possono scegliere di non usare nessuno spazio intorno alla maggior parte degli operatori che appaiono all'interno di pedici o apici, come si fa in TEX.

I riproduttori non grafici dovrebbero trattare gli attributi di spaziatura, come gli altri attributi di presentazione qui descritti, in modi analoghi secondo il loro mezzo di riproduzione.

3.2.4.8 Estensibilità degli operatori, delle parentesi e degli accenti

Quattro attributi governano se e come un operatore (eventualmente ornato) può estendersi in modo da raggiungere la dimensione degli altri elementi: stretchy, symmetric, maxsize e minsize. Se un operatore ha l'attributo stretchy=true, allora esso (ovvero, ogni carattere nel suo contenuto) obbedisce alle regole di estensibilità elencate in seguito, dati i vincoli imposti dai font e dal loro sistema di riproduzione. In pratica, i tipici riproduttori saranno in grado solamente di estendere un piccolo insieme di caratteri, e molto probabilmente riusciranno a generare soltanto un insieme discreto di dimensioni di caratteri.

Non è previsto in MathML un modo per specificare in che direzione (orizzontale o verticale) estendere un particolare carattere o operatore; piuttosto, quando si ha stretchy=true il carattere dovrebbe essere esteso in ogni direzione nella quale ciò è possibile. Spetta al riproduttore sapere in quale direzione può estendere ogni carattere. (La maggior parte dei caratteri possono essere estesi in al più una direzione dai tipici riproduttori, ma alcuni riproduttori possono essere in grado di estendere certi caratteri, come le frecce diagonali, in entrambe le direzioni indipendentemente.)

Gli attributi minsize e maxsize limitano l'ammontare dell'estensibilità (in entrambe le direzioni). Questi due attributi sono dati come moltiplicatori della dimensione normale dell'operatore nella direzione o nelle direzioni in cui si estende, o come dimensioni assolute usando le unità. Per esempio, se un carattere ha maxsize="3", allora può crescere fino ad essere non più di tre volte la sua dimensione normale (non estesa).

L'attributo symmetric governa se l'altezza e la profondità sopra e sotto l'asse del carattere devono essere uguali (forzando sia l'altezza che la profondità ad essere uguali al valore maggiore delle due). Un esempio di una situazione dove si potrebbe impostare symmetric=false nasce con le parentesi intorno ad una matrice non allineata sull'asse, caso che occorre frequentemente quando si moltiplicano matrici non quadrate. In questo caso si vuole che le parentesi si estendano per coprire la matrice, mentre estendere le parentesi in modo simmetrico le farebbe portare oltre uno dei limiti della matrice. L'attributo symmetric si applica solo ai caratteri che si estendono verticalmente (altrimenti viene ignorato).

Se un elemento mo estensibile è ornato (come definito in precedenza in questa sezione), l'elemento mo fondamentale è esteso fino ad una dimensione basata sul contesto dell'operatore ornato nell'insieme, ovvero alla stessa dimensione che avrebbe se gli ornamenti non fossero presenti. Per esempio, le parentesi nell'esempio seguente (che sarebbero tipicamente impostate estensibili dal dizionario degli operatori) saranno estese entrambe alla stessa dimensione, la stessa dimensione che avrebbero se non fossero sottolineate o sopralineate, e inoltre copriranno lo stesso intervallo verticale:

<mrow>
  <munder>
    <mo> ( </mo>
    <mo> &UnderBar; </mo>
  </munder>
  <mfrac>
    <mi> a </mi>
    <mi> b </mi>
  </mfrac>
  <mover>
    <mo> ) </mo>
    <mo> &OverBar; </mo>
  </mover>
</mrow>

Si noti che questo vuol dire che le regole di estensibilità date in seguito devono far riferimento al contesto di un operatore ornato nell'insieme, non solo all'elemento mo in se stesso.

Esempio di attributi estensibili

Questo mostra un modo di impostare la dimensione massima di una parentesi in modo che non cresca, anche se il suo valore di default è stretchy=true.

<mrow>
  <mo maxsize="1"> ( </mo>
  <mfrac>
    <mi> a </mi> <mi> b </mi>
  </mfrac>
  <mo maxsize="1"> ) </mo>
</mrow>

L'esempio precedente dovrebbe essere presentato come (\frac{a}{b}) rispetto alla presentazione predefinita \left(\frac{a}{b}\right).

Si noti che ogni parentesi è ridimensionata indipendentemente; se solo una di esse avesse maxsize="1", sarebbero riprodotte con dimensioni diverse.

Regole di estensibilità verticale

La maggior parte delle parentesi aperte e chiuse sono definite nel dizionario degli operatori estensibili come comportamento predefinito; e si estendono verticalmente. Inoltre, operatori come &sum;, &int;, / e le frecce verticali si estendono verticalmente come comportamento predefinito.

Nel caso di un operatore etensibile nella cella di una tabella (ovvero dentro un elemento mtd), le regole precedenti suppongono che ogni cella della riga della tabella che contiene l'operatore estensibile copra esattamente una riga. (Equivalentemente, il valore dell'attributo rowspan si assume 1 per tutte le celle nella riga della tabella, compresa la cella che contiene l'operatore). Quando non è questo il caso, l'operatore deve essere eseteso verticalmente per coprire solo quelle celle della tabella che sono interamente all'interno dell'insieme di righe che copre la cella dell'operatore. Le celle della tabella che si estendono in righe non coperte dalla cella dell'operatore estensibile devono essere ignorate. Si veda la Sezione 3.5.4.2 [Attributi] per dettagli sull'attributo rowspan.

Regole di estensibilità orizzontale

Come comportamento predefinito, la maggior parte delle frecce orizzontali e alcuni accenti sono estensibili orizzontalmente.

Nel caso di un operatore estensibile nella cella di una tabella (ovvero all'interno di un elemento mtd), le regole precedenti suppongono che ogni cella della colonna della tabella che contiene l'operatore estensibile copra esattamente una colonna. (Equivalentemente, il valore dell'attributo columnspan si assume 1 per tutte le celle nella riga della tabella, compresa la cella che contiene l'operatore). Quando questo non è il caso, l'operatore deve essere esteso orizzontalmente per coprire solo quelle celle della tabella che sono interamente all'interno dell'insieme di colonne della tabella che copre la cella dell'operatore. Le celle della tabella che si estendono in colonne non coperte dalla cella dell'operatore estensibile devono essere ignorate. Si veda la Sezione 3.5.4.2 [Attributi] per dettagli sull'attributo rowspan.

Le regole per l'estensibilità orizzontale comprendono gli elementi mtd per permettere alle frecce di estendersi per essere usate in diagrammi commutativi disposti usando mtable. Le regole per l'estensibilità orizzontale comprendono testo sopra e sotto gli operatori per fare funzionare esempi come questo:

<mrow>
  <mi> x </mi>
  <munder>
    <mo> &RightArrow; </mo>
    <mtext> maps to </mtext>
  </munder>
  <mi> y </mi>
</mrow>

Questo viene visualizzato come x \widearrow{\mathrm{maps~to}} y.

Regole comuni all'estensibilità orizzontale e verticale

Se un operatore estensibile non deve estendersi (ovvero se non è in una delle locazioni menzionate in precedenza, o se non ci sono altre espressioni tali che dovrebbe estendersi per raggiungere la loro dimensione), allora ha la dimensione standard (non estesa) determinata dal font e dall'attuale dimensione del font.

Se un operatore estensibile deve estendersi, ma tutte le altre espressioni nell'elemento o oggetto che lo contiene (come descritto in precedenza) sono a loro volta estensibili, tutti gli elementi che possono estendersi dovrebbero crescere fino alla dimensione massima non estesa di tutti gli elementi nell'oggetto che li contiene, se possono crescere fino a tal punto. Se il valore di minsize o di maxsize impedisce che questo accada, allora si usa tale dimensione (minima o massima).

Per esempio, in un elemento mrow che non contiene che operatori estensibili verticalmente, ciascuno degli operatori dovrebbe estendersi fino alla massima tra tutte le loro dimensioni normali non estese, se nessun altro attributo è impostato in modo da sovrascrivere questo comportamento. Naturalmente, i limiti nei font o nella presentazione dei font possono far sì che le dimensioni finali estese siano solo approssimativamente le stesse.

3.2.4.9 Altri attributi di mo

L'attributo largeop specifica se l'operatore deve essere visualizzato di dimensioni maggiori del normale se si ha displaystyle=true nell'ambiente di riproduzione corrente. Questo corrisponde circa all'impostazione di stile \displaystyle in TEX. Il MathML usa due attributi, displaystyle e scriptlevel, per controllare le caratteristiche ortogonali di presentazione che TEX codifica in un attributo di `stile' con valori \displaystyle, \textstyle, \scriptstyle e \scriptscriptstyle. Questi attributi sono discussi ulteriormente nella Sezione 3.3.4 [Modifiche allo stile (mstyle)] che descrive l'elemento mstyle. Si noti che questi attributi possono essere specificati direttamente nel tag di inizio di un elemento mstyle, ma non sulla maggior parte degli altri elementi. Esempi di operatori grandi comprendono &int; e &prod;.

L'attributo movablelimits specifica se il testo sotto e sopra questo elemento mo deve essere visualizzato come pedice o apice quando si ha displaystyle=false. movablelimits=false significa che il testo sotto e sopra l'operatore non deve mai essere visualizzato come pedice o apice. In generale, displaystyle vale true per la matematica visualizzata e false per la matematica in linea. Inoltre, displaystyle ha valore predefinito false all'interno delle tabelle, degli apici e pedici e delle frazioni, e in alcune altre situazioni eccezionali dettagliate nella Sezione 3.3.4 [Modifiche allo stile (mstyle)]. Perciò, gli operatori che hanno movablelimits=true saranno visualizzati con limiti (ovvero testo sotto e sopra l'operatore) nella matematica visualizzata, e con apici e pedici nella matematica in linea, nelle tabelle, negli apici e pedici e così via. Esempi di operatori che tipicamente hanno movablelimits=true sono sum, prod e lim.

L'attributo accent determina se questo operatore deve essere considerato un accento (segno diacritico) come comportamento predefinito quando si trova sotto o sopra una base; si vedano gli elementi munder, mover e munderover (Sezione 3.4.4 [Testo sotto una base (munder)], Sezione 3.4.5 [Testo sopra una base (mover)] e Sezione 3.4.6 [Testo sotto e sopra una base (munderover)]).

L'attributo separator può avere effetti sulle interruzioni di linea automatiche nei riproduttori che posizionano gli operatori infissi ordinari all'inizio delle linee spezzate piuttosto che alla fine (ovvero, che evitano interruzioni di linea subito dopo tali operatori), poiché l'interruzione di linea dovrebbe essere evitata subito prima dei separatori, ma è accettabile subito dopo di essi.

L'attributo fence non ha effetto sulle regole di riproduzione visuale consigliate date in questo capitolo; non è necessario per riprodurre correttamente la notazione tradizionale usando queste regole. E' fornito così che riproduttori MathML specifici, specialmente riproduttori non visuali, abbiano l'opzione di usare questa informazione.

3.2.5 Testo (mtext)

3.2.5.1 Descrizione

Un elemento mtext è usato per rappresentare testo arbitrario che deve essere riprodotto come se stesso. In generale, l'elemento mtext intende denotare un commento che non è centrale al significato matematico o alla struttura notazionale dell'espressione nella quale è contenuto.

Si noti che testo con un ruolo notazionale chiaramente definito potrebbe essere marcato in modo più appropriato usando mi o mo; questo è discusso ulteriormente in seguito.

Un elemento mtext può essere usato per contenere `spazi bianchi rappresentabili', ovvero caratteri invisibili che intendono alterare il posizionamento degli elementi circostanti. In mezzi non grafici, tali caratteri intendono avere un effetto analogo, come introdurre intervalli di tempo positivi o negativi o avere effetti sul ritmo in un riproduttore audio. Questo non è legato agli spazi bianchi nel sorgente MathML che consistono di spazi, caratteri di fine linea, tabulazioni orizzontali o ritorni del carrello; gli spazi bianchi presenti direttamente nel sorgente sono ridotti a uno spazio, come descritto nella Sezione 2.3.6 [Collassare gli spazi bianchi in entrata]. Gli spazi bianchi che si intende riprodurre come parte del contenuto di un elemento devono essere rappresentati da riferimenti ad entità (a meno che non consistano solo di singoli spazi bianchi tra caratteri non spazi).

Gli spazi bianchi rappresentabili possono avere un'ampiezza positiva o negativa, come in &ThinSpace; e &NegativeThinSpace;, o ampiezza zero, come in &ZeroWidthSpace;. L'elenco completo di tali caratteri è dato nel Capitolo 6 [Caratteri, entità e font]. Si noti che non c'è una distinzione formale nel MathML tra spazi bianchi e una qualunque altra classe di caratteri, in mtext o in ogni altro elemento.

Gli spazi bianchi presentabili possono inoltre comprendere caratteri che hanno effetti sull'allineamento o sulle interruzioni di linea. Alcuni di questi caratteri sono:

Nome dell'entità Scopo (breve descrizione)
NewLine inizia una nuova linea senza indentazioni
IndentingNewLine inizia una nuova linea con indentazione
NoBreak non permette un'interruzione di linea qui
GoodBreak se è necessaria un'interruzione di linea, questo è un buon posto
BadBreak se è necessaria un'interruzione di linea, cerca di evitare un'interruzione qui

Per l'elenco completo delle entità del MathML, si consulti il Capitolo 6 [Caratteri, entità e font].

3.2.5.2 Attributi

Gli elementi mtext accettano gli attributi elencati nella Sezione 3.2.1 [Attributi comuni agli elementi token].

Si vedano anche gli avvisi a proposito del raggruppamento legale degli `elementi di spaziatura' nella Sezione 3.2.6 [Spazio (mspace)], e sull'uso di questi elementi per `regolare' o trasmettere significato nella Sezione 3.3.6 [Aggiustare lo spazio intorno al contenuto (mpadded)].

3.2.5.3 Esempi

<mtext> Teorema 1: </mtext>
<mtext> &ThinSpace; </mtext>
<mtext> &ThickSpace;&ThickSpace; </mtext>
<mtext> /* un commento */ </mtext>

3.2.5.4 Mescolare testo e matematica

In alcuni casi, il testo incorporato nella matematica può essere rappresentato in modo più appropriato usando gli elementi mo o mi. Per esempio, l'espressione `esiste \delta>0 tale che f(x) < 1' è equivalente a \exists \delta>0 \backepsilon f(x)<1 e può essere rappresentata come:

<mrow>
  <mo> esiste </mo>
  <mrow>
    <mrow>
      <mi> &delta; </mi>
      <mo> &gt; </mo>
      <mn> 0 </mn>
    </mrow>
    <mo> tale che </mo>
    <mrow>
      <mrow>
        <mi> f </mi>
        <mo> &ApplyFunction; </mo>
        <mrow>
          <mo> ( </mo>
          <mi> x </mi>
          <mo> ) </mo>
        </mrow>
      </mrow>
      <mo> &lt; </mo>
      <mn> 1 </mn>
    </mrow>
  </mrow>
</mrow>

Un esempio che coinvolge un elemento mi è: x+x2+···+xn. In questo esempio, l'ellisse dovrebbe essere rappresentata usando un elemento mi, poiché prende il posto di un termine nella sommatoria (si veda la Sezione 3.2.2 [Identificatore (mi)], mi).

D'altra parte, testo espositivo all'interno del MathML è rappresentato in modo più appropriato con un elemento mtext. Un esempio di questo è:

Teorema 1: se x > 1, allora x2 > x.

Comunque, quando il MathML è incorporato nell'HTML, o in un altro linguaggio per la marcatura dei documenti, l'esempio è probabilmente riprodotto meglio con solo le due disuguaglianze rappresentate come MathML, lasciando che il testo sia parte dell'HTML circostante.

Un altro fattore da considerare nel decidere come marcare il testo è l'effetto sulla presentazione. Il testo racchiuso in un elemento mo probabilmente non si troverà nel dizionario degli operatori di un riproduttore, perciò sarà riprodotto con la formattazione e la spaziatura appropriate per un `operatore non riconosciuto', che possono essere o meno migliori della formattazione e della spaziatura per il `testo' ottenuta usando un elemento mtext. Un'entità ellisse in un elemento mi avrà una spaziatura più appropriata per prendere il posto di un termine in una serie piuttosto che se apparisse in un elemento mtext.

3.2.6 Spazio (mspace)

3.2.6.1 Descrizione

Un elemento mspace vuoto rappresenta uno spazio bianco di qualunque dimensione desiderata, come impostato dai suoi attributi. Può anche essere utilizzato per suggerire interruzioni di linea ad un riproduttore visuale. Si noti chi i valori predefiniti degli attributi sono stati scelti in modo che tipicamente essi non abbiano effetti sulla riproduzione. Perciò l'elemento mspace è usato generalmente con uno o più valori degli attributi specificati in modo esplicito.

3.2.6.2 Attributi

Nome valori predefinito
width numero h-unità | spazio con nome 0em
height numero v-unità 0ex
depth numero v-unità 0ex
linebreak auto | NewLine | IndentingNewLine | NoBreak | GoodBreak | BadBreak auto

h-unità e v-unità rappresentano rispettivamente unità di lunghezza orizzontale e verticale (si veda la Sezione 2.3.4.2 [Attributi con unità]).

L'attributo linebreak si usa per dare un suggerimento sulle interruzioni di linea ad un riproduttore visuale. Il valore predefinito è auto, che indica che un riproduttore deve usare qualunque algoritmo di interruzione di linea predefinito che userebbe normalmente. Il significato di altri possibili valori per l'attributo linebreak è descritto sopra nella discussione sugli spazi bianchi riproducibili nell'elemento mtext. Si veda la Sezione 3.2.5 [Testo (mtext)] per dettagli.

Nel caso che siano impostati sia attributi dimensionali che di interruzione di linea, l'attributo per l'interruzione di linea è ignorato.

Si noti l'avviso sul raggruppamento legale di `elementi di spaziatura' dato in seguito, e l'avviso sull'uso di tali elementi per `regolare' o trasmettere significato nella Sezione 3.3.6 [Aggiustare lo spazio intorno al contenuto (mpadded)]. Si vedano inoltre gli altri elementi che possono essere riprodotti come spazi bianchi, ovvero mtext, mphantom e maligngroup.

3.2.6.3 Definizione di elementi di spaziatura

Un certo numero di elementi di presentazione del MathML sono `di spaziatura' nel senso che sono tipicamente riprodotti come spazi bianchi, e non hanno effetto sul significato matematico delle espressioni dove appaiono. Come conseguenza, questi elementi spesso funzionano in modi a volte eccezionali in altre espressioni MathML. Per esempio, gli elementi di spaziatura sono gestiti in modo speciale nelle regole di riproduzione suggerite per l'elemento mo date nella Sezione 3.2.4 [Operatore, parentesi, separatore o accento (mo)]. I seguenti elementi del MathML sono definiti `di spaziatura':

Si noti che un elemento mphantom non è definito automaticamente di spaziatura, a meno che il suo contenuto non sia di spaziatura. Questo perché la spaziatura tra operatori dipende da se gli elementi adiacenti sono di spaziatura. Poiché l'elemento mphantom è principalmente inteso come aiuto nell'allineamento delle espressioni, gli operatori adiacenti ad un elemento mphantom dovrebbero comportarsi come se fossero adiacenti al contenuto dell'elemento mphantom, piuttosto che ad una zona di spazio bianco della stessa dimensione.

3.2.6.4 Raggruppamento legale di elementi di spaziatura

Gli autori che inseriscono elementi di spaziatura o elementi mphantom in un'espressione MathML esistente dovrebbero notare che tali elementi sono contati come argomenti, in elementi che richiedono un numero specifico di argomenti, o che interpretano le diverse posizioni degli argomenti in modo diverso.

Perciò, gli elementi di spaziatura inseriti in un tale elemento MathML dovrebbero essere raggruppati con un argomento vicino di quell'elemento introducendo un elemento mrow a tale fine. Per esempio, per permettere l'allineamento verticale al lato destro della base di un apice, l'espressione

<msup> <mi> x </mi> <malignmark edge="right"/> <mn> 2 </mn> </msup>

è illegale, poiché msup deve avere esattamente 2 argomenti; l'espressione corretta sarà:

<msup>
  <mrow>
    <mi> x </mi>
    <malignmark edge="right"/>
  </mrow>
  <mn> 2 </mn>
</msup>

Si veda anche l'avviso sulla `regolazione' nella Sezione 3.3.6 [Aggiustare lo spazio intorno al contenuto (mpadded)].

3.2.7 Letterale stringa (ms)

3.2.7.1 Descrizione

L'elemento ms è usato per rappresentare `letterali stringa' in espressioni che devono essere interpretate da sistemi di computer algebra o altri sistemi che contengono `linguaggi di programmazione'. Come comportamento predefinito, i letterali stringa sono visualizzati tra doppi apici. Come spiegato nella Sezione 3.2.5 [Testo (mtext)], il testo normale incorporato nelle espressioni matematiche dovrebbe essere marcato con mtext, o in alcuni casi con mo o con mi, ma mai con ms.

Si noti che i letterali stringa codificati dall'elemento ms sono `stringhe Unicode' piuttosto che `stringhe ASCII'. In pratica, i caratteri non ASCII saranno tipicamente rappresentati da elementi mchar. Per esempio, <ms><mchar name="amp"/></ms> rappresenta un letterale stringa che contiene un singolo carattere, &, e <ms><mchar name="amp"/>amp;</ms> rappresenta un letterale stringa che contiene 5 caratteri, il primo dei quali è &.

Come tutti gli elementi token, ms riduce a uno gli spazi bianchi nel suo contenuto, secondo le regole della Sezione 2.3.6 [Collassare gli spazi bianchi in entrata], così spazi bianchi che devono rimanere nel contenuto devono essere codificati come descritto in tale sezione.

3.2.7.2 Attributi

Gli elementi ms accettano gli attributi elencati nella Sezione 3.2.1 [Attributi comuni agli elementi token], e inoltre:

Nome valori predefinito
lquote stringa &quot;
rquote stringa &quot;

Nei riproduttori visuali, il contenuto di un elemento ms è riprodotto tipicamente senza spaziatura aggiuntiva intorno alla stringa, e una virgoletta all'inizio e alla fine della stringa. Come comportamento predefinito, le virgolette destra e sinistra sono entrambe i doppi apici standard &quot;. Comunque, questi caratteri possono essere modificati rispettivamente con gli attributi lquote e rquote.

Il contenuto degli elementi ms deve essere riprodotto con un `escaping' visibile di certi caratteri del contenuto, compresi almeno i `doppi apici' stessi, e possibilmente anche spazi bianchi che non siano singoli caratteri di spazio. L'intenzione è che l'utente veda che l'espressione è un letterale stringa, e veda esattamente quali caratteri formano il suo contenuto. Per esempio, <ms>il doppio apice è "</ms> potrebbe essere riprodotto come "il doppio apice è \"".

3.2.8 Riferimento a caratteri non ASCII (mchar)

3.2.8.1 Descrizione

L'elemento mchar è usato per fare riferimento ai caratteri. Questo fornisce un'alternativa per usare i riferimenti alle entità. Le entità caratteri sono disapprovate per il MathML 2.0 perché non fanno parte della proposta attuale degli schemi, e i documenti che contengono entità non sono documenti XML ben formati in assenza della DTD del MathML.

I riferimenti numerici ai caratteri (es. &#1234; ) non sono disapprovati perché non hanno i problemi sopraelencati.

L'elemento mchar è contenuto valido in ogni elemento token del MathML elencato nella Sezione 3.1.5 [Sommario degli elementi di presentazione] (mi, ecc.) o nella Sezione 4.2.2 [Contenitori] (ci, ecc.) a meno che non sia altrimenti ristretto da un attributo (es. base="2" ad un elemento <cn>).

3.2.8.2 Attributi di mchar

Nome valori predefinito
name stringa necessario

L'attributo name deve essere uno dei nomi specificati nel Capitolo 6 [Caratteri, entità e font]. E' un errore usare un nome che non sia in questo elenco.

3.2.8.3 Esempi

Nel MathML 1.x le espressioni che coinvolgevano i riferimenti ad entità come <mi> &alpha;1 </mi> erano comuni. Nel MathML 2.0 si preferisce la costruzione equivalente con mchar:

<mi> <mchar name='alpha'/>1 </mi>

3.2.9 Aggiungere nuovi glifi di caratteri al MathML (mglyph)

3.2.9.1 Descrizione

L'Unicode definisce un gran numero di caratteri usati nella matematica, e nella maggior parte dei casi, i glifi che rappresentano questi caratteri sono ampiamente disponibili in un'ampia varietà di font. Sebbene questi caratteri debbano soddisfare quasi tutte le necessità degli utenti, il MathML riconosce che la matematica non è statica e che i nuovi caratteri si aggiungono quando convenienti. I caratteri che diventano ben accetti saranno probabilmente incorporati dal Consorzio Unicode o da altri corpi standard, ma questo è spesso un processo lungo. Nel frattempo, è necessario un meccanismo per accedere ai glifi da font non standard che rappresentano tali caratteri.

L'elemento mglyph è il mezzo tramite il quale gli utenti possono accedere direttamente ai glifi per caratteri che non sono definiti dell'Unicode. In modo simile, l'elemento mglyph può anche essere usato per scegliere varianti di glifi per caratteri Unicode esistenti, come potrebbe essere desiderabile quando una variante di un glifo ha iniziato a differenziarsi come nuovo carattere assumendo un senso matematico distinto.

L'elemento mglyph nomina un glifo di carattere specifico, ed è valido all'interno di ogni foglia di contenuto MathML elencata nella Sezione 3.1.5 [Sommario degli elementi di presentazione] (mi, ecc.) o nella Sezione 4.2.2 [Contenitori] (ci, ecc.) a meno che non sia limitato diversamente da un attributo (es. base=2 in <cn>). Perché un riproduttore visuale presenti il carattere, ad esso deve essere detto quale font usare e che indice usare all'interno di quel font.

3.2.9.2 Attributi

Nome valori predefinito
alt stringa necessario
fontfamily stringa | famiglia-di-font-css necessario
index intero necessario

L'attributo alt fornisce un nome alternativo per il glifo. Se il font specificato non può essere trovato, il riproduttore può usare questo nome in un messaggio di avviso o in qualche notazione di glifo sconosciuto. Il nome potrebbe inoltre essere usato da un riproduttore audio o da un sistema per l'elaborazione di simboli o dovrebbe essere scelto in modo da essere descrittivo. Gli attributi fontfamily e index identificano univocamente l'elemento mglyph, due elementi mglyph con gli stessi valori per fontfamily e per index dovrebbero essere considerati identici da applicazioni che devono determinare se due caratteri/glifi sono identici. L'attributo alt non dovrebbe far parte del test di identità.

Gli attributi fontfamily e index nominano un font e la posizione all'interno di tale font. Tutte le proprietà del font tranne fontfamily sono ereditate. Varianti del font (es. grassetto) che possono essere ereditate possono essere ignorate se la variante del font non è presente.

Gli autori dovrebbero tenere presente che la presentazione richiede i font a cui fa riferimento mglyph, ai quali il riproduttore MathML può non avere accesso o che possono non essere supportati dal sistema sul quale viene eseguito il riproduttore. Per queste ragioni, gli autori sono incoraggiati ad usare mglyph solo quando assolutamente necessario, e non per fini stilistici.

3.2.9.3 Esempi

Il seguente esempio illustra come un ricercatore può usare il costrutto mglyph con un font sperimentale perchè funzioni con la notazione dei gruppi di braid.

<mrow>
  <mi><mglyph fontfamily="my-braid-font" index="2" alt="23braid"/></mi>
  <mo>+</mo>
  <mi><mglyph fontfamily="my-braid-font" index="5" alt="132braid"/></mi>
  <mo>=</mo>
  <mi><mglyph fontfamily="my-braid-font" index="3" alt="13braid"/></mi>
</mrow>

Questo potrebbe essere riprodotto come:

\includegraphics{braids}

3.3 Schemi generali di disposizione

Oltre ai token ci sono varie famiglie di elementi di presentazione MathML. Una famiglia di elementi tratta le varie notazioni di scrittura, come i pedici e gli apici. Un'altra famiglia riguarda le matrici e le tabelle. Il resto degli elementi, discussi in questa sezione, descrivono altre notazioni fondamentali come le frazioni e i radicali, o trattano funzioni generiche come impostare le proprietà dello stile e gestire gli errori.

3.3.1 Raggruppare orizzontalmente le sottoespressioni (mrow)

3.3.1.1 Descrizione

Un elemento mrow è usato per raggruppare insieme un numero qualunque di sottoespressioni, che consistono di solito in uno o più elementi mo che agiscono da `operatori' su una o più altre espressioni che sono i loro `operandi'.

Vari elementi trattano automaticamente i loro argomenti come se fossero contenuti in un elemento mrow. Si veda la discussione sugli elementi mrow impliciti nella Sezione 3.1.3 [Argomenti necessari]. Si veda inoltre l'elemento mfenced (Sezione 3.3.8 [Contenuto tra coppie di parentesi (mfenced)]), che può effettivamente formare un elemento mrow che contiene i suoi argomenti separati da virgole.

3.3.1.2 Attributi

Nessuno (tranne gli attributi permessi per tutti gli elementi MathML, elencati nella Sezione 2.3.5 [Attributi condivisi da tutti gli elementi del MathML]).

Gli elementi mrow sono tipicamente riprodotti visualmente come una riga orizzontale dei loro argomenti, da sinistra a destra nell'ordine nel quale essi occorrono, o acusticamente come una sequenza di riproduzioni degli argomenti. La descrizione nella Sezione 3.2.4 [Operatore, parentesi, separatore o accento (mo)] delle regole di riproduzione consigliate per gli elementi mo assume che tutta la spaziatura orizzontale tra gli operatori e i loro operandi sia aggiunta dalla riproduzione degli elementi mo (o più generalmente, degli operatori ornati), non dalla riproduzione degli elementi mrow nei quali sono contenuti.

Il MathML è progettato per permettere ai riproduttori di introdurre automaticamente le interruzioni di linea nelle espressioni (ovvero, interrompere espressioni eccessivamente lunghe in varie linee), senza richiedere che gli autori specifichino esplicitamente come ciò deve essere fatto. Questo è perché le posizioni delle interruzioni di linea non possono essere scelte bene senza conoscere l'ampiezza del dispositivo di visualizzazione e la dimensione corrente del font, che per molti usi del MathML non saranno note se non dal riproduttore al tempo di ogni riproduzione.

Determinare buone posizioni per le interruzioni di linea è complesso, e le regole per questo non sono descritte qui; se e come questo è fatto dipende da ciascun riproduttore MathML. Tipicamente, l'interruzione di linea coinvolgerà la selezione di `buoni' punti per l'inserimento di interruzioni di linea tra argomenti successivi di elementi mrow.

Sebbene il MathML non richieda l'interruzione di linea o specifichi un particolare algoritmo di interruzione di linea, ha varie funzioni progettate per permettere a simili algoritmi di produrre buoni risultati. Questi comprendono l'uso di entità speciali per certi operatori, compresi gli operatori invisibili (si veda la Sezione 3.2.4 [Operatore, parentesi, separatore o accento (mo)]), o per fornire suggerimenti legati all'interruzione di linea quando necessario (si veda la Sezione 3.2.5 [Testo (mtext)]), e la capacità di usare elementi mrow annidati per descrivere la struttura delle sottoespressioni (si veda sotto).

mrow di un argomento

I riproduttori MathML devono trattare un elemento mrow che contiene esattamente un argomento in modo esattamente equivalente al singolo argomento se occorresse da solo, sempre che non ci siano attributi nel tag di inizio dell'elemento mrow. Se ci sono attributi nel tag di inizio dell'elemento mrow, non sono imposti requisiti di equivalenza. Questa condizione di equivalenza è intesa per semplificare l'implementazione del software che genera MathML, come strumenti di creazione basati su modelli. Ha effetti diretti sulla definizione di operatore ornato e di elemento di spaziatura e sulle regole per determinare il valore predefinito dell'attributo form di un elemento mo; si vedano le sezioni Sezione 3.2.4 [Operatore, parentesi, separatore o accento (mo)] e Sezione 3.2.6 [Spazio (mspace)]. Si veda inoltre la discussione di equivalenza delle espressioni MathML nel Capitolo 7 [L'interfaccia del MathML].

3.3.1.3 Corretto raggruppamento di sottoespressioni usando mrow

Le sottoespressioni dovrebbero essere raggruppate dall'autore del documento nello stesso modo in cui esse sono raggruppate nell'interpretazione matematica dell'espressione; ovvero, secondo `l'albero della sintassi' sottostante dell'espressione. In modo specifico, gli operatori e i loro argomenti matematici dovrebbero occorrere in un singolo elemento mrow; più di un operatore dovrebbe occorrere direttamente in un elemento mrow solo quando essi possono essere considerati (in senso sintattico) agire insieme sugli argomenti interposti, es. per un singolo termine tra parentesi e le sue parentesi, per catene di operatori relazionali, o per sequenze di termine separati da + e -. Una regola precisa è data in seguito.

Il corretto raggruppamento ha vari fini: migliora la visualizzazione con probabili effetti sulla spaziatura; permette interruzioni di linea e indentazioni più intelligenti; e semplifica una possibile interpretazione semantica degli elementi di presentazione da parte dei sistemi di computer algebra e dei riproduttori acustici.

Sebbene il raggruppamento incorretto risulti a volte in riproduzioni subottimali, e renda spesso interpretazioni diverse dalla pura riproduzione visuale difficili o impossibili, nella sintassi del MathML è permesso ogni raggruppamento di espressioni con mrow; ovvero, i riproduttori non dovrebbero assumere che saranno seguite le regole per il corretto raggruppamento.

Regola precisa per il corretto raggruppamento

Una regola precisa per quando e come annidare sottoespressioni usando mrow è particolarmente desiderabile quando si genera il MathML automaticamente dalla conversione da altri formati per la matematica visualizzata, come TEX, che non sempre specifca come si annidano le sottoespressioni. Quando è desiderata una regola precisa per il raggruppamento, dovrebbe essere usata la seguente regola:

Due operatori adiacenti (ovvero elementi mo, eventualmente ornati), eventualmente separati da operandi (ovvero qualunque cosa diversa dagli operatori), dovrebbero occorrere nello stesso elemento mrow solo quando l'operatore a sinistra ha una forma infissa o prefissa (magari implicita), l'operatore a destra ha una forma infissa o postfissa e gli operatori sono elencati nello stesso gruppo di voci nel dizionario degli operatori fornito nell'Appendice D [Dizionario degli operatori]. In ogni altro caso dovrebbero essere usati elementi mrow annidati.

Quando si forma un elemento mrow annidato (durante la generazione del MathML) che comprende solo uno dei due successivi operatori con le forme menzionate in precedenza (ciò significa che ciascuno degli operatori potrebbe in linea di principio agire sull'operando o sugli operandi coinvolti), è necessario decidere quali operatori agiscono su quegli operandi direttamente (o lo farebbero se essi fossero presenti). Idealmente, questo dovrebbe essere determinato dall'espressione originale; per esempio, nella conversione da un formato basato sulla precedenza degli operatori, sarebbe l'operatore con la precedenza più alta. Se ciò non può essere determinato direttamente dall'espressione originale, si può assumere che l'operatore che occorre più tardi nel dizionario degli operatori consigliato (Appendice D [Dizionario degli operatori]) abbia una precedenza più alta a questo fine.

Si noti che la regola precedente non ha effetto sul fatto se un'espressione MathML è valida, solo sul modo consigliato di generare il MathML da altri formati per la matematica visualizzata o direttamente dalla notazione scritta.

Parte della terminologia usata nello stabilire la regola precedente è definita nella Sezione 3.2.4 [Operatore, parentesi, separatore o accento (mo)].)

3.3.1.4 Esempi

Come esempio, 2x+y-z dovrebbe essere scritto come:

<mrow>
  <mrow>
    <mn> 2 </mn>
    <mo> &InvisibleTimes; </mo>
    <mi> x </mi>
  </mrow>
  <mo> + </mo>
  <mi> y </mi>
  <mo> - </mo>
  <mi> z </mi>
</mrow>

La corretta codifica di (x, y) fornisce un esempio meno ovvio di elementi mrow annidati:

<mrow>
  <mo> ( </mo>
  <mrow>
    <mi> x </mi>
    <mo> , </mo>
    <mi> y </mi>
  </mrow>
  <mo> ) </mo>
</mrow>

In questo caso è necessario un elemento mrow annidato all'interno delle parentesi, poiché le parentesi e le virgole, considerati come `operatori' di delimitazione e di separazione, non agiscono insieme sui loro argomenti.

3.3.2 Frazioni (mfrac)

3.3.2.1 Descrizione

L'elemento mfrac è usato per le frazioni. Può anche essere usato per marcare oggetti simili a frazioni come i coefficienti binomiali e i simboli di Legendre. La sintassi per mfrac è

<mfrac> numeratore denominatore </mfrac>

3.3.2.2 Attributi di mfrac

Nome valori predefinito
linethickness numero [ v-unità ] | thin | medium | thick 1 (spessore della linea)
numalign left | center | right center
denomalign left | center | right center
bevelled true | false false

L'attributo linethickness indica lo spessore della `barra di frazione', o `linea', orizzontale tipicamente usata per presentare le frazioni. Una frazione con linethickness="0" viene presentata senza la barra, e potrebbe essere usata nei coefficienti binomiali. Un valore per linethickness maggiore di uno potrebbe essere usato con le frazioni annidate. Questi casi sono mostrati in seguito:

{a \choose b} \quad {a \over b} \above1pt {c \over d}

In generale, il valore di linethickness può essere un numero, come moltiplicatore dello spessore predefinito della barra di frazione (lo spessore predefinito non è specificato dal MathML), o un numero con un'unità di lunghezza verticale (si veda la Sezione 2.3.4.2 [Attributi con unità]), o una delle parole chiave medium (lo stesso di 1), thin (più sottile di 1, altrimenti a seconda del riproduttore), o thick (più spessa di 1, altrimenti a seconda del riproduttore).

Gli attributi numalign e denomalign controllano l'allineamento orizzontale rispettivamente del numeratore e del denominatore. Tipicamente, i nominatori e i denominatori sono centrati, ma un numeratore o denominatore molto lungo potrebbe essere visualizzato in pù linee ed un allineamento a sinistra potrebbe essere più appropriato per visualizzarle.

L'attributo bevelled determina se la frazione è visualizzata con il numeratore sopra il denominatore separati da una linea orizzontale o se si usa una linea diagonale per separare un numeratore appena alzato da un denominatore appena abbassato. La seconda forma corrisponde al valore dell'attributo impostato a true e fornisce una forma più compatta per numeratori e denominatori semplici. Un esempio che illustra la forma smussata è mostrato in seguito:

\frac{1}{x^3 + \frac{x}{3}} = \raisebox{1ex}{$1$}        \left/ \raisebox{-1ex}{$x^3+\frac{x}{3}$} \right.

L'elemento mfrac imposta displaystyle a false, oppure se aveva già il valore false incrementa scriptlevel di 1, all'interno del numeratore e del denominatore. Questi attributi sono ereditati da ogni elemento dal suo ambiente di presentazione, ma possono essere impostati esplicitamente solo nell'elemento mstyle. (Si veda la Sezione 3.3.4 [Modifiche allo stile (mstyle)].)

3.3.2.3 Esempi

Gli esempi precedentemente mostrati possono essere rappresentati in MathML come:

<mrow>
   <mo> ( </mo>
   <mfrac linethickness="0">
      <mi> a </mi>
      <mi> b </mi>
   </mfrac>
   <mo> ) </mo>
</mrow>
<mfrac linethickness="2">
   <mfrac>
      <mi> a </mi>
      <mi> b </mi>
   </mfrac>
   <mfrac>
      <mi> c </mi>
      <mi> d </mi>
   </mfrac>
</mfrac>

<mfrac>
   <mn> 1 </mn>
   <mrow>
      <msup>
         <mi> x </mi>
         <mn> 3 </mn>
       </msup>
       <mo> + </mo>
       <mfrac>
         <mi> x </mi>
         <mn> 3 </mn>
       </mfrac>
   </mrow>
</mfrac>
<mo> = </mo>
<mfrac bevelled="true">
   <mn> 1 </mn>
   <mrow>
      <msup>
         <mi> x </mi>
         <mn> 3 </mn>
       </msup>
       <mo> + </mo>
       <mfrac>
         <mi> x </mi>
         <mn> 3 </mn>
       </mfrac>
   </mrow>
</mfrac>

Un esempio più generico è:

<mfrac>
   <mrow>
      <mn> 1 </mn>
      <mo> + </mo>
      <msqrt>
         <mn> 5 </mn>
      </msqrt>
   </mrow>
   <mn> 2 </mn>
</mfrac>

3.3.3 Radicali (msqrt, mroot)

3.3.3.1 Descrizione

Questi elementi costruiscono radicali. L'elemento msqrt si usa per le radici quadrate, mentre l'elemento mroot si usa per radicali con indici, es. una radice cubica. La sintassi per questi elementi è:

<msqrt> base </msqrt>
<mroot> base indice </mroot>

L'elemento mroot richiede esattamente 2 argomenti. Comunque, msqrt accetta ogni numero di argomenti; se tale numero non è 1, il suo contenuto è trattato come un singolo `elemento mrow implicito' che contiene i suoi argomenti, come descritto nella Sezione 3.1.3 [Argomenti necessari].

3.3.3.2 Attributi

Nessuno (tranne gli attributi permessi per tutti gli elementi MathML, elencati nella Sezione 2.3.5 [Attributi condivisi da tutti gli elementi del MathML]).

L'elemento mroot incrementa scriptlevel di 2, e imposta displaystyle a false, all'interno dell'indice, ma lascia entrambi gli attributi invariati all'interno della base. L'elemento msqrt lascia entrambi gli attributi invariati in tutti i suoi argomenti. Questi attributi sono ereditati da ogni elemento dal suo ambiente di riproduzione, ma possono essere impostati esplicitamente solo in mstyle. (Si veda la Sezione 3.3.4 [Modifiche allo stile (mstyle)].)

3.3.4 Modifiche allo stile (mstyle)

3.3.4.1 Descrizione

L'elemento mstyle è usato per fare modifiche di stile che abbiano effetto sulla riproduzione del suo contenuto. All'elemento mstyle può essere dato qualunque attributo accettato da qualunque elemento di presentazione MathML ammesso che il valore dell'attributo sia ereditato, calcolato o che esso abbia un valore predefinito; gli attributi degli elementi di presentazione i cui valori sono necessari non sono accettati dall'elemento mstyle. Inoltre a mstyle possono essere dati alcuni attributi speciali elencati in seguito.

L'elemento mstyle accetta qualunque numero di elementi. Se questo numero non è 1, il suo contenuto è trattato come un singolo `elemento mrow implicito' formato da tutti i suoi argomenti, come descritto nella Sezione 3.1.3 [Argomenti necessari].

In altre parole, l'effetto dell'elemento mstyle è di modificare il valore predefinito di un attributo per gli elementi che contiene. Le modifiche di stile funzionano in vari modi, a seconda di come sono specificati i valori predefiniti di un attributo. I casi sono:

Si noti che i valori degli attributi ereditati da un elemento mstyle in qualunque modo hanno effetto su un dato elemento nel contenuto di mstyle solo se a quell'attributo non è stato dato un valore nel tag di apertura di quell'elemento. Su ogni elemento per il quale l'attributo sia impostato esplicitamente il valore specificato nel tag di apertura sovrascrive il valore ereditato. La sola eccezione a questa regola è quando il valore dato nel tag di apertura è documentato come specificante una modifica incrementale al valore ereditato dal contesto di quell'elemento o dall'ambiente di presentazione.

Si noti inoltre che la differenza tra attributi ereditati e non ereditati impostati da mstyle, spiegata in precedenza, importa solo quando l'attributo è impostato in qualche elemento nel contenuto di mstyle che abbia figli che a loro volta lo impostano. Perciò non ha mai importanza per attributi, come color, che possono essere impostati soltanto su elementi token (o sullo stesso mstyle).

C'è un elemento che fa eccezione, mpadded, i cui attributi non possono essere impostati con mstyle. Quando in un elemento mstyle sono specificati gli attributi width, height e depth, essi si applicano solo ell'elemento mspace. Allo stesso modo, quando in mstyle è impostato lspace, esso si applica solo all'elemento mo.

3.3.4.2 Attributi

Come stabilito in precedenza, mstyle accetta tutti gli attributi di tutti gli elementi di presentazione del MathML che non hanno valori obbligatori. Ovvero, tutti gli attributi che hanno un valore predefinito esplicito, ereditato o calcolato sono accettati dall'elemento mstyle. In aggiunta, ad mstyle possono essere dati i seguenti attributi speciali che sono implicitamente ereditati da ogni elemento MathML come parte del suo ambiente di presentazione:

Nome valori predefinito
scriptlevel ['+' | '-'] intero senza segno ereditato
displaystyle true | false ereditato
scriptsizemultiplier numero 0.71
scriptminsize numero v-unità 8pt
color #rgb | #rrggbb | nome-di-colore-html ereditato
background #rgb | #rrggbb | transparent | nome-di-colore-html transparent
veryverythinmathspace numero h-unità 0.0555556em
verythinmathspace numero h-unità 0.111111em
thinmathspace numero h-unità 0.166667em
mediummathspace numero h-unità 0.222222em
thickmathspace numero h-unità 0.277778em
verythickmathspace numero h-unità 0.333333em
veryverythickmathspace numero h-unità 0.388889em

scriptlevel e displaystyle

Il MathML usa due attributi, displaystyle e scriptlevel, per controllare le caratteristiche ortogonali di presentazione che TEX codifica in un attributo style con i valori \displaystyle, \textstyle, \scriptstyle e \scriptscriptstyle. I valori corrispondenti di displaystyle e di scriptlevel per qusti stili TEX sarebbero rispettivamente true e 0, false e 0, false e 1, e false e 2.

L'effetto principale dell'attributo displaystyle è che determina l'effetto di altri attributi come gli attributi largeop e movablescripts per l'elemento mo. L'effetto principale dell'attributo scriptlevel è di controllare la dimensione del font. Tipicamente, maggiore è il valore di scriptlevel e minore è la dimensione del font. (I riproduttori non visuali possono reagire alla dimensione del font in un modo analogo per il loro mezzo.) Riproduttori più sofisticati possono inoltre scegliere di usare questi attributi in altri modi, come per presentare espressioni con displaystyle=false in un modo più compresso verticalmente.

A questi attributi vengono dati valori iniziali per l'espressione esterna di un'istanza di MathML a seconda dell'ambiente di presentazione. Un breve elenco di schemi di disposizione descritti in seguito modifica questi valori per alcune delle sue sottoespressioni. Altrimenti, i valori sono determinati dall'ereditarietà quando non sono direttamente specificati nel tag di apertura di un dato elemento.

Per un'istanza di MathML incorporato in dati in formato testuale (come l'HTML) in modo `visuale', ovvero al posto di un paragrafo, displaystyle vale true e scriptlevel vale 0 per l'espressione esterna del MathML incorporato; se il MathML è incorporato in modo `in linea', ovvero al posto di un carattere, displaystyle vale false e scriptlevel vale 0 per l'espressione esterna. Si veda il Capitolo 7 [L'interfaccia del MathML] per un'ulteriore discussione sulla distinzione tra incorporare il MathML in modo `visuale' e `in linea' e su come questo può essere specificato in particolari istanze. In generale, un riproduttore MathML può determinare questi valori iniziali in qualunque maniera appropriata per la locazione e il contesto della specifica istanza di MathML che sta presentando, o se non ha modo per determinare questo, a seconda del modo nel quale essa è utilizzata con maggiore probabilità; come ultima risorsa è consigliato che usi i valori più generici displaystyle = "true" e scriptlevel = "0".

Gli schemi di disposizione del MathML che visualizzano tipicamente alcuni dei loro argomenti in tipo più piccolo o con meno spaziatura verticale, ovvero gli elementi per apici e pedici, frazioni, radicali, tabelle o matrici, impostano displaystyle a false, e in alcuni casi aumentano scriptlevel, per questi argomenti. I nuovi valori sono ereditati da tutte le sottoespressioni all'interno di questi argomenti, a meno che non siano sovrascritti.

Le regole specifiche secondo le quali ogni elemento modifica displaystyle e/o scriptlevel sono date nelle specifiche per ogni elemento che fa così; gli elementi che modificano uno di questi attributi sono: gli elementi di `apice e pedice' msub, msup, msubsup, munder, mover, munderover e mmultiscripts; e gli elementi mfrac, mroot e mtable.

Quando a mstyle è dato un attributo scriptlevel senza segno, esso imposta il valore di scriptlevel all'interno del suo contenuto al valore dato, che deve essere un intero non negativo. Quando il valore dell'attributo consiste in un segno seguito da un intero, il valore di scriptlevel è incrementato (per il '+') o decrementato (per il '-') dell'ammontare dato. La sintassi incrementale per quest'attributo è un'eccezione alle regole generali per l'impostazione degli attributi ereditati usando mstyle, e non è permessa da nessun altro attributo di mstyle.

Quando cambia il valore di scriptlevel, automaticamente o essendo esplicitamente incrementato, decrementato o impostato, la dimensione corrente del font è moltiplicata per il valore di scriptsizemultiplier elevato alla potenza della modifica al valore di scriptlevel. Per esempio, se scriptlevel aumenta di 2, la dimensisone del font è moltiplicata per scriptsizemultiplier due volte in sequenza; se scriptlevel è impostato esplicitamente a 2 quando valeva 3, la dimensione del font è divisa per scriptsizemultiplier.

Il valore predefinito di scriptsizemultiplier è minore di uno (infatti è circa la radice quadrata di 1/2), risultando in un font più piccolo con l'aumentare di scriptlevel. Per evitare che apici e pedici diventino illeggibili, la dimensione del font non può mai andare sotto il valore di scriptminsize come risultato di una modifica a scriptlevel, sebbene possa essere impostata ad un valore inferiore con l'attributo fontsize (Sezione 3.2.1 [Attributi comuni agli elementi token]) in mstyle o sugli elementi token. Se una modifica a scriptlevel portasse la dimensione del font ad essere inferiore di scriptminsize usando la formula precedente, la dimensione del font sarebbe invece impostata uguale a scriptminsize all'interno della sottoespressione per la quale è stato modificato scriptlevel.

Nella sintassi per scriptminsize, v-unità rappresenta un'unità di lunghezza verticale (come descritto nella Sezione 2.3.4.2 [Attributi con unità]). L'unità più comune per specificare le dimensioni dei font nell'impaginazione è pt (punti).

Modifiche esplicite all'attributo fontsize non hanno effetto sul valore di scriptlevel.

Maggiori dettagli su scriptlevel per i riproduttori

Per i riproduttori MathML che supportano i fogli di stile CSS1, o qualche altro meccanismo analogo di fogli di stile, modifiche assolute o relative a fontsize (o altri attributi) possono occorrere implicitamente in ogni elemento in risposta ad un foglio di stile. Le modifiche di questo tipo a fontsize non hanno inoltre effetto su scriptlevel. Una modifica a fontsize indotta da un foglio di stile sovrascrive scriptminsize nello stesso modo di una modifica esplicita a fontsize nel tag di apertura dell'elemento (discussa in precedenza), sia che sia specificata nel foglio di stile come modifica assoluta o relativa. (Comunque, su ogni successiva modifica indotta da scriptlevel a fontsize esso avrà ancora effetto.) Come richiesto per gli attributi ereditati nel CSS1, il valore di fontsize modificato dai fogli di stile è ereditato dagli elementi figli.

Se lo stesso elemento è soggetto sia ad una modifica al suo valore di fontsize indotta dai fogli di stile che ad una automatica (legata a scriptlevel), la modifica legata a scriptlevel è fatta per prima - infatti, nell'implementazione più semplice delle regole per scriptlevel specifiche degli elementi, questa modifica sarebbe fatta dal padre dell'elemento come parte della produzione delle proprietà di presentazione da passare all'elemento dato, poiché è l'elemento padre che sa se scriptlevel deve essere modificato per ciascuno dei suoi elementi figli.

Se il valore di fontsize dell'elemento è modificato da un foglio di stile ed esso modifica anche scriptlevel (e quindi fontsize) per uno dei suoi elementi figli, la modifica indotta dal foglio di stile è fatta per prima, seguita dalla modifica ereditata da quell'elemento figlio. Se è modificato il valore di scriptlevel per più di un elemento figlio, la modifica ereditata da ogni elemento figlio non ha effetto sugli altri elementi figli. (Come regola mnemonica che si applica ad un `albero di analisi' degli elementi e dei loro figli, le modifiche a fontsize indotte dai fogli di stile possono essere associate a nodi dell'albero, ovvero ad elementi MathML, e le modifiche legate a scriptlevel possono essere associate agli archi tra elementi padri e figli; allora l'ordine delle modifiche associate corrisponde all'ordine dei nodi e degli archi in ogni percorso discendente dell'arco.) Per informazioni generiche sull'ordine relativo di elaborazione delle proprietà impostate dai fogli di stile o dagli attributi, si veda la sottosezione appropriata degli attributi compatibili con i CSS nella Sezione 2.3.4.3 [Attributi compatibili con i CSS].

Se scriptlevel è modificato in modo incrementale da un elemento mstyle che imposta anche certi altri attributi, l'effetto globale delle modifiche può dipendere dall'ordine nel quale esse sono elaborate. In tali casi, gli attributi nel seguente elenco devono essere elaborati nel seguente ordine, indipendentemente dall'ordine nel quale occorrono nell'elenco di attributi in formato XML nel tag di apertura di mstyle: scriptsizemultiplier, scriptminsize, scriptlevel, fontsize.

Si noti che scriptlevel può, in linea di principio, assumere qualunque valore intero essendo sufficientemente decrementato, anche se può essere impostato a valori negativi solo esplicitamente. Valori negativi di scriptlevel generati in questo modo sono legali e dovrebbero funzionare come descritto, generando font di dimensioni maggiori di quelli dell'espressione circostante. Poiché scriptlevel è inizialmente 0 e non diminuisce mai automaticamente, sarà sempre non negativo a meno che non sia decrementato oltre 0 usando mstyle.

Diminuizioni esplicite di scriptlevel dopo che la dimensione del font è stata limitata da scriptminsize come descritto in precedenza produrrebbero risultati indesiderati. Questo potrebbe occorrere, per esempio, in una rappresentazione di una frazione continuata, nella quale il valore di scriptlevel è stato decrementato per parte del denominatore fino ad assumere il valore che aveva per la frazione nel complesso, se la frazione stessa fosse posta in un punto con un alto valore di scriptlevel. Per evitare questo problema, i riproduttori MathML dovrebbero usare, decrementando scriptlevel, come dimensione iniziale del font il valore che essa avrebbe avuto se non fosse mai stata limitata da scriptminsize. Non dovrebbero, comunque, ignorare gli effetti di impostazioni esplicite di fontsize, anche a valori inferiori a scriptminsize.

Poiché i riproduttori MathML potrebbero non essere in grado di fare uso di dimensioni dei font arbitrarie con buoni risultati, potrebbero voler modificare la mappatura da scriptlevel a fontsize per produrre presentazioni migliori a loro giudizio. In particolare, se le dimensioni dei font devono essere arrotondate a valori disponibili, o a valori limitati in un intervallo, i dettagli di come ciò viene fatto dipendono dal riproduttore. I riproduttori dovrebbero, comunque, accertarsi che una serie di modifiche incrementali al valore di scriptlevel che abbiano come risultato per qualche sottoespressione il ritorno al valore che esso aveva in un'espressione circostante risulti nella stessa dimensione del font per quella sottoespressione e per l'espressione circostante.

Gli attributi color e background

L'attributo color controlla il colore nel quale è riprodotto il contenuto dei token. Inoltre, quando esso è ereditato da mstyle o dall'ambiente di riproduzione di un'espressione MathML, controlla il colore di ogni altro segno da parte di elementi MathML, comprese le linee o i segni di radice che possono essere disegnati da mfrac, mtable o msqrt.

Si noti che l'attributo background, sebbene non ereditato, ha come valore predefinito `trasparente' (come nel CSS1), che in effetti permette al padre di un elemento di controllare il suo sfondo.

I valori di color e background possono essere specificati con una stringa che consiste in '#' seguito senza spazi in mezzo da valori esadecimali a una o due cifre per la componente rossa, verde e blu, rispettivamente, del colore desiderato, usando lo stesso numero di cifre per ogni componente (o con la parola chiave `transparent' per background). Nelle cifre esadecimali non hanno importanza le lettere maiuscole o minuscole. I valori ad una cifra possibili vanno da 0 (componente non presente) a F (componente pienamente presente), ed i valori a due cifre possibili vanno da 00 (componente non presente) a FF componente pienamente presente), con il valore ad una cifra x equivalente al valore a due cifre xx (piuttosto che x0). % x0 sarebbe una notazione strettamente più corretta, ma è riprodotta molto male in alcuni browser.

Questi attributi possono anche essere specificati come un nome-di-colore-html, definito nella seguente sottosezione.

Compatibilità con i CSS degli attributi relativi ai colori

La sintassi descirtta in precedenza per i colori è un sottoinsieme della sintassi delle proprietà color e background-color del CSS1. (La sintassi per background-color è a sua volta un sottoinsieme della sintassi completa per la proprietà background del CSS1, che permette anche la specificazione di (per esempio) immagini di sfondo con la ripetizione opzionale. Nel MathML si usa il nome di attributo più generico background per facilitare possibili estensioni al campo d'azione dell'attributo in versioni future del MathML.)

I valori dei colori in entrambi gli attributi possono inoltre essere specificati come un nome-di-colore-html, ovvero con una delle parole chiave definite come nomi di colori in [HTML4.0]. La lista dei nomi di colori permessi comprende molte delle parole inglesi per i colori più comuni, ma non arancione (orange), marrone (brown) o rosa (pink), e comprende inoltre le parole inglesi per molti colori meno comuni; si veda il riferimento per l'elenco completo e per gli equivalenti valori RGB. Si noti che nei nomi dei colori non hanno importanza le maiuscole e le minuscole, a differenza della maggior parte delle parole chiave nei valori degli attributi del MathML. (Le stesse parole chiave per i nomi dei colori sono definite per la proprietà color nel CSS1, ma con valori RGB non specificati. Si veda inoltre la Sezione 2.3.4.3 [Attributi compatibili con i CSS].)

Regione precisa per lo sfondo non specificata

Le regole di riproduzione visuale consigliate per il MathML non definiscono l'estensione precisa della regione sul cui sfondo ha effetto l'attributo background nel tag mstyle, tranne che, quando il contenuto di mstyle non ha dimensioni negative e la regione dove esso si estende non si sovrappone ad altri segni a causa di spazi negativi circostanti, questa regione dovrebbe trovarsi dietro tutto i segni fatti per riprodurre il contenuto dell'elemento mstyle, ma non dovrebbe trovarsi dietro nessuno dei segni fatti per riprodurre espressioni circostanti. L'effetto della sovrapposizione delle regioni causato da spaziatura negativa sull'estensione della regione su cui ha effetto l'attributo background non è definito da queste regole.

Il significato degli spazi matematici con un nome

La spaziatura tra operatori è spesso un valore scelto tra un piccolo numero di valori potenziali. Il MathML dà dei nomi a questi valori e permette che i loro valori possano essere modificati. Poiché i valori predefiniti per la spaziatura intorno agli operatori dati nel dizionario degli operatori (Appendice D [Dizionario degli Operatori]) sono definiti usando questi spazi con un nome, modificare i loro valori produrrebbe una spaziatura più stretta o più larga. Questi valori possono essere usati dovunque siano permesse un'h-unità o una v-unità (Sezione 2.3.4.2 [Attributi con unità].

I nomi predefiniti per gli spazi sono: veryverythinmathspace, verythinmathspace, thinmathspace, mediummathspace, thickmathspace, verythickmathspace, o veryverythickmathspace. I valori predefiniti di veryverythinmathspace ... veryverythickmathspace sono rispettivamente 1/18em ... 7/18em.

3.3.4.3 Esempi

L'esempio di limitare l'estensibilità di una parentesi mostrato nella sezione su <mo>,

<mrow>
   <mo maxsize="1"> ( </mo>
   <mfrac> <mi> a </mi> <mi> b </mi> </mfrac>
   <mo maxsize="1"> ) </mo>
</mrow>

può essere riscritto con mstyle come:

<mstyle maxsize="1">
   <mrow>
      <mo> ( </mo>
      <mfrac> <mi> a </mi> <mi> b </mi> </mfrac>
      <mo> ) </mo>
   </mrow>
</mstyle>

3.3.5 Messaggi di errore (merror)

3.3.5.1 Descrizione

L'elemento merror visualizza il suo contenuto come un `messaggio di errore'. Questo può essere fatto, per esempio, visualizzando il contenuto in rosso, o con una scritta lampeggiante, o cambiando il colore di sfondo. Il contenuto può essere qualunque espressione o sequenza di espressioni.

merror accetta qualunque numero di argomenti; se questo numero non è 1, il suo contenuto è trattato come un singolo elemento `mrow implicito' come descritto nella Sezione 3.1.3 [Argomenti necessari].

L'obiettivo di questo elemento è di fornire ai programmi che generano il MathML da altri dati in ingresso un modo standard per segnalare errori di sintassi nei loro dati in ingresso. Poiché è anticipato che i preprocessori che analizzano le sintassi dei dati in ingresso pensati per l'introduzione manuale dei dati saranno sviluppati in modo da generare MathML, è importante che abbiano la capacità di indicare che è avvenuto un errore di sintassi in un certo punto. Si veda la Sezione 7.2.2 [Gestione degli errori].

L'uso consigliato di merror per segnalare errori di sintassi è che un preprocessore sostituisca la parte errata dei suoi dati in ingresso con un elemento merror che contiene una descrizione dell'errore, mentre elabora le espressioni circostanti normalmente finché è possibile. In questo modo, il messaggio di errore sarà riprodotto dove sarebbe apparso il dato errato, se fosse stato corretto; questo rende più facile per un autore determinare da ciò che viene riprodotto in quale parte dei dati era l'errore.

Non viene consigliato nessun formato specifico per i messaggi di errore, ma, come i messaggi di errore di ogni programma, il formato dovrebbe essere progettato in modo da rendere più chiaro possibile (per il lettore umano del messaggio di errore riprodotto) cosa era sbagliato nei dati in ingresso e come può essere corretto. Se i dati in ingresso errati contengono sottosezioni formattate correttamente, potrebbe essere utile che esse vengano preelaborate normalmente e incluse nel messaggio di errore (all'interno del contenuto dell'elemento merror), avvantaggiandosi della capacità di merror di contenere espressioni MathML arbitrarie piuttosto che solo testo.

3.3.5.2 Attributi

Nessuno (tranne gli attributi permessi per tutti gli elementi del MathML, elencati nella Sezione 2.3.5 [Attributi condivisi da tutti gli elementi del MathML]).

3.3.5.3 Esempio

Se un preprocessore per il controllo della sintassi MathML ricevesse in ingresso

<mfraction>
   <mrow> <mn> 1 </mn> <mo> + </mo> <msqrt> <mn> 5 </mn> </msqrt> </mrow>
   <mn> 2 </mn>
</mfraction>

che contiene l'elemento mfraction che non appartiene al MathML (presumibilmente al posto dell'elemento MathML mfrac), potrebbe generare il messaggio di errore

<merror>
   <mtext> Elemento non riconosciuto: mfraction;
           gli argomenti erano:  </mtext>
   <mrow> <mn> 1 </mn> <mo> + </mo> <msqrt> <mn> 5 </mn> </msqrt> </mrow>
   <mtext>  e  </mtext>
   <mn> 2 </mn>
</merror>

Si noti che i dati in ingresso del preprocessore non erano, in questo caso, MathML valido, ma il messaggio di errore in uscita è MathML valido.

3.3.6 Aggiustare lo spazio intorno al contenuto (mpadded)

3.3.6.1 Descrizione

Un elemento mpadded è presentato nello stesso modo del suo contenuto, ma con la sua dimensione complessiva e le altre dimensioni (come la posizione della linea di base) modificate secondo i suoi attributi. L'elemento mpadded non riscala (estende o riduce) il suo contenuto; il suo solo effetto è di modificare la dimensione apparente e la posizione del `contenitore' intorno al suo contenuto, in modo da avere effetto sulla posizione relativa del contenuto rispetto agli elementi circostanti. Il nome dell'elemento riflette l'uso di mpadded per aggiungere effettivamente spazio aggiuntivo (padding) intorno al suo contenuto. Se lo spazio aggiuntivo è negativo, è possibile che il contenuto di mpadded sia riprodotto esternamente al contenitore dell'elemento mpadded; si vedano i paragrafi seguenti per avvisi su vari potenziali problemi che può dare quest'effetto.

L'elemento mpadded accetta qualunque numero di argomenti; se tale numero non è 1, il suo contenuto è trattato come un singolo `elemento mrow implicito' come descritto nella Sezione 3.1.3 [Argomenti necessari].

Si consiglia che i riproduttori audio aggiungano (o riducano) le pause a seconda degli attributi che rappresentano la spaziatura orizzontale (width e lspace).

3.3.6.2 Attributi

Nome valori predefinito
width [ + | - ] numero-senza-segno ( % [ pseudo-unità ] | pseudo-unità | h-unità | spazio con nome ) la stessa del contenuto
lspace [ + | - ] numero-senza-segno ( % [ pseudo-unità ] | pseudo-unità | h-unità ) 0
height [ + | - ] numero-senza-segno ( % [ pseudo-unità ] | pseudo-unità | v-unità ) la stessa del contenuto
depth [ + | - ] numero-senza-segno ( % [ pseudo-unità ] | pseudo-unità | v-unità ) la stessa del contenuto

(Il simbolo di sintassi pseudo-unità è descritto in seguito.)

Questi attributi modificano le dimensioni del `contenitore' dell'elemento mpadded. Le dimensioni (che hanno gli stessi nomi degli attributi: width per l'ampiezza, height per l'altezza e depth per la profondità) sono definite nella prossima sottosezione. A seconda del formato del valore dell'attributo, una dimensione può essere impostata ad un nuovo valore, o ad una versione incrementata o decrementata della corrispondente dimensione del contenuto. I valori possono essere specificati come multipli o percentuali di qualunque dimensione della presentazione normale del contenuto dell'elemento (usando le cosiddette `pseudo-unità'), o possono essere impostate direttamente usando le unità standard (Sezione 2.3.4.2 [Attributi con unità]).

Se il valore di un attributo comincia con un segno + o -, specifica un incremento o un decremento della corrispondente dimensione del seguente valore di lunghezza (interpretato come spiegato in seguito). Altrimenti, la corrispondente dimensione è impostata direttamente al valore di lunghezza seguente. Si noti che il + e il - non significano che il valore successivo è positivo o negativo, anche quando è data un'esplicita unità di lunghezza (h-unità o v-unità). In particolare, questi attributi non possono impostare direttamente una dimensione a un valore negativo.

I valori di lunghezza (dopo il segno opzionale, che non fa parte del valore di lunghezza) possono essere specificati in vari formati. Ogni formato inizia con un numero-senza-segno, che può essere seguito da un segno % e da una `pseudo-unità' opzionale (denotata da pseudo-unità nelle sintassi degli attributi in precedenza), da una pseudo-unità soltanto, o da una delle unità di lunghezza (denotate da h-unità o da v-unità) specificate nella Sezione 2.3.4.2 [Attributi con unità], che non comprende %. Le pseudo-unità possibili sono le parole chiave width, lspace, height e depth; ciascuna di esse rappresenta la lunghezza della dimensione con lo stesso nome del contenuto dell'elemento mpadded (non dell'elemento mpadded stesso). Le lunghezze rappresentate da h-unità o da v-unità sono descritte nella Sezione 2.3.4.2 [Attributi con unità].

In ciascuno di questi formati, il valore di lunghezza specificato è il prodotto del numero specificato che rappresentava la lunghezza per l'unità o pseudo-unità, e moltiplicato per 0.01 se è presente %. Se non è data una pseudo-unità dopo %, si assume quella con lo stesso nome dell'attributo specificato.

Alcuni esempi di formati di attributi che usano le pseudo-unità (esplicite o predefinite) sono i seguenti: depth="100% height" e depth="1.0 height" impostano entrambe la profondità dell'elemento mpadded all'altezza del suo contenuto. depth="105%" imposta la profondità a 1.05 volte la profondità del contenuto, e sia depth="+100%" che depth="200%" impostano la profondità a due volte la profondità del contenuto.

Le dimensioni che sarebbero positive se il contenuto fosse riprodotto normalmente non possono essere rese negative con mpadded; una dimensione positiva è impostata a 0 se altrimenti diventasse negativa. Le dimensioni che sono inizialmente 0 possono essere rese negative, ma questo dovrebbe generalmente essere evitato. Si vedano gli avvisi in seguito sull'uso di spaziatura negativa per `regolare' o trasmettere significato.

Le regole date in precedenza implicano che tutte le seguenti impostazioni di attributi abbiano lo stesso effetto, che è di lasciare le dimensioni del contenuto invariate:

<mpadded width="+0em"> ... </mpadded>
<mpadded width="+0%"> ... </mpadded>
<mpadded width="-0em"> ... </mpadded>
<mpadded width="- 0 height"> ... </mpadded>
<mpadded width="100%"> ... </mpadded>
<mpadded width="100% width"> ... </mpadded>
<mpadded width="1 width"> ... </mpadded>
<mpadded width="1.0 width"> ... </mpadded>
<mpadded> ... </mpadded>

3.3.6.3 Significato degli attributi delle dimensioni

Si veda l'Appendice F [Glossario] per maggiori informazioni su alcuni dei termini tipografici usati in questa sezione.

L'attributo width (larghezza) si riferisce all'ampiezza orizzontale complessiva di un contenitore. Come comportamento predefinito (ovvero quando lspace non è modificato), il contenitore del contenuto di un elemento mpadded dovrebbe essere riprodotto allineato con il limite sinistro del contenitore dell'elemento mpadded. Perciò, aumentare width solamente in effetti aggiunge spazio al lato destro del contenitore.

L'attributo lspace fa riferimento all'ammontare dello spazio tra il lato sinistro di un contenitore e dove comincia realmente la presentazione del contenitore del suo contenuto. A differenza delle altre dimensioni, lspace non corrisponde ad una proprietà reale di un contenitore, ma esiste solo temporaneamente durante i calcoli fatti da ogni istanza di mpadded. E' fornito affinché ci sia un modo per aggiungere spazio al lato sinistro di un contenitore.

La ragione dietro l'uso di width e di lspace per controllare l'allineamento orizzontale invece di attributi più simmetrici, come un ipotetico rspace e lspace, è che è desiderabile avere una pseudo-unità `larghezza' (width), in parte perché `larghezza' è una proprietà reale di un contenitore.

L'attributo height (altezza) fa riferimento all'ammontare di spazio verticale tra la linea di base (la linea lungo il limite inferiore della maggior parte dei glifi che rappresentano lettere nella normale presentazione del testo) e il limite superiore del contenitore.

L'attributo depth (profondità) fa riferimento all'ammontare dello spazio verticale tra il limite inferiore del contenitore e la linea di base.

I riproduttori MathML dovrebbero accertarsi che, tranne per gli effetti degli attributi, la spaziatura relativa tra il contenuto di mpadded e gli elementi MathML circostanti non venga modificato sostituendo un elemento mpadded con un elemento mrow con lo stesso contenuto. Questo vale anche se occorre un'interruzione di linea all'interno dell'elemento mpadded. Comunque, se un elemento mpadded con valori degli attributi non predefiniti è soggetto ad un'interruzione di linea, il MathML non definisce come i suoi attributi o la sua presentazione interagiscono con l'algoritmo per le interruzioni di linea.

3.3.6.4 Avviso: la non portabilità delle `regolazioni'

Una probabile tentazione per l'uso degli elementi mpadded e mspace (e forse anche mphantom e mtext) sarà per un autore migliorare la spaziatura generata da un riproduttore specifico modificandola leggermente nelle espressioni specifiche, ovvero `regolare' la riproduzione.

Gli autori sono fortemente avvisati che diversi riproduttori MathML possono usare diverse regole di spaziatura per calcolare le posizioni relative dei simboli riprodotti in espressioni che non hanno modificazioni esplicite della spaziatura; se il riproduttore B migliora le regole di spaziatura rispetto al riproduttore A, spaziatura esplicita aggiunta per migliorare la qualità del risultato del riproduttore A può produrre pessimi risultati sul riproduttore B, molto probabilmente peggiori che senza nessuna `regolazione'.

Anche quando si può supporre una specifica scelta del riproduttore, le sue regole di spaziatura possono essere migliorate in versioni successive, facendo sì che gli effetti della regolazione in un dato documento MathML possano peggiorare con il tempo. Inoltre, quando il meccanismo dei fogli di stile è esteso al MathML, anche una versione di un riproduttore potrà usare diverse regole di spaziatura per utenti con fogli di stile diversi.

Perciò, si consiglia che la marcatura MathML non usi mai elementi mpadded o mspace per regolare la riproduzione di espressioni specifiche, a meno che il MathML non sia generato unicamente per essere visto usando una versione specifica di un riproduttore MathML, usando uno specifico foglio di stile (se i fogli di stile sono disponibili in quel riproduttore).

Nei casi dove la tentazione di migliorare la spaziatura si dimostra troppo forte, un uso attento di mpadded, di mphantom o degli elementi di allineamento (Sezione 3.5.5 [Marcatori di allineamento]) può dare risultati più portabili rispetto all'inserimento diretto di spaziatura aggiuntiva usando mspace o mtext. Il consiglio dato agli implementatori di riproduttori MathML potrebbe essere ancora più produttivo, a lungo termine.

3.3.6.5 Avviso: la spaziatura non dovrebbe essere usata per trasmettere significato

Gli elementi MathML che permettono `spaziatura negativa', ovvero mspace, mpadded e mtext, potrebbero essere in teoria usati per simulare nuove notazioni o caratteri `costruiti' dalla sovrapposizione visuale delle riproduzioni di più di una sottoespressione MathML.

Questa pratica è fortemente scoraggiata in ogni situazione, per i motivi seguenti:

Più generalmente, ogni costrutto che usa la spaziatura per trasmettere un significato matematico, piuttosto che semplicemente come aiuto per la visualizzazione della struttura dell'espressione, è scoraggiato. In altre parole, i costrutti che sono scoraggiati sono quelli che sarebbero interpretati in modo diverso da un lettore umano del MathML riprodotto se tutta la spaziatura esplicita fosse rimossa.

Se si usano tali costrutti nonostante questo avviso, essi dovrebbero essere rinchiusi in un elemento semantics che fornisce anche un'espressione MathML aggiuntiva che possa essere interpretata in modo standard.

Per esempio, l'espressione MathML

<mrow>
  <mpadded width="0"> <mi> C </mi> </mpadded>
  <mspace width="0.3em"/>
  <mtext> | </mtext>
</mrow>

forma un simbolo composto violando la politica stabilita in precedenza; potrebbe essere intesa per rappresentare l'insieme dei numeri complessi in un riproduttore MathML che non abbia supporto per il simbolo standard usato a questo scopo. Questo tipo di costrutto dovrebbe sempre essere evitato nel MathML, per le ragioni stabilite in precedenza; infatti, non dovrebbe mai essere necessario per i simboli standard, poiché un riproduttore MathML senza un metodo migliore per riprodurli è libero di usare la composizione dei simboli internamente, in modo che possa ancora supportare dati MathML generici in ingresso.

Comunque, se per qualsiasi ragione si usa un simile costrutto nel MathML, esso dovrebbe sempre essere rinchiuso in un elemento semantics come

<semantics>
  <mrow>
    <mpadded width="0"> <mi> C </mi> </mpadded>
    <mspace width="0.3em"/>
    <mtext> | </mtext>
  </mrow>
  <annotation-xml encoding="MathML-Presentation">
    <mi> &Copf; </mi>
  </annotation-xml>
</semantics>

che fornisce una codifica alternativa e standard per il simbolo desiderato, che è interpretata molto più facilmente del costrutto usando la spaziatura negativa. (La codifica alternativa in questo esempio usa gli elementi di presentazione MathML, dovrebbero essere considerati anche gli elementi di contenuto descritti nel Capitolo 4 [Marcatura di contenuto].)

(L'avviso precedente si applica anche a molti usi degli attributi di riproduzione per alterare il significato trasmesso da un'espressione, con l'eccezione degli attributi di mi (come fontweight) usati per distinguere una variabile da un'altra.)

3.3.7 Rendere invisibile il contenuto (mphantom)

3.3.7.1 Descrizione

L'elemento mphantom è riprodotto invisibilmente, ma con la stessa grandezza e le altre dimensioni, compresa la posizione della linea base, che il suo contenuto avrebbe se fosse riprodotto normalmente. mphantom può essere usato per allineare parti di un'espressione duplicando invisibilmente le sottoespressioni.

L'elemento mphantom accetta qualsiasi numero di argomenti; se questo numero non è 1, il suo contenuto è trattato come un singolo `elemento mrow implicito' formato da tutti i suoi argomenti, come descritto nella Sezione 3.1.3 [Argomenti necessari].

Si consiglia che i riproduttori audio riproducano gli elementi mphantom in modo analogo per il loro mezzo, riproducendoli come silenzio per la stessa durata della riproduzione normale del loro contenuto.

3.3.7.2 Attributi

Nessuno (tranne gli attributi permessi per tutti gli elementi MathML, elencati nella Sezione 2.3.5 [Attributi condivisi da tutti gli elementi del MathML].

Si noti che è possibile includere un'espressione MathML sia in un elemento mphantom che in un elemento mpadded, come in <mphantom><mpadded impostazione-degli-attributi> ... </mpadded></mphantom>, per cambiarne la dimensione e contemporaneamente renderlo invisibile.

I riproduttori MathML dovrebbero accertarsi che la spaziatura relativa tra il contenuto di un elemento mphantom e gli elementi MathML circostanti sia la stessa che se l'elemento mphantom fosse sostituito da un elemento mrow con lo stesso contenuto. Questo vale anche se avviene un'interruzione di linea all'interno dell'elemento mphantom.

Per la ragione precedente, mphantom non è considerato un elemento di spaziatura (Sezione 3.2.6 [Spazio (mspace)]) a meno che il suo contenuto non sia un elemento di spaziatura, poiché sulle regole di riproduzione consigliate per gli operatori ha effetto il fatto se gli elementi vicini sono di spaziatura. Anche in questo caso, l'avviso sul raggruppamento legale di elementi di spaziatura può applicarsi agli usi di mphantom.

C'è una situazione nella quale la regola precedente per riprodurre un elemento mphantom può non dare l'effetto desiderato. Quando un elemento mphantom contiene una sottosequenza degli argomenti di un elemento mrow, la determinazione di default dell'attributo form per un elemento mo all'interno della sottosequenza può cambiare. (Si veda il valore di default dell'attributo form descritto nella Sezione 3.2.4 [Operatore, parentesi, separatore o accento (mo)].) Può essere necessario aggiungere un attributo form esplicito ad un simile elemento mo in questi casi. Questo è illustrato nell'esempio seguente.

3.3.7.3 Esempi

In questo esempio, si usa mphantom per assicurare l'allineamento delle parti corrispondenti del numeratore e del denominatore di una frazione:

<mfrac>
  <mrow>
    <mi> x </mi>
    <mo> + </mo>
    <mi> y </mi>
    <mo> + </mo>
    <mi> z </mi>
  </mrow>
  <mrow>
    <mi> x </mi>
    <mphantom>
      <mo form="infix"> + </mo>
      <mi> y </mi>
    </mphantom>
    <mo> + </mo>
    <mi> z </mi>
  </mrow>
</mfrac>

Questo verrebbe riprodotto in modo simile a

\frac{x+y+z}{x\phantom{+y}\;+z}

piuttosto che come

\frac{x+y+z}{x+z}

L'impostazione esplicita dell'attributo form="infix" nell'elemento mo all'interno dell'elemento mphantom imposta l'attributo form al valore che avrebbe avuto in assenza dell'elemento mphantom circostante. Questo è necessario poiché altrimenti il segno + sarebbe interpretato come un operatore prefisso, che potrebbe avere una spaziatura leggermente diversa.

Alternativamente, questo problema potrebbe essere evitato senza impostare esplicitamente gli attributi, includendo ciascun argomento <mo>+</mo> e <mi>y</mi> nel suo elemento mphantom, ovvero

<mfrac>
   <mrow>
      <mi> x </mi>
      <mo> + </mo>
      <mi> y </mi>
      <mo> + </mo>
      <mi> z </mi>
   </mrow>
   <mrow>
      <mi> x </mi>
      <mphantom>
         <mo> + </mo>
      </mphantom>
      <mphantom>
         <mi> y </mi>
      </mphantom>
      <mo> + </mo>
      <mi> z </mi>
   </mrow>
</mfrac>

3.3.8 Contenuto tra coppie di parentesi (mfenced)

3.3.8.1 Descrizione

L'elemento mfenced fornisce una forma conveniente nella quale esprimere costrutti comuni che coinvolgono le parentesi (graffe, quadre e tonde), comprendendo eventualmente separatori (come la virgola) tra argomenti.

Per esempio, <mfenced> <mi>x</mi> </mfenced> è riprodotto come `(x)' ed è equivalente a

<mrow> <mo> ( </mo> <mi>x</mi> <mo> ) </mo> </mrow>

e <mfenced> <mi>x</mi> <mi>y</mi> </mfenced> è riprodotto come `(x, y)' ed è equivalente a

<mrow>
  <mo> ( </mo>
  <mrow> <mi>x</mi> <mo>,</mo> <mi>y</mi> </mrow>
  <mo> ) </mo>
</mrow>

Parentesi o separatori singoli sono rappresentati usando elementi mo, come descritto nella Sezione 3.2.4 [Operatore, parentesi, separatore o accento (mo)]. Perciò, ogni elemento mfenced è completamente equivalente ad una forma espansa descritta in seguito; entrambe le forme possono essere usate nel MathML, a comodità dell'autore o di un programma che genera il MathML. Un riproduttore MathML deve riprodurre entrambe queste forme esattamente allo stesso modo.

In generale, un elemento mfenced può contenere zero o più argomenti, e li rinchiuderà tra parentesi in un elemento mrow; se ci sono più di un argomento, inserirà separatori tra argomenti adiacenti, usando un elemento mrow annidato aggiuntivo intorno agli argomenti e ai separatori per un corretto raggruppamento (Sezione 3.3.1 [Raggruppare orizzontalmente le sottoespressioni (mrow)]). La forma espansa generica è mostrata in seguito. Le parentesi e i separatori saranno parentesi tonde e virgole come comportamento predefinito, ma possono essere modificati usando gli attributi, come mostrato nella tabella seguente.

3.3.8.2 Attributi

Nome valori predefinito
open stringa (
close stringa )
separators carattere * ,

Un elemento mfenced generico, con tutti gli attributi espliciti, ha l'aspetto seguente:

<mfenced open="aperta-parentesi"
         close="chiusa-parentesi"
         separators="sep#1 sep#2 ... sep#(n-1)" >
   arg#1
   ...
   arg#n
</mfenced>

aperta-parentesi e chiusa-parentesi sono stringhe arbitrarie. (Poiché sono usate come contenuto di elementi mo, ogni spazio bianco che contengono sarà collassato come descritto nella Sezione 2.3.6 [Collassare gli spazi bianchi in entrata].)

Il valore di separators è una sequenza di zero o più caratteri separatori (o riferimenti ad entità), opzionalmente separati da spazi bianchi. Ogni sep#i consiste di esattamente un carattere o riferimento ad entità. Perciò, separators=",;" è equivalente a separators=" , ; ".

L'elemento mfenced generico mostrato in precedenza è equivalente alla seguente forma espansa:

<mrow>
   <mo fence="true"> aperta-parentesi </mo>
   <mrow>
      arg#1
      <mo separator="true"> sep#1 </mo>
      ...
      <mo separator="true"> sep#(n-1) </mo>
      arg#n
   </mrow>
   <mo fence="true"> chiusa-parentesi </mo>
</mrow>

Ogni elemento tranne l'ultimo è seguito da un separatore. L'elemento mrow interno è aggiunto per il corretto raggruppamento, come spiegato nella Sezione 3.3.1 [Raggruppare orizzontalmente le sottoespressioni (mrow)].

Quando c'è un solo argomento, la forma precedente non ha separatori; poiché <mrow> arg#1 </mrow> è equivalente a arg#1 (come descritto nella Sezione 3.3.1 [Raggruppare orizzontalmente le sottoespressioni (mrow)]), questo caso è equivalente anche a:

<mrow>
   <mo fence="true"> aperta-parentesi </mo>
   arg#1
   <mo fence="true"> chiusa-parentesi </mo>
</mrow>

Se ci sono troppi caratteri separatori, quelli in più sono ignorati. Se sono dati dei caratteri separatori, ma ce ne sono troppo pochi, l'ultimo è ripetuto per quanto necessario. Perciò, il valore predefinito di separators="," è equivalente a separators=",,", separators=",,,", eccetera. Se non sono forniti caratteri separatori ma sono necessari, ad esempio se separators=" " o separators="" e ci sono più argomenti, allora non si inserisce nessun elemento separatore - ovvero, gli elementi <mo separator="true"> sep#i </mo> sono totalmente esclusi. Si noti che questo è diverso da inserire separatori che consistono di elementi mo con contenuto vuoto.

Infine, per il caso senza argomenti, ovvero

<mfenced open="aperta-parentesi"
         close="chiusa-parentesi"
         separators="qualsiasi-cosa" >
</mfenced>

è definita la seguente forma espansa che include solo le parentesi all'interno di un elemento mrow:

<mrow>
   <mo fence="true"> aperta-parentesi </mo>
   <mo fence="true"> chiusa-parentesi </mo>
</mrow>

Si noti che non tutte le `espressioni fra parentesi' possono essere codificate da un elemento mfenced. Tali espressioni particolari comprendono quelle con un separatore o una parentesi `ornata' o inclusa in un elemento mstyle, un separatore o una parentesi mancante o in più, o un separatore che contiene più caratteri. In questi casi, è necessario codificare l'espressione usando una versione appropriatamente modificata di una forma espansa. Come discusso in precedenza, è sempre permesso usare le forme espanse direttamente, anche quando non è necessario. In particolare, gli autori non possono avere garanzie che i preelaboratori MathML non sostituiranno occorrenze di mfenced con forme espanse equivalenti.

Si noti che le forme espanse equivalenti mostrate in precedenza comprendono attributi degli elementi mo che li identificano come parentesi o separatori. Poiché le scelte più comuni di parentesi e separatori occorrono già nel dizionario degli operatori con quegli attributi, gli autori non avranno normalmente bisogno di specificare tali attributi usando direttamente la forma espansa. Inoltre le regole dell'attributo form predefinito (Sezione 3.2.4 [Operatore, parentesi, separatore o accento (mo)]) fanno sì che le parentesi aperte e chiuse abbiano effettivamente i valori rispettivamente form="prefix" e form="postfix", e che i separatori abbiano il valore form="infix".

Si noti che sarebbe incorretto usare mfenced con un separatore di, ad esempio, `+', come abbreviazione di un'espressione che usa `+' come un operatore ordinario, es.

<mrow>
  <mi>x</mi> <mo>+</mo> <mi>y</mi> <mo>+</mo> <mi>z</mi>
</mrow>

Questo perché i segni + sarebbero trattati come separatori, non come operatori infissi. Ovvero, sarebbero presentati come se fossero marcati come <mo separator="true">+</mo>, che potrebbe perciò essere una riproduzione non appropriata.

3.3.8.3 Esempi

(a+b)

<mfenced>
  <mrow>
    <mi> a </mi>
    <mo> + </mo>
    <mi> b </mi>
  </mrow>
</mfenced>

Si noti che l'elemento mrow è necessario in modo che l'elemento mfenced abbia solo un argomento. Senza di esso, l'espressione sarebbe riprodotta erroneamente come `(a, +, b)'.

[0,1)

<mfenced open="[">
  <mn> 0 </mn>
  <mn> 1 </mn>
</mfenced>

f(x,y)

<mrow>
  <mi> f </mi>
  <mo> &ApplyFunction; </mo>
  <mfenced>
    <mi> x </mi>
    <mi> y </mi>
  </mfenced>
</mrow>

3.3.9 Includere il contenuto nella notazione (menclose)

3.3.9.1 Descrizione

L'elemento menclose presenta il suo contenuto all'interno della notazione di inclusione specificata dal suo attributo notation. menclose accetta un numero qualsiasi di argomenti; se questo numero non è 1, il suo contenuto è trattato come un singolo `elemento mrow implicito' che contiene i suoi argomenti, come descritto nella Sezione 3.1.3 [Argomenti necessari].

3.3.9.2 Attributi

Nome valori predefinito
notation longdiv | actuarial | radical longdiv

Quando notation ha il valore longdiv, il contenuto è disegnato incluso in un simbolo di divisione lunga. Un esempio completo di divisione lunga si ottiene anche usando mtable e malign. Quando notation ha come valore actuarial, il contenuto è disegnato incluso in un simbolo attuariale. Il caso notation=radical è equivalente allo schema msqrt.

3.3.9.3 Esempi

La marcatura seguente potrebbe essere utilizzata per codificare un problema elementale di divisione lunga in stile americano.

<mtable columnspacing='0' rowspacing='0'>
<mtr>
  <mtd></mtd>
  <mtd columnalign='right'><mn>10</mn></mtd>
</mtr>
<mtr>
  <mtd columnalign='right'><mn>131</mn></mtd>
  <mtd columnalign='right'>
    <menclose notation='longdiv'><mn>1413</mn></menclose>
  </mtd>
</mtr>
<mtr>
  <mtd></mtd>
  <mtd columnalign='right'>
    <mrow>
    <munder>
      <mn>131</mn>
      <mo>&UnderBar;</mo>
    </munder>
    <mphantom><mn>3</mn></mphantom>
    </mrow>
  </mtd>
</mtr>
<mtr>
  <mtd></mtd>
  <mtd columnalign='right'><mn>103</mn></mtd>
</mtr>
</mtable>

Questo può essere riprodotto più o meno come:

\begin{array}{rl}            & \phantom{)14}10                       \\        131 & \overline{)1413\,}                    \\            & \phantom{)}\underline{131\phantom{g}} \\            & \phantom{)1}103        \end{array}

Un esempio di come usare menclose per la notazione attuariale è

<msub>
  <mi>a</mi>
  <mrow>
    <menclose notation='actuarial'>
      <mi>n</mi>
    </menclose>
    <mo>&it;</mo>
    <mi>i</mi>
  </mrow>
</msub>

che si presenta più o meno come

\begin{array}{ll}          \phantom{x}a                        & \\          \overline{\phantom{x}n\phantom{|}}| & i         \end{array}

3.4 Schemi di apici, pedici e limiti

Gli elementi descritti in questa sezione posizionano uno o più apici o pedici ad una base. Aggiungere vari tipi di apici, pedici e ornamenti a simboli è un dispositivo notazionale molto comune nella matematica. Per la disposizione puramente visuale, un singolo elemento generico potrebbe bastare per posizionare apici, pedici e ornamenti in ciascuna delle tradizionali posizioni intorno ad una data base. Comunque, al fine di catturare meglio la struttura astratta della notazione comune, il MathML fornisce vari elementi di apici e pedici più specializzati.

Oltre agli elementi per il pedice e per l'apice, il MathML ha elementi per piazzare del testo sopra e sotto la base. Questi elementi possono essere utilizzati per porre limiti su operatori grandi, o per porre accenti e linee sopra o sotto la base. Le regole per riprodurre gli accenti sono diverse da quelle per il testo sopra e sotto la base, e questa differenza può essere controllata con gli attributi accent e underaccent come descritto nelle sezioni appropriate in seguito.

La presentazione degli apici e dei pedici subisce gli effetti degli attributi scriptlevel e displaystyle, che fanno parte dell'ambiente ereditato dal processo di riproduzione di ogni espressione MathML, e sono descritti sotto mstyle (Sezione 3.3.4 [Modifiche allo stile (mstyle)]). Questi attributi non possono essere dati esplicitamente ad un elemento di apice o pedice, ma possono essere specificati sul tag di apertura di un elemento mstyle che lo contiene se si desidera.

Il MathML fornisce inoltre un elemento per aggiungere gli indici dei tensori. Gli indici dei tensori sono diversi dai comuni pedici e apici in quanto devono essere allineati in colonne verticali. Gli indici dei tensori possono anche occorrere prima della base.

Poiché gli elementi di presentazione dovrebbero essere usati per descrivere la struttura notazionale astratta delle espressioni, è importante che l'espressione base in tutti gli elementi di apice o pedice (ovvero l'espressione che costituisce il primo argomento) sia l'intera espressione che deve avere l'apice o il pedice, non solo il carattere più a destra. Per esempio, (x+y)2 dovrebbe essere scritto come:

<msup>
  <mrow>
    <mo> ( </mo>
    <mrow>
      <mi> x </mi>
      <mo> + </mo>
      <mi> y </mi>
    </mrow>
    <mo> ) </mo>
  </mrow>
  <mn> 2 </mn>
</msup>

3.4.1 Pedice (msub)

3.4.1.1 Descrizione

La sintassi per l'elemento msub è:

<msub> base pedice </msub>

3.4.1.2 Attributi

Nome valori predefinito
subscriptshift numero v-unità automatico (l'unità tipica è ex)

L'attributo subscriptshift specifica l'ammontare minimo di cui spostare verso il basso la linea di base del pedice.

v-unità rappresenta un'unità di lunghezza verticale (si veda la Sezione 2.3.4.2 [Attributi con unità]).

L'elemento msub incrementa scriptlevel di 1, e imposta displaystyle a false, all'interno di pedice, ma lascia entrambi gli attributi invariati all'interno di base. (Questi attributi sono ereditati da ogni elemento tramite il suo ambiente di riproduzione, ma possono essere impostati esplicitamente solo su mstyle; si veda la Sezione 3.3.4 [Modifiche allo stile (mstyle)].)

3.4.2 Apice (msup)

3.4.2.1 Descrizione

La sintassi per l'elemento msup è:

<msup> base apice </msup>

3.4.2.2 Attributi

Nome valori predefinito
superscriptshift numero v-unità automatico (l'unità tipica è ex)

L'attributo superscriptshift specifica l'ammontare minimo di cui spostare verso l'alto la linea di base dell'apice.

v-unità rappresenta un'unità di lunghezza verticale (si veda la Sezione 2.3.4.2 [Attributi con unità]).

L'elemento msup incrementa scriptlevel di 1, e imposta displaystyle a false, all'interno di apice, ma lascia entrambi gli attributi invariati all'interno di base. (Questi attributi sono ereditati da ogni elemento tramite il suo ambiente di riproduzione, ma possono essere impostati esplicitamente solo su mstyle; si veda la Sezione 3.3.4 [Modifiche allo stile (mstyle)].)

3.4.3 Coppia pedice-apice (msubsup)

3.4.3.1 Descrizione

L'elemento msubsup si usa per aggiungere sia un pedice che un apice ad un'espressione base. Si noti che entrambi sono posizionati accanto alla base: x_1{}^2 rispetto a x_1^2.

La sintassi per l'elemento msubsup è:

<msubsup> base pedice apice </msubsup>

3.4.3.2 Attributi

Nome valori predefinito
subscriptshift numero v-unità automatico (l'unità tipica è ex)
superscriptshift numero v-unità automatico (l'unità tipica è ex)

L'attributo subscriptshift specifica l'ammontare minimo di cui spostare verso il basso la linea di base del pedice. L'attributo superscriptshift specifica l'ammontare minimo di cui spostare verso l'alto la linea di base dell'apice.

v-unità rappresenta un'unità di lunghezza verticale (si veda la Sezione 2.3.4.2 [Attributi con unità]).

L'elemento msubsup incrementa scriptlevel di 1, e imposta displaystyle a false, all'interno di pedice e apice, ma lascia entrambi gli attributi invariati all'interno di base. (Questi attributi sono ereditati da ogni elemento tramite il suo ambiente di riproduzione, ma possono essere impostati esplicitamente solo su mstyle; si veda la Sezione 3.3.4 [Modifiche allo stile (mstyle)].)

3.4.3.3 Esempi

L'elemento msubsup è comunemente usato per aggiungere coppie apice/pedice ad identificatori come illustrato in precedenza. Comunque, un altro uso importante è porre limiti su certi operatori grandi i cui limiti sono visualizzati tradizionalmente in posizione di apice e pedice anche se presentati in stile visuale. Il più comune di questi è l'integrale. Per esempio,

\int_0^1 \eulere^x \,\diffd x

sarebbe rappresentato come

<mrow>
  <msubsup>
    <mo> &int; </mo>
    <mn> 0 </mn>
    <mn> 1 </mn>
  </msubsup>
  <mrow>
    <msup>
      <mi> &ExponentialE; </mi>
      <mi> x </mi>
    </msup>
    <mo> &InvisibleTimes; </mo>
    <mrow>
      <mo> &DifferentialD; </mo>
      <mi> x </mi>
    </mrow>
  </mrow>
</mrow>

3.4.4 Testo sotto una base (munder)

3.4.4.1 Descrizione

La sintassi per l'elemento munder è:

<munder> base testo-sotto-la-base </munder>

3.4.4.2 Attributi

Nome valori predefinito
accentunder true | false automatico

L'attributo accentunder controlla se testo-sotto-la-base è disegnato come un `accento' o come un limite. La differenza principale tra un accento e un limite è che il limite è ridotto di dimensioni mentre un accento ha le stesse dimensioni della base. Una seconda differenza è che l'accento è più vicino alla base.

Il valore predefinito di accentunder è falso, a meno che testo-sotto-la-base sia un elemento mo o un operatore ornato (si veda la Sezione 3.2.4 [Operatore, parentesi, separatore o accento (mo)]). Se testo-sotto-la-base è un elemento mo, si usa il valore del suo attributo accent come valore predefinito di accentunder. Se testo-sotto-la-base è un operatore ornato, si usa l'attributo accent dell'elemento mo al suo interno come valore predefinito. Come con tutti gli attributi, un valore dato esplicitamente sovrascrive quello predefinito.

Ecco un esempio (accento rispetto a testo sotto una base): \underbrace{x+y+z} rispetto a \underbrace{\strut x+y+z}. La rappresentazione in MathML di questo esempio è mostrata in seguito.

Se la base è un operatore con movablelimits=true (o un operatore ornato il sui elemento mo centrale ha movablelimits=true), e displaystyle è impostato a false, allora testo-sotto-la-base è disegnato in posizione di pedice. In questo caso, l'attributo accentunder è ignorato. Questo è usato spesso per limiti su simboli come &sum;.

All'interno di testo-sotto-la-base, munder imposta sempre displaystyle a false, ma incrementa scriptlevel di 1 solo quando accentunder ha valore false. All'interno di base, esso lascia sempre entrambi gli attributi invariati. (Questi attributi sono ereditati da ogni elemento tramite il suo ambiente di riproduzione, ma possono essere impostati esplicitamente solo su mstyle; si veda la Sezione 3.3.4 [Modifiche allo stile (mstyle)].)

3.4.4.3 Esempi

La rappresentazione in MathML per l'esempio mostrato in precedenza è:

<mrow>
  <munder accentunder="true">
    <mrow>
      <mi> x </mi>
      <mo> + </mo>
      <mi> y </mi>
      <mo> + </mo>
      <mi> z </mi>
    </mrow>
    <mo> &UnderBrace; </mo>
  </munder>
  <mtext> rispetto a </mtext>
  <munder accentunder="false">
    <mrow>
      <mi> x </mi>
      <mo> + </mo>
      <mi> y </mi>
      <mo> + </mo>
      <mi> z </mi>
    </mrow>
    <mo> &UnderBrace; </mo>
  </munder>
</mrow>

3.4.5 Testo sopra una base (mover)

3.4.5.1 Descrizione

La sintassi per l'elemento mover è:

<mover> base testo-sopra-la-base </mover>

3.4.5.2 Attributi

Nome valori predefinito
accent true | false automatico

L'attributo accent controlla se testo-sopra-la-base è disegnato come `accento' (segno diacritico) o come limite. La differenza principale tra un accento e un limite è che il limite è ridotto nella dimensione mentre un accento ha la stessa dimensione della base. Una seconda differenza è che l'accento è disegnato più vicino alla base. Questo è mostrato in seguito (accento rispetto a limite): \hat{x} rispetto a \hat{\strut x}.

Queste differenze si applicano anche ad `accenti matematici' come barre sopra le espressioni: \overbrace{x+y+z} rispetto a \overbrace{\strut x+y+z}. La rappresentazione in MathML per ciascuno di questi esempi è mostrata in seguito.

Il valore predefinito di accent è falso, a meno che testo-sopra-la-base non sia un elemento mo o un operatore ornato (si veda la Sezione 3.2.4 [Operatore, parentesi, separatore o accento (mo)]). Se testo-sopra-la-base è un elemento mo, si usa il valore del suo attributo accent come valore predefinito di accent per mover. Se testo-sopra-la-base è un operatore ornato, si usa l'attributo accent dell'elemento mo al centro come valore predefinito.

Se la base è un operatore con movablemlimits impostato a true (o un operatore ornato il cui elemento mo centrale abbia movablemlimits=true), e displaystyle ha valore false, allora testo-sopra-la-base è disegnato in posizione di apice. In questo caso, l'attributo accent è ignorato. Questo si usa spesso per limiti su simboli come &sum;.

All'interno di testo-sopra-la-base, mover imposta sempre displaystyle a false, ma incrementa scriptlevel di 1 solo quando accent è falso. All'interno di base, lascia sempre entrambi gli attributi invariati. (Questi attributi sono ereditati da ogni elemento tramite il suo ambiente di riproduzione, ma possono essere impostati esplicitamente solo su mstyle; si veda la Sezione 3.3.4 [Modifiche allo stile (mstyle)].)

3.4.5.3 Esempi

La rappresentazione in MathML per gli esempi mostrati in precedenza è:

<mrow>
  <mover accent="true">
    <mi> x </mi>
    <mo> &Hat; </mo>
  </mover>
  <mtext> rispetto a </mtext>
  <mover accent="false">
    <mi> x </mi>
    <mo> &Hat; </mo>
  </mover>
</mrow>

<mrow>
  <mover accent="true">
    <mrow>
      <mi> x </mi>
      <mo> + </mo>
      <mi> y </mi>
      <mo> + </mo>
      <mi> z </mi>
    </mrow>
    <mo> &OverBar; </mo>
  </mover>
  <mtext> rispetto a </mtext>
  <mover accent="false">
    <mrow>
      <mi> x </mi>
      <mo> + </mo>
      <mi> y </mi>
      <mo> + </mo>
      <mi> z </mi>
    </mrow>
    <mo> &OverBar; </mo>
  </mover>
</mrow>

3.4.6 Testo sotto e sopra una base (munderover)

3.4.6.1 Descrizione

La sintassi per l'elemento munderover è:

<munderover> base testo-sotto-la-base testo-sopra-la-base </munderover>

3.4.6.2 Attributi

Nome valori predefinito
accent true | false automatico
accentunder true | false automatico

L'elemento munderover si usa affinché il testo sotto e quello sopra la base abbiano la stessa spaziatura verticale rispetto ad essa e affinché seguano la sua inclinazione come nella seconda espressione mostrata in seguito:

\int_0^{\!\!\!\infty}

rispetto a

\int_0^{\infty}

La rappresentazione in MathML di questo esempio è mostrata in seguito.

La differenza nella spaziatura verticale è troppo piccola per essere notata su un display a bassa risoluzione con la dimensione normale del font, ma si può notare su dispositivi a risoluzione maggiore come una stampante e quando si usano dimensioni maggiori del font. In aggiunta alla differenza visuale, aggiungere testo sia sotto che sopra la base riflette più accuratamente la semantica dell'espressione.

Gli attributi accent e accentunder hanno lo stesso effetto degli attributi con lo stesso nome su mover (Sezione 3.4.5 [Testo sopra una base (mover)]) e munder (Sezione 3.4.4 [Testo sotto una base (munder)]), rispettivamente. I loro valori predefiniti sono inoltre calcolati nello stesso modo descritto per tali elementi, con il valore predefinito di accent che dipende da testo-sopra-la-base e il valore predefinito di accentunder che dipende da testo-sotto-la-base.

Se la base è un operatore con movablelimits=true (o un operatore ornato il cui elemento mo centrale ha movablelimits impostato a true), e displaystyle ha valore false, allora testo-sotto-la-base e testo-sopra-la-base sono disegnati in posizione rispettivamente di pedice ed apice. In questo caso, gli attributi accent e accentunder sono ignorati. Questo si usa spesso per limiti su simboli come &sum;.

All'interno di testo-sotto-la-base, munderover imposta sempre displaystyle a false, ma incrementa scriptlevel di 1 solo quando accentunder ha valore false. All'interno di testo-sopra-la-base, munderover imposta sempre displaystyle a false, ma incrementa scriptlevel di 1 solo quando accent ha valore false. All'interno di base, lascia sempre entrambi gli attributi invariati. (Questi attributi sono ereditati da ogni elemento tramite l'ambiente di riproduzione, ma possono essere impostati esplicitamente solo su mstyle; si veda la Sezione 3.3.4 [Modifiche allo stile (mstyle)].)

3.4.6.3 Esempi

La rappresentazione in MathML per l'esempio mostrato in precedenza, con la prima espressione fatta usando elementi munder e mover separati, e la seconda usando un elemento munderover, è:

<mrow>
  <mover>
    <munder>
      <mo> &int; </mo>
      <mn> 0 </mn>
    </munder>
    <mi> &infin; </mi>
  </mover>
  <mtext> rispetto a </mtext>
  <munderover>
    <mo> &int; </mo>
    <mn> 0 </mn>
    <mi> &infin; </mi>
  </munderover>
</mrow>

3.4.7 Preapici, prepedici e indici di tensore (mmultiscripts)

3.4.7.1 Descrizione

La sintassi per l'elemento mmultiscript è:

<mmultiscripts>
    base
     (pedice apice)*
     [ <mprescripts/> (prepedice preapice)* ]
</mmultiscripts>

I prepedici e la notazione tensoriale sono rappresentati da un singolo elemento, mmultiscripts. Questo elemento permette la rappresentazione di un qualunque numero di coppie di pedici e apici allineate verticalmente, unite ad un'espressione base. Supporta sia i postapici e i postpedici (a destra della base nella notazione visuale) che i preapici e i prepedici (a sinistra della base in notazione visuale). Gli indici mancanti possono essere rappresentati dall'elemento vuoto none.

I preapici e i prepedici sono opzionali, e quando presenti sono dati dopo i postapici e i postpedici, perché i preindici sono relativamente rari in confronto alla notazione tensoriale.

La sequenza di argomenti consiste nella base seguita da zero o più coppie di pedici e apici (in questo ordine) allineate verticalmente che rappresentano tutti i postindici. Questo elenco è opzionalmente seguito da un elemento vuoto mprescripts e una lista di zero o più coppie di prepedici e preapici allineate verticalmente che rappresentano tutti i preindici. Le liste di coppie per postindici e preindici sono date in ordine da sinistra verso destra. Se nessun pedice o apice deve essere presentato in una data posizione, allora in quella posizione si deve usare l'elemento vuoto none.

La base, i pedici, gli apici, l'elemento separatore opzionale mprescripts, i prepedici e i preapici sono tutte sottoespressioni dirette dell'elemento mmultiscripts, ovvero sono tutti allo stesso livello dell'albero delle espressioni. Se un argomento è un pedice o un apice, o se è un prepedice o un preapice, è determinato da se occorre in una posizione pari o dispari, rispettivamente, ignorando l'elemento vuoto mprescripts quando si determina la posizione. Il primo argomento, la base, è considerato in posizione 1. Il numero totale di argomenti deve essere dispari, se non è presente mprescripts, o pari, se esso è presente.

Gli elementi vuoti mprescripts e none sono ammessi solo come sottoespressioni dirette di mmultiscripts.

3.4.7.2 Attributi

Gli stessi attributi di msubsup.

L'elemento mmultiscripts incrementa scriptlevel di 1 e imposta displaystyle a false all'interno di ciascun suo argomento tranne base, ma lascia entrambi gli attributi invariati all'interno di base. (Questi attributi sono ereditati da ogni elemento tramite il suo ambiente di riproduzione, ma possono essere impostati esplicitamente solo su mstyle; si veda la Sezione 3.3.4 [Modifiche allo stile (mstyle)].)

3.4.7.3 Esempi

Due esempi dell'uso di mmultiscripts sono:

0F1(;a;z).

<mrow>
  <mmultiscripts>
    <mi> F </mi>
    <mn> 1 </mn>
    <none/>
    <mprescripts/>
    <mn> 0 </mn>
    <none/>
  </mmultiscripts>
  <mo> &ApplyFunction; </mo>
  <mrow>
    <mo> ( </mo>
    <mrow> 
      <mo> ; </mo>
      <mi> a </mi>
      <mo> ; </mo>
      <mi> z </mi>
    </mrow> 
    <mo> ) </mo>
  </mrow>
</mrow>

R_i{}^j_{kl} (dove k e l sono indici diversi)

<mmultiscripts>
  <mi> R </mi>
  <mi> i </mi>
  <none/>
  <none/>
  <mi> j </mi>
  <mi> k </mi>
  <none/>
  <mi> l </mi>
  <none/>
</mmultiscripts>

3.5 Tabelle e matrici

Le matrici, i vettori e altra notazione matematica tabulare sono marcati usando gli elementi mtable, mtr, mlabeledtr e mtd. Questi elementi sono simili agli elementi TABLE, TR e TD dell'HTML, tranne per il fatto che forniscono attributi specializzati per il controllo della disposizione necessario per i diagrammi commutativi, le matrici a blocchi e così via.

L'elemento mlabeledtr rappresenta una riga etichettata di una tabella e può essere usato per le equazioni numerate. Il primo figlio di mlabeledtr è l'etichetta. Un'etichetta è piuttosto speciale poiché non è considerata un'espressione nella matrice e non è contata ai fini della determinazione del numero di colonne in quella riga.

3.5.1 Tabella o matrice (mtable)

3.5.1.1 Descrizione

Si specifica una matrice o tabella usando l'elemento mtable. All'interno dell'elemento mtable possono apparire solo elementi mtr o mlabeledtr.

Nel MathML 1.x, l'elemento mtable poteva inferire elementi mtr intorno ai suoi argomenti, e l'elemento mtr poteva inferire elementi mtd. In altre parole, se qualche argomento di un elemento mtable non era un elemento mtr, un'applicazione MathML doveva assumere una riga con una singola colonna (ovvero l'argomento era effettivamente incluso in un elemento mtr implicito). In modo simile, se qualche argomento di un elemento mtr (eventualmente implicito) non era un elemento mtd, l'argomento doveva essere trattato come una voce di tabella includendolo in un elemento mtd implicito.

Nel MathML 2.0, gli elementi mtr e mtd sono necessari, e non possono più essere impliciti. Comunque, per compatibilità all'indietro i riproduttori potrebbero voler continuare a supportare gli elementi mtr e mtd impliciti. In questo caso, comunque, i riproduttori dovrebbero cercare di informare gli utenti che gli elementi mtr e mtd impliciti non sono validi nel MathML 2.0.

Alle righe della tabella che hanno meno colonne delle altre righe della stessa tabella (sia che le altre righe le precedano o le seguano) sono in effetti aggiunti a destra elementi mtd vuoti in modo che il numero delle colonne in ogni riga sia uguale al massimo numero di colonne in qualunque riga della tabella. Si noti che l'uso di elementi mtd con valori non predefiniti degli attributi rowspan e columnspan può influenzare il numero di elementi mtd che devono essere dati nei successivi elementi mtr per coprire un dato numero di colonne. Si noti inoltre che l'etichetta in un elemento mlabeledtr non è considerata una colonna nella tabella.

3.5.1.2 Attributi

Nome valori predefinito
align (top | bottom | center | baseline | axis) [ numero-di-riga ] axis
rowalign (top | bottom | center | baseline | axis) + baseline
columnalign (left | center | right) + center
groupalign lista-di-liste-di-allineamento-di-gruppi {left}
alignmentscope (true | false) + true
columnwidth ( auto | numero h-unità | spazio-con-nome | fit ) + auto
width auto | numero h-unità auto
rowspacing ( numero v-unità ) + 1.0ex
columnspacing ( numero h-unità | spazio-con-nome ) + 0.8em
rowlines (none | solid | dashed) + none
columnlines (none | solid | dashed) + none
frame none | solid | dashed none
framespacing (numero h-unità | spazio-con-nome) (numero v-unità | spazio-con-nome) 0.4em 0.5ex
equalrows true | false true
equalcolumns true | false true
displaystyle true | false false
side left | right | leftoverlap | rightoverlap right
minlabelspacing numero h-unità 0.8em

Si noti che il valore predefinito per ciascuno degli attributi rowlines, columnlines e frame è la stringa letterale `none', nel senso che il comportamento predefinito è di non riprodurre le linee, non che non c'è un comportamento predefinito.

Come descritto nella Sezione 2.3.4 [Valori degli attributi del MathML], la notazione (x | y)+ significa una o più occorrenze di x o y, separate da spazi bianchi. Per esempio, valori possibili per columnalign sono left, left left e left right center center Se ci sono più elementi del necessario (es. più elementi che colonne per columnalign), allora saranno usati solo i primi elementi. Se ci sono meno elementi, allora l'ultimo elemento è ripetuto quanto necessario. Per esempio, se columnalign="right center" e la tabella ha tre colonne, allora la prima colonna sarà allineata a destra e la seconda e la terza colonna saranno centrate. L'etichetta in un elemento mlabeledtr non è considerata come una colonna nella tabella e i valori degli attributi che si applicano alle colonne non si applicano alle etichette.

L'attributo align specifica dove allineare la tabella rispetto al suo ambiente. `axis' significa allineare il centro della tabella all'asse dell'ambiente. (L'asse di un'equazione è una linea di allineamento usata dai tipografi. E' la linea sulla quale giace tipicamente un segno meno. Il centro della tabella è il punto medio dell'estensione verticale della tabella.) `center' e `baseline' significano entrambi di allineare il centro della tabella alla linea di base dell'ambiente. `top' o `bottom' allineano il margine superiore o inferiore della tabella alla linea di base dell'ambiente.

Se il valore dell'attributo align termina con un numero-di-riga tra 1 e n (per una tabella di n righe), la riga specificata è allineata nel modo sopra descritto, piuttosto che l'intera tabella; la riga più in alto (la prima) è numerata 1, e la riga più in basso (l'ultima) è numerata n. Lo stesso è vero se il numero di riga è negativo, tra -1 e -n, tranne che ci si riferisce alla riga più in basso con -1 e alla riga più in alto con -n. Altri valori di numero-di-riga sono illegali.

L'attributo rowalign specifica come devono essere allineati gli elementi di ogni riga. Per esempio, `top' significa che i margini superiori di ogni elemento in ogni riga devono essere allineati con i margini superiori degli altri elementi in quella riga. L'attributo columnalign specifica come devono essere allineati gli elementi in ogni colonna.

Gli attributi groupalign e alignmentscope sono descritti con gli elementi di allineamento, maligngroup e malignmark, nella Sezione 3.5.5 [Marcatori di allineamento].

L'attributo columnwidth specifica quanto deve essere larga una colonna. Il valore auto significa che la colonna deve essere larga quanto necessario, che è il valore predefinito. Se è dato un valore esplicito, allora la colonna ha esattamente quella larghezza e il contenuto di quella colonna è fatto entrare in quella larghezza. Il contenuto può essere spezzato in più linee o ridotto, a discrezione del riproduttore. Se come valore è dato fit, la differenza tra la larghezza della pagina e le larghezze delle colonne specificate come auto e/o con larghezze specifiche è divisa in parti uguali tra le colonne con valore fit e si usa questo valore come larghezza della colonna. Se resta spazio insufficiente per il contenuto delle colonne con valore fit, i riproduttori possono spezzare in più linee o ridurre il contenuto di tali colonne. Quando la larghezza della colonna è specificata come percentuale, il valore è relativo alla larghezza della tabella. Ovvero, un riproduttore deve cercare di aggiustare la larghezza della colonna in modo che essa copra la percentuale specificata della larghezza dell'intera tabella.

L'attributo width specifica la larghezza desiderata per l'intera tabella ed è inteso per gli interpreti MathML visuali. Quando il valore è un valore percentuale, il valore è relativo allo spazio orizzontale che un riproduttore MathML ha disponibile per l'elemento tabella. Quando il valore è auto, il riproduttore MathML deve calcolare la larghezza della tabella dal suo contenuto usando qualunque algoritmo di disposizione che esso scelga.

Il MathML 2.0 non specifica un algoritmo di disposizione di tabelle. In particolare, è responsabilità di un riproduttore MathML risolvere i conflitti tra l'attributo width e altri vincoli sulla larghezza di una tabella, come valori espliciti per gli attributi columnwidth, e dimensioni minime per il contenuto delle celle di una tabella. Per una discussione sugli algoritmi di disposizione delle tabelle, si veda Fogli di Stile a Cascata, livello 2.

Gli attributi rowspacing e columnspacing specificano quanto spazio debba essere aggiunto tra ogni riga e tra ogni colonna. Comunque, la spaziatura prima della prima riga e dopo l'ultima riga (ovvero al margine superiore e inferiore della tabella) è data dal secondo numero nel valore dell'attributo framespacing, e la spaziatura prima della prima colonna e dopo l'ultima colonna (ovvero sulla sinistra e sulla destra della tabella) è data dal primo numero nel valore dell'attributo framespacing.

Nelle sintassi di quegli attributi, h-unità e v-unità rappresentano rispettivamente un'unità di lunghezza orizzontale o verticale (si veda la Sezione 2.3.4.2 [Attributi con unità]). Sono tipicamente usate le unità mostrate nei valori predefiniti degli attributi (em o ex).

Gli attributi rowlines e columnlines specificano se e che tipo di linee debbano essere aggiunte tra ogni riga e tra ogni colonna. Le linee prima della prima riga o colonna e dopo l'ultima riga o colonna sono date usando l'attributo frame.

Se si desidera una cornice intorno alla tabella, si usa l'attributo frame. Se il valore dell'attributo non è `none', allora si usa framespacing per aggiungere spaziatura tra le linee della cornice e le prime e ultime righe e colonne della tabella. Se frame="none", allora l'attributo framespacing è ignorato. Gli attributi frame e framespacing non fanno parte delle opzioni rowlines/columnlines, rowspacing/columnspacing perché se così fosse sarebbe spesso necessario specificare interamente rowlines e columnlines invece di dare semplicemente un valore singolo. Per esempio, se una tabella avesse cinque colonne e noi volessimo le linee tra le colonne, ma nessuna cornice, allora dovremmo scrivere columnlines="none solid solid solid solid none". Separando la cornice dalle linee interne, abbiamo solo bisogno di scrivere columnlines="solid".

L'attributo equalrows impone che le righe siano tutte della stessa altezza totale se impostato a true. L'attributo equalcolumns impone che le colonne siano tutte della stessa larghezza se impostato a true.

L'attributo displaystyle specifica il valore di displaystyle (descritto sotto mstyle nella Sezione 3.3.4 [Modifiche allo stile (mstyle)]) all'interno di ogni cella (elemento mtd) della tabella. Impostare displaystyle=true può essere utile per tabelle i cui elementi sono intere espressioni matematiche; il valore predefinito di false è appropriato quando la tabella è parte di un'espressione, per esempio quando essa rappresenta una matrice. In ogni caso, scriptlevel (Sezione 3.3.4 [Modifiche allo stile (mstyle)]) non è variato per le celle della tabella.

L'attributo side specifica da quale lato di una tabella deve essere piazzata un'etichetta per una riga di una tabella. Questo attributo è inteso per essere usato per espressioni etichettate. Se è specificato left oppure right, l'etichetta è piazzata rispettivamente sul lato sinistro o destro della tabella. Gli altri due valori dell'attributo sono variazioni di left e di right: se la riga etichettata entra all'interno della larghezza permessa per la tabella senza etichetta, ma non entra nella larghezza se è inclusa l'etichetta, allora l'etichetta si sovrappone alla riga ed è visualizzata sopra alla riga se rowalign per quella riga vale top; altrimenti l'etichetta è visualizzata sotto la riga.

Se ci sono più etichette in una tabella, l'allineamento delle etichette all'interno della colonna virtuale che esse formano è a sinistra per le etichette sul lato sinistro della tabella, e a destra per le etichette sul lato destro della tabella. L'allineamento può essere sovrascritto specificando columnalignment per un elemento mlabeledtr.

L'attributo minlabelspacing specifica lo spazio minimo permesso tra un'etichetta e la voce adiacente nella riga.

3.5.1.3 Esempi

Una matrice identità 3 per 3 potrebbe essere rappresentata come segue:

<mrow>
  <mo> ( </mo>
  <mtable>
    <mtr> <mn>1</mn> <mn>0</mn> <mn>0</mn> </mtr>
    <mtr> <mn>0</mn> <mn>1</mn> <mn>0</mn> </mtr>
    <mtr> <mn>0</mn> <mn>0</mn> <mn>1</mn> </mtr>
  </mtable>
  <mo> ) </mo>
</mrow>

Questo potrebbe essere riprodotto come:

\left(\begin{array}{ccc}1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{array}\right)

Si noti che le parentesi devono essere rappresentate esplicitamente; esse non fanno parte della riproduzione dell'elemento mtable. Questo permette l'uso di parentesi diverse, come quelle quadre, o nessuna parentesi.

3.5.2 Riga di tabella o matrice (mtr)

3.5.2.1 Descrizione

Un elemento mtr rappresenta una riga in una tabella o matrice. Un elemento mtr è permesso solo come sottoespressione diretta di un elemento mtable, e specifica che il suo contenuto deve formare una riga in una tabella. Ogni argomento di mtr è piazzato in una colonna diversa della tabella, partendo dalla colonna più a sinistra.

Come descritto nella Sezione 3.5.1 [Tabella o matrice (mtable)], agli elementi mtr vengono aggiunti elementi mtd a destra quando sono più corti delle altre righe in una tabella.

3.5.2.2 Attributi

Nome valori predefinito
rowalign top | bottom | center | baseline | axis ereditato
columnalign (left | center | right) + ereditato
groupalign lista-di-liste-di-allineamento-di-gruppi ereditato

Gli attributi rowalign e columnalign permettono ad una riga specifica di sovrascrivere l'allineamento specificato dagli stessi attributi nell'elemento mtable circostante.

Come con mtable, se ci sono più elementi del necessario nel valore di columnalign (ovvero più elementi che colonne nella riga), allora gli elementi in più saranno ignorati. Se ci sono meno elementi che colonne, allora l'ultimo elemento sarà ripetuto quante volte sarà necessario.

L'attributo groupalign è descritto con gli elementi di allineamento, maligngroup e malignmark, nella Sezione 3.5.5 [Marcatori di allineamento].

3.5.3 Riga etichettata di tabella o matrice (mlabeledtr)

3.5.3.1 Descrizione

Un elemento mlabeledtr rappresenta una riga in una tabella che ha un'etichetta sul lato sinistro o destro, come determinato dall'attributo side. L'etichetta è il primo figlio di mlabeledtr. Il resto dei figli rappresenta il contenuto della riga ed è identico a quello usato per mtr; tutti i figli tranne il primo devono essere elementi mtd.

Un elemento mlabeledtr è permesso solo come sottoespressione diretta di un elemento mtable. Ogni argomento di mlabeledtr tranne il primo argomento (l'etichetta) è piazzato in una diversa colonna della tabella, iniziando dalla colonna più a sinistra.

Si noti che l'elemento etichetta non è considerato una cella nella riga della tabella. In particolare, l'elemento etichetta non è preso in considerazione nella disposizione della tabella ai fini del calcolo della larghezza e dell'allineamento. Per esempio, nel caso di un elemento mlabeledtr con un'etichetta e un solo figlio mtd centrato, prima si centra il figlio nella mtable che lo contiene, e poi si piazza l'etichetta. Specificamente, il figlio non è centrato nello spazio che resta nella tabella dopo aver piazzato l'etichetta.

Sebbene il MathML 2.0 non specifichi un algoritmo per piazzare le etichette, gli implementatori dei riproduttori visuali possono trovare utile il seguente modello di formattazione. Per piazzare un'etichetta, un implementatore deve pensare in termini di creare una tabella più grande, con una colonna in più da entrambi i lati. L'attributo columnwidth di entrambe queste colonne esterne sarà impostato a fit in modo che si espandano per riempire tutto lo spazio che resta dopo che sono state disposte le colonne interne. Infine, a seconda dei valori di side e di minlabelspacing, si piazza l'etichetta nella colonna esterna appropriata, eventualmente spostandola verso il basso se necessario.

3.5.3.2 Attributi

Gli attributi per mlabeledtr sono gli stessi che per mtr. A differenza degli attributi per l'elemento mtable, gli attributi di mlabeledtr che si applicano agli elementi colonne si applicano anche all'etichetta. Per esempio, in una tabella di una colonna,


<mlabeledtr rowalign='center baseline'>

vuol dire che l'etichetta è centrata verticalmente nella riga, e che l'elemento reale è allineato alla linea di base.

3.5.3.3 Numerare le equazioni

Uno degli usi importanti di mlabeledtr è per le equazioni numerate. In un elemento mlabeledtr, l'etichetta rappresenta il numero dell'equazione e gli elementi della riga sono l'equazione da numerare. Gli attributi side e minlabelspacing di mtable determinano il piazzamento del numero dell'equazione.

Nei documenti più grandi con molte equazioni numerate, la numerazione automatica diventa importante. Sebbene la numerazione automatica delle equazioni e la risoluzione automatica dei riferimenti ai numeri di equazione siano fuori dall'ambito del Mathml, questi problemi possono essere risolti con l'uso dei fogli di stile o di altri mezzi. La costruzione mlabeledtr fornisce supporto per entrambe queste funzioni in un modo volto a facilitare l'elaborazione XSL. L'elemento mlabeledtr può essere usato per indicare la presenza di un'equazione numerata, e il primo figlio può essere impostato al numero attuale di equazioni, mentre si incrementa il numero globale delle equazioni. Per i riferimenti incrociati, un attributo id sia sull'elemento mlabeledtr o sul primo elemento stesso potrebbe essere usato come destinazione di qualsiasi collegamento.

<mtable>
  <mlabeledtr id='e-uguale-m-c-quadro'>
    <mtext> (2.1) </mtext>
    <mtd>
     <mrow>
       <mi>E</mi>
       <mo>=</mo>
       <mrow>
        <mi>m</mi>
        <mo>&it;</mo>
        <msup>
         <mi>c</mi>
         <mn>2</mn>
        </msup>
       </mrow>
     </mrow>
    </mtd>
  </mlabeledtr>
</mtable>

Questo dovrebbe essere riprodotto come:

      E = mc2 (2.1)

3.5.4 Voce di tabella o matrice (mtd)

3.5.4.1 Descrizione

Un elemento mtd rappresenta una voce in una tabella o matrice. Un elemento mtd è permesso solo come sottoespressione diretta di un elemento mtr o mlabeledtr.

L'elemento mtd accetta qualsiasi numero di argomenti; se tale numero non è 1, il suo contenuto è trattato come un singolo `elemento mrow implicito' formato da tutti i suoi argomenti, come descritto nella Sezione 3.1.3 [Argomenti necessari].

3.5.4.2 Attributi

Nome valori predefinito
rowspan numero 1
columnspan numero 1
rowalign top | bottom | center | baseline | axis ereditato
columnalign left | center | right ereditato
groupalign lista-di-allineamento-di-gruppi ereditato

Gli attributi rowspan e columnspan permettono ad uno specifico elemento della matrice di essere trattato come se occupasse il numero di righe o colonne specificate. L'interpretazione di come questo elemento più grande influisca sullo specificare le righe e le colonne successive è intesa corrispondente agli attributi simili per le tabelle dell'HTML 4.0.

Gli attributi rowspan e columnspan possono essere usati intorno ad un elemento mtd che rappresenta l'etichetta in un elemento mlabeledtr. Inoltre, l'etichetta di un elemento mlabeledtr non è considerata parte di un precedente rowspan o columnspan.

Gli attributi rowalign e columnalign permettono ad uno specifico elemento della matrice di sovrascrivere l'allineamento specificato da un elemento mtable o mtr circostante.

L'attributo groupalign è descritto con gli elementi di allineamento, maligngroup e malignmark, nella Sezione 3.5.5 [Marcatori di allineamento].

3.5.5 Marcatori di allineamento

3.5.5.1 Descrizione

Sono elementi di spaziatura (si veda la Sezione 3.2.6 [Spazio (mspace)]) che possono essere usati per allineare verticalmente punti specificati all'interno di una colonna di espressioni MathML, inserendo automaticamente l'ammontare necessario di spazio orizzontale tra le sottoespressioni specificate.

La discussione che segue userà l'esempio di un sistema di equazioni che dovranno essere riprodotte con l'allineamento verticale dei coefficienti e delle variabili di ogni termine, inserendo spazi in modo simile a quello qui mostrato:

    8.44x + 55  y =  0
    3.1 x -  0.7y = -1.1

Se le espressioni di esempio apparse sopra fossero disposte in colonna ma non allineate, apparirebbero come:

    8.44x + 55y = 0
    3.1x - 0.7y = -1.1

(Per i riproduttori audio, si consiglia che gli elementi di allineamento producano il comportamento analogo di alterare il ritmo della pronuncia così che sia lo stesso per le varie sottoespressioni di una colonna, inserendo gli appropriati ritardi di tempo al posto della spaziatura orizzontale aggiuntiva qui descritta.)

Le espressioni le cui parti devono essere allineate (ogni equazione, nell'esempio precedente) devono essere date come elementi di tabella (ovvero come elementi mtd) di una colonna di una mtable. Per evitare confusione, sarà usato il termine `cella di tabella' invece che `elemento di tabella' nel resto di questa sezione.

Tutte le interazioni tra elementi di allineamento sono limitate alla colonna della mtable nella quale si trovano. Ovvero, ogni colonna di una tabella specificata da un elemento mtable agisce come `ambito di allineamento' che contiene all'interno tutti gli effetti di allineamento che nascono dal suo contenuto. Esclude inoltre ogni interazione tra i suoi elementi di allineamento e gli elementi di allineamento all'interno di ogni ambito di allineamento annidato che essa può contenere.

La ragione per la quale si usano le colonne della mtable come ambiti di allineamento è che sono il solo modo generico nel MathML per disporre espressioni in colonne verticali. Versioni future del MathML potranno fornire un elemento malignscope che permetterà che sia creato un ambito di allineamento intorno ad ogni elemento MathML, ma, anche allora, le colonne delle tabelle avranno ancora a volte bisogno di agire come ambiti di allineamento, e poiché non sono esse stesse elementi, ma piuttosto sono fatte di parti corrispondenti del contenuto di diversi elementi mtd, non potranno individualmente essere il contenuto di un elemento di ambito di allineamento.

Ad un elemento mtable può essere dato l'attributo alignmentscope=false per fare in modo che le sue colonne non agiscano come ambiti di allineamento. Questo è ulteriormente discusso alla fine di questa sezione. Altrimenti, la discussione in questa sezione assume che questo attributo abbia il suo valore predefinito di true.

3.5.5.2 Specificare gruppi di allineamento

Per causare l'allineamento, è necessario specificare, all'interno di ogni espressione da allineare, i punti da allineare con i punti corrispondenti nelle altre espressioni, e l'inizio di ogni gruppo di allineamento di sottoespressioni che può essere spostato orizzontalmente come unità per effettuare l'allineamento. Ogni gruppo di allineamento deve contenere un punto di allineamento. E' inoltre necessario specificare quali espressioni nella colonna non hanno nessun gruppo di allineamento, ma subiscono gli effetti soltanto del normale allineamento per quella colonna della tabella, ovvero dell'attributo columnalign, descritto altrove.

I gruppi di allineamento iniziano alle locazioni degli elementi invisibili maligngroup, che sono riprodotti con ampiezza zero quando occorrono fuori da un ambito di allineamento, ma all'interno di un ambito di alineamento sono riprodotti con abbastanza spazio orizzontale per causare l'allineamento desiderato del gruppo di allineamento che li segue. In seguito è dato un semplice algoritmo con il quale un'applicazione MathML può raggiungere questo risultato. Nell'esempio precedente, ogni equazione avrebbe un elemento maligngroup prima di ogni coefficiente, di ogni variabile e di ogni operatore sul lato sinistro, uno prima del segno =, e uno prima della costante sul lato destro.

In generale, una cella di tabella che contiene n elementi maligngroup contiene n gruppi di allineamento, con il gruppo iesimo che consiste degli elementi interamente dopo l'iesimo elemento maligngroup e prima dell'(i+1)-esimo; nessun elemento all'interno del contenuto della cella della tabella deve occorrere interamente prima del suo primo elemento maligngroup.

Si noti che la divisione in gruppi di allineamento non entra necessariamente nella struttura di espressioni annidate dell'espressione MathML che contiene i gruppi - ovvero, è permesso che un gruppo di allineamento consista della fine di un elemento mrow, un altro intero, e l'inizio di un terzo, per esempio. Questo può essere visto nella marcatura in MathML di questo esempio, data alla fine di questa sezione.

La struttura di espressioni annidate formata da elementi mrow e da altri schemi di disposizione dovrebbe riflettere la struttrura matematica dell'espressione, non la struttura del gruppo di allineamento, per rendere possibili presentazioni ottimali e migliori interpretazioni automatiche; si veda la discussione del raggruppamento corretto nella Sezione 3.3.1 [Raggruppare orizzontalmente le sottoespressioni (mrow)]. L'inserimento di elementi di allineamento (o di altri elementi di spaziatura) non dovrebbe alterare la corrispondenza tra la struttura di un'espressione MathML e la struttura dell'espressione matematica che essa rappresenta.

Sebbene i gruppi di allineamento abbiano bisogno di coincidere con la struttura delle espressioni annidate dello schema di disposizione, ci sono cionondimeno restrizioni su dove sia permesso un elemento maligngroup all'inerno di una cella di tabella. L'elemento maligngroup può essere contenuto soltanto all'interno di elementi dei tipi seguenti (che sono a loro volta contenuti nella cella della tabella):

Queste restrizioni sono volte ad assicurare che l'allineamento possa essere specificato in modo non ambiguo, evitando le complessità che coinvolgono cose come le sovrascritture, i segni radicali e le barre di frazione. Assicurano inoltre che basti un algoritmo semplice per compiere l'allineamento desiderato.

Si noti che alcune posizioni per un elemento maligngroup, sebbene legali, non sono utili, come ad esempio se un elemento maligngroup fosse un argomento di un elemento mfenced. Quando si inserisce un elemento maligngroup prima di un dato elemento in MathML preesistente, sarà spesso necessario, e sempre accettabile, formare un nuovo elemento mrow che contenga solo l'elemento maligngroup e l'elemento prima del quale è inserito. In generale, questo non sarà necessario solamente quando l'elemento maligngroup è inserito direttamente in un elemento mrow o in un elemento che può formare un elemento mrow implicito a partire dal suo contenuto. Si veda l'avviso sul raggruppamento legale di `elementi di spaziatura' nella Sezione 3.2.6 [Spazio (mspace)].

Per le celle di tabella che sono divise in gruppi di allineamento, ogni elemento nel loro contenuto deve fare parte di esattamente un gruppo di allineamento, tranne gli elementi dell'elenco precedente che contengano elementi maligngroup all'interno, e gli stessi elementi maligngroup. Questo significa che, all'interno di ogni cella di tabella che contiene gruppi di allineamento, il primo elemento completo deve essere un elemento maligngroup, sebbene esso possa essere preceduto dai tag di apertura di altri elementi.

Questo requisito elimina una potenziale confusione su come allineare gli elementi prima del primo elemento maligngroup, e rende facile identificare le celle della tabella lasciate fuori interamente dal processo di allineamento della loro colonna.

Si noti che non è necessario che le celle di tabella in una colonna che sono divise in gruppi di allineamento contengano ciascuna lo stesso numero di gruppi. Se non è questo il caso, si aggiungono gruppi di allineamento di ampiezza zero a destra di ogni cella di tabella che ha meno gruppi delle altre celle di tabella nella stessa colonna.

3.5.5.3 Celle di tabella non divise in gruppi di allineamento

Le espressioni in una colonna che non devono avere gruppi di allineamento non devono contenere nessun elemento maligngroup. Le espressioni senza gruppi di allineamento sono allineate usando solo l'attributo columnalign che si applica all'intera colonna della tabella, e non sono influenzate dall'attributo groupalign descritto in seguito. Se una tale espressione è più ampia della larghezza della colonna necessaria per le celle della tabella che contengono gruppi di allineamento, tutte le celle di tabella che contengono gruppi di allineamento saranno spostate come un'unità all'interno della colonna come descritto dall'attributo columnalign per quella colonna. Per esempio, l'intestazione di una colonna senza allineamento interno potrebbe essere aggiunta alla colonna di due equazioni date in precedenza facendole precedere da un'altra riga di tabella che contiene un elemento mtext per l'intestazione, e usando il valore predefinito columnalign="center" per la tabella, per produrre:

equazioni con variabili allineate
      8.44x + 55  y =  0
      3.1 x -  0.7y = -1.1

o, con un'intestazione più breve,

  alcune equazioni
8.44x + 55  y =  0
3.1 x -  0.7y = -1.1

3.5.5.4 Specificare punti di allineamento con malignmark

Il punto di allineamento di ogni gruppo di allineamento può sia essere specificato da un elemento malignmark dovunque all'interno del gruppo di allineamento (tranne che all'interno di un altro ambito di allineamento interamente contenuto in esso) che venire determinato automaticamente dall'attributo groupalign. L'attributo groupalign può essere specificato dall'elemento groupalign che precede il gruppo o dall'elemento mtd, o mtr, o mtable, che lo contiene. In casi tipici, usare l'attributo groupalign è sufficiente per descrivere i punti di allineamento desiderati, così non è necessario fornire elementi malignmark.

L'elemento malignmark indica che il punto di allineamento deve occorrere al lato destro dell'elemento precedente, oppure al lato sinistro dell'elemento o carattere successivo, a seconda dell'attributo edge di malignmark. Si noti che può essere necessario introdurre un elemento mrow per raggruppare un elemento malignmark con un elemento vicino, in ordine di non alterare il totale degli argomenti dell'elemento contenitore. (Si veda l'avviso a proposito del raggruppamento legale di `elementi di spaziatura' nella Sezione 3.2.6 [Spazio (mspace)].)

Quando compare un elemento malignmark all'interno di un gruppo di allineamento, può occorrere in un elemento annidato ad una profondità arbitraria all'interno del gruppo, finché non è in un ambito di allineamento annidato. Non è soggetto alle stesse restrizioni sulla locazione degli elementi maligngroup. Comunque, i suoi immediati dintorni devono essere tali che l'elemento alla sua immediata destra o sinistra (a seconda del suo attrbuto edge) possa essere identificato senza ambiguità. Se non è presente un tale elemento, i riproduttori devono comportarsi come se ci fosse inserito un elemento di ampiezza zero.

Ai fini dell'allineamento, un elemento X è considerato all'immediata sinistra di un elemento Y, e Y all'immediata destra di X, quando X e Y sono argomenti consecutivi di un elemento mrow (eventualmente implicito), con X che viene prima di Y. Nel caso di elementi mfenced, le applicazioni MathML dovrebbero valutare questa relazione come se l'elemento mfenced fosse stato sostituito dalla forma espansa equivalente che coinvolge mrow. In modo simile, un elemento maction dovrebbe essere trattato come se fosse sostituito dalla sua sottoespressione correntemente selezionata. In ogni altro caso, non è definita nessuna relazione di `all'immediata sinistra o destra' per due elementi X e Y. Comunque, nel caso di elementi di contenuto intersparsi in marcatura di presentazione, le applicazioni MathML dovrebbero tentare di valutare questa relazione in modo sensato. Per esempio, se un riproduttore mantiene una struttura di presentazione interna per riprodurre gli elementi di contenuto, la relazione potrebbe essere valutata rispetto a ciò. (Si vedano il Capitolo 4 [Marcatura di contenuto] e il Capitolo 5 [Combinare marcatura di presentazione e di contenuto] per maggiori dettagli su mescolare la marcatura di presentazione e di contenuto.)

A differenza di quanto avviene per tutti gli altri elementi del MathML, è ammesso che gli elementi malignmark occorrano all'interno di elementi token, come mn, mi o mtext. Quando occorre questo, il carattere immediatamente prima o dopo l'elemento malignmark porterà il punto di allineamento; in ogni altro caso, l'elemento alla sua immediata sinistra o destra porterà il punto di allineamento. La giustificazione per questo è che a volte è desiderabile allineare ai lati di caratteri specifici all'interno di elementi token di più caratteri.

Se ci sono più di un elemento malignmark in un gruppo di allineamento, sono ignorati tutti tranne il primo. Le applicazioni MathML possono voler fornire un modo nel quale avvertire a proposito di questa situazione, ma non è un errore, e non dovrebbe attivare avvisi come comportamento predefinito. (Giustificazione: sarebbe scomodo dover rimuovere tutti gli elementi malignmark non necessari da dati generati automaticamente, in certi casi, come quando sono usati per specificare l'allineamento a `virgole decimali' diverse dal carattere '.'.)

3.5.5.5 Attributi

Nome valori predefinito
edge left | right left

malignmark ha un attributo, edge, che specifica se il punto di allineamento sarà trovato a sinistra o a destra di qualche elemento o carattere. La precisa locazione intesa da `lato sinistro' o `lato destro' è discussa in seguito. Se edge="right", il punto di allineamento è il lato destro dell'elemento o carattere all'immediata sinistra dell'elemento malignmark. Se edge="left", il punto di allineamento è il lato sinistro dell'elemento o carattere all'immediata destra dell'elemento malignmark. Si noti che l'attributo si riferisce alla scelta del lato piuttosto che alla direzione nella quale cercare l'elemento il cui lato sarà usato.

Per elementi malignmark che occorrono all'interno del contenuto degli elementi token del MathML, si usa il carattere precedente o successivo nel contenuto dell'elemento token; se non esiste un tale carattere, si inserisce un carattere di ampiezza zero al fine di portare il punto di allineamento sul suo lato. Per tutti gli altri elementi malignmark, si usa l'elemento precedente o successivo; se non esiste un tale elemento, si inserisce un elemento di ampiezza zero per portare il punto di allineamento.

La definizione precisa del `lato sinistro' o `lato destro' di un carattere o glifo (es. se deve coincidere con un lato del contenitore del carattere) non è specificata dal MathML, ma è a discrezione del riproduttore; al riproduttore è permesso lasciare che la posizione del lato dipenda dal contesto del carattere come pure dal carattere stesso.

Per l'allineamento corretto delle colonne di numeri (usando i valori left, right o decimalpoint per groupalign), è probabile che si desideri che la larghezza effettiva (ovvero la distanza tra il lato sinistro e quello destro) delle cifre decimali sia costante, anche se la larghezza dei contenitori non è costante (es. se `1' è più stretto delle altre cifre). Per gli altri caratteri, come le lettere e gli operatori, può essere desiderabile che i lati allineati coincidano con i contenitori.

Il `lato sinistro' di un elemento MathML o di un gruppo di allineamento si riferisce al lato sinistro del glifo più a sinistra disegnato per riprodurre l'elemento o il gruppo, tranne che anche la spaziatura esplicita rappresentata da elementi mspace o mtext dovrebbe contare come `glifi' in questo contesto, come i glifi che sarebbero disegnati se non fosse per gli elementi mphantom intorno ad essi. Il `lato destro' di un elemento o gruppo di allineamento è definito in modo simile.

3.5.5.6 Attributi

Nome valori predefinito
groupalign left | center | right | decimalpoint ereditato

maligngroup ha un attributo, groupalign, che è usato per determinare la posizione del punto di allineamento del suo gruppo quando non è presente nessun elemento malignmark. La seguente discussione presume che non si sia trovato nessun elemento malignmark all'interno di un gruppo.

Nell'esempio dato all'inizio di questa sezione, c'è una colonna di 2 celle di tabella, con 7 gruppi di allineamento in ogni cella di tabella; perciò ci sono 7 colonne di gruppi di allineamento, con 2 gruppi, uno sopra l'altro, in ogni colonna. A queste colonne di gruppi di allineamento dovrebbero essere dati i 7 valori di groupalign `decimalpoint left left decimalpoint left left decimalpoint', in quest'ordine. Come specificare questa lista di valori per una cella di tabella o per un'intera colonna di tabella, usando gli attributi degli elementi che circondano l'elemento maligngroup, è descritto in seguito.

Se groupalign ha valore `left', `right' o `center', il punto di allineamento è definito al lato sinistro del gruppo, al suo lato destro o a metà strada tra questi lati, rispettivamente. Il significato di `lato sinistro' e `lato destro' è quello discusso in precedenza in relazione a malignmark.

Se groupalign ha valore `decimalpoint', il punto di allineamento è il lato destro dell'ultimo carattere prima del punto decimale. Il punto decimale è il primo carattere `.' (ASCII 0x2e) nel primo elemento mn trovato lungo la linea di base del gruppo di allineamento. Più precisamente, il gruppo di allineamento è scansionato ricorsivamente, in profondità, alla ricerca del primo elemento mn, visitando tutti gli argomenti di ogni elemento dei tipi mrow (compresi quelli impliciti), mstyle, mpadded, mphantom, mfenced o msqrt, visitando solo il primo argomento degli `elementi di apice e pedice' (msub, msup, msubsup, munder, mover, munderover, mmultiscripts) o di ciascun elemento mroot o semantics, visitando solo la sottoespressione selezionata di ogni elemento maction e saltando il contenuto di tutti gli altri elementi. Il primo elemento mn così trovato contiene sempre il punto di allineamento, che è il lato destro dell'ultimo carattere prima del primo punto decimale nel contenuto dell'elemento mn. Se non c'è un punto decimale nell'elemento mn, il punto di allineamento è il lato destro dell'ultimo carattere nel contenuto. Se il punto decimale è il primo carattere del contenuto dell'elemento mn, si usa il lato destro di un carattere di ampiezza zero inserito prima del punto decimale. Se non si trova nessun elemento mn, si usa il lato destro dell'intero gruppo di allineamento (come per groupalign="right").

Per permettere l'allineamento ai punti decimali negli elementi cn, un'applicazione MathML può convertire un'espressione di contenuto in un'espressione di presentazione che si riproduce nello stesso modo prima di cercare i punti decimali come descritto in precedenza.

Se si devono usare caratteri diversi da `.' come `punti decimali' per l'allineamento, devono essere preceduti da elementi malignmark all'interno del contenuto dello stesso token mn.

Per ciascuno dei valori di groupalign, se è presente un elemento malignmark esplicito dovunque nel gruppo, la posizione che esso specifica (descritta in precedenza) sovrascrive la determinazione automatica del punto di allineamento dal valore di groupalign.

3.5.5.7 Ereditarietà dei valori di groupalign

Di solito non è necessario mettere un attributo groupalign su ogni elemento maligngroup. Poiché questo attributo di solito è lo stesso per ogni gruppo in una colonna di gruppi di allineamento che deve essere allineata, può essere ereditato da un attributo sulla mtable che è stata usata per impostare l'ambito di allineamento, o dagli elementi mtr o mtd che circondano il gruppo di allineamento. E' ereditato tramite un `percorso di ereditarietà' che parte dalla mtable attraverso elementi mtr, mtd e maligngroup successivamente contenuti. C'è esattamente un elemento di ciascuno di questi tipi in questo percorso da un elemento mtable a ciascun gruppo di allineamento in esso. In generale, ogni dato gruppo di allineamento erediterà il valore di groupalign dall'elemento più interno che circonda il gruppo di allineamento e fornisce un'impostazione esplicita per questo attributo.

Si noti, comunque, che ogni elemento mtd ha bisogno, in generale, di una lista di valori groupalign, uno per ogni elemento maligngroup al suo interno, piuttosto che un singolo valore. Inoltre, un elemento mtr o mtable ha bisogno, in generale, di una lista di liste di valori groupalign, poiché copre più colonne della mtable, e ciascuna di esse è un potenziale ambito di allineamento. Tali liste di valori di allineamento per gruppi sono specificate con le seguenti regole di sintassi:

allineamento-per-gruppi        := left | right | center | decimalpoint
lista-di-allineamenti          := allineamento-per-gruppi +
lista-di-liste-di-allineamenti := ( '{' lista-di-allineamenti '}' ) +

Come descritto nella Sezione 2.3.4 [Valori degli attributi del MathML], | separa le alternative; + rappresenta una ripetizione opzionele (ovvero 1 o più copie di ciò che lo precede), con i valori in più ignorati e l'ultimo valore ripetuto finché necessario per coprire colonne di tabella o di gruppi di allineamento aggiuntive; '{' e '}' rappresentano le parentesi graffe letterali; e ( e ) sono usate per raggruppare, ma non appaiono letteralmente nel valore dell'attributo.

I valori permessi dell'attributo groupalign degli elementi che hanno questo attributo sono specificati usando le definizioni di sintassi precedenti come segue:

Tipo di elemento sintassi dell'attributo groupalign valore predefinito
mtable lista-di-liste-di-allineamenti {left}
mtr lista-di-liste-di-allineamenti ereditato dall'attributo di mtable
mtd lista-di-allineamenti ereditato dall'attributo di mtr
maligngroup allineamento-per-gruppi ereditato dall'attributo di mtd

Nell'esempio quasi all'inizio di questa sezione, i valori di allineamento dei gruppi potevano essere specificati su ogni elemento mtd usando groupalign = `decimalpoint left left decimalpoint left left decimalpoint', o su ogni elemento mtr usando groupalign = `{decimalpoint left left decimalpoint left left decimalpoint}', o (più comodamente) sull'elemento mtable globalmente usando groupalign = `{decimalpoint left left decimalpoint left left decimalpoint}', che fornisce una singola lista tra parentesi graffe di valori di allineamento per i gruppi per la singola colonna di espressioni da allineare.

3.5.5.8 Rappresentazione in MathML di un esempio di allineamento

Le regole precedenti sono sufficienti per spiegare la rappresentazione in MathML dell'esempio dato quasi all'inizio di questa sezione. Per ripetere l'esempio, la riproduzione desiderata è:

    8.44x + 55  y =  0
    3.1 x -  0.7y = -1.1

Un modo per rappresentare questo in MathML è:

<mtable groupalign="decimalpoint left left decimalpoint left left decimalpoint">
  <mtd>
    <mrow>
      <mrow>
        <maligngroup/>
        <mn> 8.44 </mn>
        <mo> &InvisibleTimes; </mo>
        <maligngroup/>
        <mi> x </mi>
      </mrow>
      <maligngroup/>
      <mo> + </mo>
      <mrow>
        <maligngroup/>
        <mn> 55 </mn>
        <mo> &InvisibleTimes; </mo>
        <maligngroup/>
        <mi> y </mi>
      </mrow>
    </mrow>
    <maligngroup/>
    <mo> = </mo>
    <maligngroup/>
    <mn> 0 </mn>
  </mtd>
  <mtd>
    <mrow>
      <mrow>
        <maligngroup/>
        <mn> 3.1 </mn>
        <mo> &InvisibleTimes; </mo>
        <maligngroup/>
        <mi> x </mi>
      </mrow>
      <maligngroup/>
      <mo> - </mo>
      <mrow>
        <maligngroup/>
        <mn> 0.7 </mn>
        <mo> &InvisibleTimes; </mo>
        <maligngroup/>
        <mi> y </mi>
      </mrow>
    </mrow>
    <maligngroup/>
    <mo> = </mo>
    <maligngroup/>
    <mrow>
      <mo> - </mo>
      <mn> 1.1 </mn>
    </mrow>
  </mtd>
</mtable>

3.5.5.9 Maggiori dettagli sugli elementi di allineamento

Gli elementi di allineamento maligngroup e malignmark possono occorrere fuori da ambiti di allineamento, dove sono ignorati. La giustificazione di questo è che in situazioni in cui è generato il MathML, o copiato da un altro documento, senza sapere se sarà posto all'interno di un ambito di allineamento, sarebbe scomodo se questo fosse un errore.

Ad un elemento mtable può venir dato l'attributo alignmentscope=false per fare sì che le sue colonne non agiscano come ambiti di allineamento. In generale, questo attributo ha la sintassi (true | false) +; se il suo valore è una lista di valori booleani, ogni valore booleano si applica ad una colonna, con l'ultimo valore ripetuto se necessario per coprire colonne aggiuntive, o con i valori in più ignorati. Le colonne che non sono ambiti di allineamento fanno parte dell'ambito di allineamento che circonda l'elemento mtable, se ce ne è uno. L'uso di alignmentscope=false permette che le tabelle annidate contengano elementi malignmark per allineare la tabella interna nell'ambito di allineamento circostante.

Come discusso in precedenza, l'elaborazione dell'allineamento per gli elementi di contenuto non è ben definita, poiché il MathML non specifica come devono essere riprodotti gli elementi di contenuto. Comunque, molte applicazioni MathML probabilmente troveranno comodo convertire internamente gli elementi di contenuto in elementi di presentazione che si riproducono allo stesso modo. Perciò, come regola generale, anche se un riproduttore non esegue tale conversione internamente, è consigliato che gli elementi di allineamento siano elaborati come se tale conversione fosse eseguita.

Un caso particolarmente importante che i riproduttori dovrebbero gestire elegantemente è l'interazione di elementi di allineamento con l'elemento di contenuto matrix, poiché questo elemento potrebbe o meno essere convertito internamente in un'espressione che contiene un elemento mtable per la riproduzione. Per risolvere parzialmente questa ambiguità, è consigliato, ma non richiesto, che, se l'elemento matrix è convertito in un'espressione che coinvolge un elemento mtable, all'elemento mtable venga dato l'attributo alignmentscope=false, cosa che renderà l'interazione dell'elemento matrix con gli elementi di allineamento non diversa da quella di un generico elemento di presentazione (in particolare, permetterà che esso contenga elementi malignmark che operano all'interno degli ambiti di allineamento creati dalle colonne di una mtable che contiene l'elemento matrix in una delle sue celle).

L'effetto degli elementi di allineamento in celle di tabella che hanno valori non predefiniti degli attributi columnspan o rowspan non è specificato, tranne che un simile uso degli elementi di allineamento non è un errore. Versioni future del MathML potrebbero specificare il comportamento degli elementi di allineamento in celle simili.

L'effetto di una possibile divisione in più linee di un elemento mtable sugli elementi di allineamento non è specificato.

3.5.5.10 Un semplice algoritmo di allineamento

Qui è dato un semplice algoritmo con il quale un'applicazione MathML può eseguire l'allineamento specificato in questa sezione. Poiché la specificazione dell'allineamento è deterministica (tranne per la definizione di lati sinistri e destri di un carattere), ogni algoritmo di allineamento MathML corretto avrà lo stesso comportamento di questo. Ogni colonna di una mtable (ambito di allineamento) può essere trattata in modo indipendente; l'algoritmo dato qui si applica ad una colonna di una table, e tiene conto degli elementi di allineamento, dell'attributo groupalign descritto in questa sezione e dell'attributo columnalign descritto sotto mtable (Sezione 3.5.1 [Tabella o matrice (mtable)]).

Prima di tutto, si determina una presentazione per il contenuto di ogni cella nella colonna, usando ampiezza zero per tutti gli elementi maligngroup e malignmark. La presentazione finale sarà identica tranne che per gli spostamenti orizzontali applicati ad ogni gruppo di alineamento e/o cella di tabella. Sono annotate le posizioni dei punti di allineamento specificate da ogni elemento mallignmark e si determinano i rimanenti punti di allineamento usando i valori di groupalign.

Per ogni gruppo di allineamento, si annotano le posizioni del lato sinistro, del punto di allineamento e del lato destro, permettendo che sia determinata l'ampiezza del gruppo da ogni lato del gruppo di allineamento (destro e sinistro). La somma di queste due `ampiezze laterali', ovvero la somma delle ampiezze a sinistra e a destra del punto di allineamento, sarà uguale all'ampiezza del gruppo di allineamento.

Per seconda cosa, ogni colonna di gruppi di allineamento è scansionata da sinistra a destra. La scansione iesima copre l'iesimo gruppo di allineamento in ogni cella che contiene almeno i gruppi di allineamento. Le celle di tabella senza gruppi di allineamento, o con meno di i gruppi di allineamento, sono ignorate. Ogni scansione determina il massimo di due valori sui gruppi di allineamento scansionati: l'ampiezza massima a sinistra del punto di allineamento, e l'ampiezza massima a destra del punto di allineamento, di ogni gruppo di allineamento esaminato.

La somma di tutte le ampiezze massime calcolate (due per ogni colonna di gruppi di allineamento) dà un'ampiezza totale, che sarà l'ampiezza di ogni cella della tabella che contiene gruppi di allineamento. Sia n il massimo numero di gruppi di allineamento in una cella; l'ampiezza di ciascuna di tali celle è divisa in 2n sezioni adiacenti, chiamate L(i) e R(i) per i che va da 1 a n, usando le 2n massime ampiezze laterali determinate in precedenza; per ogni i, l'ampiezza di tutte le sezioni chiamate L(i) è l'ampiezza massima del gruppo di allineamento iesimo di ogni cella alla sinistra del suo punto di allineamento, e l'ampiezza di tutte le sezioni chiamate R(i) è l'ampiezza massima del gruppo di allineamento iesimo di ogni cella alla destra del suo punto di allineamento.

I gruppi di allineamento sono allora posizionati nell'unico modo che pone la parte di ogni iesimo gruppo alla sinistra del suo punto di allineamento in una sezione chiamata L(i), e pone la parte di ogni iesimo gruppo alla destra del suo punto di allineamento in una sezione chiamata R(i). Questo fa sì che il punto di allineamento di ogni iesimo gruppo sia sul confine tra sezioni adiacenti di L(i) e R(i), in modo che tutti i punti di allineamento dell'iesimo gruppo abbiano la stessa posizione orizzontale.

Le ampiezze delle celle che non contengono gruppi di allineamento sono state calcolate come parte della presentazione iniziale, e possono essere diverse per ogni cella, e diverse dalla singola ampiezza usata per le celle che contengono gruppi di allineamento. Il massimo tra le ampiezze di tutte le celle (per entrambi i tipi di celle) dà l'ampiezza dell'intera colonna della tabella.

La posizione di ogni cella nella colonna è determinata dalla parte applicabile del valore dell'attributo columnalign dell'elemento mtable, mtr o mtd circostante più interno che abbia un valore esplicito per esso, come descritto nelle sezioni su questi elementi. Questo può significare che le celle che contengono gruppi di allineamento saranno spostate all'interno della loro colonna, e inoltre che i loro gruppi di allineamento saranno spostati all'interno delle celle come descritto in precedenza, ma poiché ciascuna di tali celle ha la stessa ampiezza, sarà spostata dello stesso ammontare nella colonna, mantenendo perciò l'allineamento verticale dei punti di allineamento dei gruppi di allineamento corrispondente in ogni cella.

3.6 Espressioni vivacizzanti

3.6.1 Associare un'azione ad una sottoespressione (maction)

Ci sono molti modi in cui può essere desiderabile rendere attivo del contenuto matematico. Aggiungere un collegamento ad una sottoespressione MathML è un tipo fondamentale di interattività (Sezione 7.1.4 [Mescolare e collegare il MathML e l'HTML]). Comunque, molti altri tipi di interattività non possono essere facilmente gestiti da meccanismi generici di collegamento. Per esempio, in espressioni matematiche lunghe, potrebbe essere fornita la capacità di `piegare' le espressioni, ovvero un riproduttore potrebbe permettere ad un lettore di passare da un'ellissi ad un'espressione molto più lunga che essa rappresenta.

Per fornire un meccanismo per associare azioni a espressioni, il MathML fornisce l'elemento maction. Questo elemento accetta un numero qualsiasi di sottoespressioni come argomenti, e i seguenti attributi:

Nome valori predefinito
actiontype (descritto in seguito) (attributo necessario, nessun valore predefinito)
selection intero-positivo 1

Come comportamento predefinito, le applicazioni MathML che non riconoscono il valore specificato di actiontype dovrebbero riprodurre la sottoespressione selezionata come definito in seguito. Se non esiste una sottoespressione selezionata, è un errore in MathML; la riproduzione appropriata in questo caso è come descritto nella Sezione 7.2.2 [Gestione degli errori] sul trattamento degli errori in MathML.

Poiché ad un'applicazione MathML-compatibile non è richiesto di riconoscere nessun valore particolare di actiontype, un'applicazione può essere pienamente MathML-compatibile implementando soltanto il comportamento predefinito sopra descritto.

L'attributo selection è fornito per quei valori di actiontype che permettono a qualcuno che vede un documento di selezionare una di varie sottoespressioni da vedere. Il suo valore dovrebbe essere un intero positivo che indica una delle sottoespressioni dell'elemento maction, numerate da 1 al numero di figli dell'elemento. Quando è questo il caso, la sottoespressione così indicata si dice la `sottoespressione selezionata' dell'elemento maction; altrimenti la `sottoespressione selezionata' non esiste, e questo è un errore. Quando l'attributo selection non è specificato (compreso per tipi di azione per i quali non ha senso), il suo valore predefinito è 1, così la sottoespressione selezionata sarà la prima sottoespressione.

Inoltre, come descritto nel Capitolo 7 [L'interfaccia del MathML], se un'applicazione MathML reagisce ad un comando utente di copiare una sottoespressione MathML negli `appunti' dell'ambiente, ad ogni elemento maction presente in ciò che è copiato dovrebbe essere dato un attributo selection corrispondente al suo stato di selezione nella presentazione MathML al tempo del comando `copia'.

In seguito è data una lista consigliata di valori di actiontype e azioni associate. Si tenga presente, comunque, che questa lista è principalmente a scopo illustrativo, e che i valori e i comportamenti riconosciuti varieranno da applicazione ad applicazione.

<maction actiontype="toggle" selection="intero-positivo" > (prima espressione) (seconda espressione)... </maction>
Per questo tipo di azione, un riproduttore potrebbe visualizzare alternativamente le espressioni date, ciclando tra esse quando un lettore clicca sull'espressione attiva, iniziando dall'espressione selezionata e aggiornando l'attributo selection come descritto in precedenza. Usi tipici potrebbero essere esercizi nell'insegnamento, ellissi in risultati di computer algebra lunghi, o per illustrare notazioni alternative. Si noti che le espressioni possono essere di lunghezza significativamente diversa, così che potrebbe essere desiderabile una negoziazione della dimensione con il browser. Se la negoziazione della dimensione non è disponibile, possono essere necessari lo scorrimento, l'elisione, il ridimensionamento o altri metodi per permettere la visione intera.
<maction actiontype="statusline"> (espressione) (messaggio) </maction>
In questo caso, il riproduttore potrebbe visualizzare l'espressione del contesto sullo schermo. Quando un lettore clicca sull'espressione o ci passa sopra con il mouse, il riproduttore manderà una riproduzione del messaggio sulla linea di stato del browser. Poiché prevedibilmente la maggior parte dei browser nel futuro sarà probabilmente limitata nel visualizzare testo sulla linea di stato, gli autori useranno presumibilmente testo puro in un elemento mtext per il messaggio nella maggior parte delle circostanze. Per i messaggi non contenuti in mtext, i riproduttori potrebbero fornire una traduzione in linguaggio naturale della marcatura, ma ciò non è richiesto.
<maction actiontype="tooltip"> (espressione) (messaggio) </maction>
Anche qui il riproduttore potrebbe visualizzare l'espressione del contesto sullo schermo. Quando il mouse rimane sull'espressione per un tempo abbastanza lungo, il riproduttore visualizza una riproduzione del messaggio in un rettangolo di `suggerimento' vicino all'espressione. Questi messaggi sono chiamati a volte anche `aiuto a fumetti'. Presumibilmente gli autori useranno testo puro in un elemento mtext per il messaggio nella maggior parte delle circostanze. Per messaggi non contenuti in mtext, i riproduttori possono fornire una traduzione in linguaggio naturale della marcatura se la riproduzione completa in Mathml non è pratica, ma ciò non è richiesto.
<maction actiontype="highlight" my:color="#ff0000"> espressione </maction>, <maction actiontype="highlight" my:background="#ff0000"> espressione </maction>
In questo caso, un riproduttore potrebbe evidenziare l'espressione al passaggio su di essa del mouse. Nell'esempio dato in precedenza, si usano attributi non standard di un altro spazio di nomi per passare informazioni addizionali ai riproduttori che le supportano, senza violare la DTD del MathML (si veda la Sezione 7.2.3 [Attributi per dati non specificati]). L'attributo my:color cambia il colore dei caratteri nella presentazione, mentre l'attributo my:background cambia il colore dello sfondo dietro i caratteri.
<maction actiontype="menu" selection="1" > (elemento di menu 1) (elemento di menu 2) ... </maction>
Questo tipo di azione dice al riproduttore di fornire un menu di tipo pop-up. Questo permette una capacità di collegamento uno-a-molti. Si noti che gli elementi del menu potranno essere altre espressioni <maction actiontype="menu">...</maction>, permettendo quindi menu annidati.

Descrizione sommaria: Linguaggio di marcatura matematica (MathML) Versione 2.0
Precedente: 2 Fondamenti del MathML
Successivo: 4 Marcatura di contenuto