Lisez-moi S.V.P. 

3 Le balisage de présentation

Table des matières : Le langage de balisage mathématique (MathML) version 2.0
Chapitre précédent : 2. Les principes fondamentaux de MathML
Chapitre suivant : 4. Le balisage de contenu

3.1 Introduction

Ce chapitre définit les éléments de présentation de MathML pouvant servir à décrire la structure de mise en page d'une notation mathématique.

3.1.1 Ce que les éléments de présentation représentent

Les éléments de présentation correspondent aux constructeurs en notation traditionnelle des mathématiques, c'est-à-dire, aux types de symboles et aux structures de construction d'expression de base d'après lesquels se construit tout morceau particulier en notation traditionnelle des mathématiques. En raison de l'importance de la notation visuelle traditionnelle, les descriptions des constructions de notation que les éléments représentent sont données ici en termes visuels. Néanmoins, les éléments sont indépendants du médium, c'est-à-dire qu'ils ont aussi été conçus pour contenir assez d'informations pour leur bon rendu sonore. Certains attributs de ces éléments n'ont de sens que pour les médias visuels mais, pour la plupart, un traitement sonore analogue est aussi possible (par exemple, par correspondance entre la durée et l'étalement horizontal).

Les éléments de présentation MathML suggèrent seulement (c.à.d., n'imposent pas) des rendus possibles, afin de permettre un rendu dépendant d'un média et des préférences de style personnelles. Cette spécification décrit en détails les règles d'un rendu visuel suggéré mais un moteur de rendu MathML est libre d'utiliser ses propres règles tant que ses rendus sont intelligibles.

Les éléments de présentation servent à exprimer la structure syntaxique de la notation mathématique, un peu comme les titres, les chapitres et les paragraphes représentent la structure syntaxique supérieure d'un document textuel. Ainsi, par exemple, une seule rangée d'identificateurs et d'opérateurs, telle que x + a / b, souvent ne sera pas représentée simplement par un élément mrow (qui est rendu par la rangée horizontale de ses arguments) mais par plusieurs éléments mrow imbriqués, correspondant aux sous-expressions imbriquées qui composent l'expression mathématique :

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

De même, les exposants ne s'accrochent pas simplement au caractère précédent mais aux expressions entières constituant leur base. Cette structure permet un meilleur rendu des mathématiques, en particulier lorsque l'auteur du document ne connaît pas les détails concernant l'environnement de rendu comme les chasses affichées ; cela facilite également beaucoup l'interprétation automatique des structures mathématiques représentées.

Certains caractères MathML servent à nommer des opérateurs ou des identificateurs rendus en notation traditionnelle pareils à d'autres symboles, tels que &DifferentialD;, &ExponentialE; ou &ImaginaryI;, ou d'autres opérateurs normalement invisibles, tels que &InvisibleTimes;, &ApplyFunction; ou &InvisibleComma;. Ce sont des symboles ou objets de notation distincts, ce que met en évidence leur rendu sonore distinct et parfois les effets sur les sauts de ligne et les espacements dans un rendu visuel, et comme tels ils devraient être représentés par des références d'entités particulières appropriées. Par exemple, l'expression représentée visuellement par f(x) se prononcera habituellement en français par f de x plutôt que simplement f x ; on peut l'exprimer en MathML à l'aide d'un opérateur &ApplyFunction; après le f, qui sera rendu (ici) de façon sonore par de.

La liste complète des entités MathML est décrite dans le chapitre 6 Les caractères, les entités et les fontes.

3.1.2 La terminologie employée dans ce chapitre

On recommande fortement de lire avant le présent chapitre, la section 2.4 La syntaxe et la grammaire de MathML à propos de la syntaxe et de la grammaire de MathML, laquelle contient des informations importantes concernant les notations et les conventions de MathML. En particulier, dans ce chapitre, le lecteur est censé connaître la terminologie XML de base décrite dans la section 2.4.2 Une introduction à la syntaxe XML et les notations et conventions pour les valeurs d'attribut décrites dans la section 2.4.4 Les valeurs des attributs MathML.

Le reste de la section introduit la terminologie et les conventions spécifiques de MathML employées dans ce chapitre.

3.1.2.1 Les types des éléments de présentation

Les éléments de présentation se rangent en deux classes. Les éléments atomiques représentent des symboles, des noms, des nombres, des étiquettes, etc., individuels. En général, les atomes contiennent seulement des caractères. Les seules exceptions sont constituées par l'élément d'alignement vertical malignmark, l'élément mglyph et les références d'entités. Les schémas de disposition bâtissent les expressions par morceaux et ils ne peuvent contenir que des éléments (hormis les blancs qu'ils ignorent). Il y a aussi quelques éléments vides qui servent uniquement en conjonction avec certains schémas de disposition.

Tous les symboles individuels dans une expression mathématique devraient être représentés par des éléments atomiques MathML. Les principaux types d'éléments atomiques MathML sont des identificateurs (par exemple, des variables ou des noms de fonction), des nombres et des opérateurs (y compris des délimiteurs, telles que les parenthèses, et des séparateurs, telles que les virgules). Il y a aussi des éléments atomiques qui représentent du texte ou du blanc, dont le rôle est plus esthétique qu'il ne revêt une signification mathématique, et qui représentent des chaînes littérales pour une compatibilité avec les systèmes de calcul algébrique. Remarquez, quoiqu'un élément atomique représente un seul symbole significatif (nom, nombre, étiquette, symbole mathématique, etc.), que ces symboles peuvent se composer de plusieurs caractères. Par exemple, les expressions sin et 24 sont représentés, respectivement, par les seuls atomes <mi>sin</mi> et <mn>24</mn>.

En notation traditionnelle des mathématiques, les expressions se construisent récursivement avec des expressions plus petites et, finalement, avec des symboles seuls, ces parties sont alors regroupées et positionnées à l'aide d'un jeu réduit de structures de notation, que l'on peut assimiler à des constructeurs d'expression. Dans MathML, les expressions se construisent de la même façon, et les schémas de disposition jouent le rôle de constructeurs d'expression. Le schéma de disposition définit la façon dont les sous-expressions sont assemblées en expressions plus grandes. La terminologie provient de ce que chaque schéma de disposition correspond à une façon différente de disposer ses sous-expressions afin de former une expression plus grande dans la composition traditionnelle des mathématiques.

3.1.2.2 La terminologie des autres classes d'éléments et leurs relations

La terminologie employée dans ce chapitre pour les classes spéciales d'éléments et pour les relations entre ces éléments est la suivante : les éléments de présentation sont les éléments MathML définis dans ce chapitre ; ces éléments sont listés dans la section 3.1.6 Le sommaire des éléments de présentation ; les éléments de contenu sont les éléments MathML définis dans le chapitre 4 Le balisage de contenu ; ces éléments sont listés dans la section 4.4 Les éléments de balisage du contenu.

Une expression MathML représente une seule instance de n'importe quel élément de présentation, à l'exception des éléments vides none ou mprescripts, ou une seule instance de n'importe quel élément de contenu admissible en contenu d'un élément de présentation (décrit dans la section 5.2.4 Le balisage de contenu inclus dans un balisage de présentation). Une sous-expression d'une expression E est une expression MathML faisant partie du contenu de E, que ce soit directement ou indirectement, c'est-à-dire, un sous-élément de E ou non.

Puisque les schémas de disposition attribuent une signification spéciale au nombre et/ou aux positions de leurs enfants, l'enfant d'un schéma de disposition est également appelé un argument de cet élément. En conséquence des définitions précédentes, le contenu d'un schéma de disposition se compose exactement d'une séquence de zéro à plusieurs éléments qui sont ses arguments.

3.1.3 Les arguments obligatoires

Plusieurs éléments décrits ici imposent un nombre spécifique d'arguments (toujours 1, 2 ou 3). Dans les descriptions détaillées de la syntaxe des éléments fournies après, le nombre des arguments obligatoires est indiqué implicitement en nommant les arguments aux diverses positions. Quelques éléments ont d'autres contraintes sur le nombre ou le type des arguments ; elles sont décrites avec l'élément individuel. Par exemple, certains éléments acceptent une séquence de zéro à plusieurs arguments, c'est-à-dire qu'ils peuvent apparaître sans argument du tout.

Remarquez que les éléments MathML codant un espace rendu comptent en tant qu'arguments des éléments au sein desquels ils apparaissent. Cf. la section 3.2.7 L'espacement (mspace) pour une discussion sur l'utilisation correcte de ces éléments pareils à des espaces.

3.1.3.1 Les éléments mrow inférés

Les éléments listés dans le tableau suivant comme nécessitant 1* argument (msqrt, mstyle, merror, menclose, mpadded, mphantom, mtd et math) acceptent en réalité un nombre quelconque d'arguments. Toutefois, si le nombre d'arguments est 0 ou supérieur à 1, ces éléments traitent leurs contenus comme un seul mrow inféré formé à partir de tous leurs arguments. Bien que l'élément math ne soit pas un élément de présentation, il est listé ci-dessous par souci d'exhaustivité.

Par exemple :

<mtd>
</mtd>

Cette expression est traitée comme si c'était :

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

Et, dans cet exemple :

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

L'expression est traitée comme si c'était :

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

Cette caractéristique permet aux données MathML de ne pas contenir nombre d'éléments mrow (et aux auteurs de ne pas s'en soucier) qui auraient été nécessaires sinon.

Dans les descriptions, dans ce chapitre, des comportements de rendu des éléments listés précédemment, on peut supposer que leur contenu se compose exactement d'une seule expression, qui peut être un élément mrow formé de cette façon à partir de leurs arguments. Toutefois, le compte de leurs argument est signalé dans le tableau suivant comme valant 1*, puisqu'on les comprend tout naturellement comme agissant sur une seule expression.

3.1.3.2 Le tableau de contrainte d'arguments

Par commodité, voici le tableau des contraintes de compte d'arguments pour chaque élément, et des rôles des arguments individuels lorsqu'ils sont distingués. Un compte d'argument de 1* indique un élément mrow inféré, comme décrit précédemment.

Élément Contrainte de compte d'arguments Rôles des arguments (différents selon leur position)
mrow 0 à plusieurs  
mfrac 2 numérateur dénominateur
msqrt 1*  
mroot 2 base indice
mstyle 1*  
merror 1*  
mpadded 1*  
mphantom 1*  
mfenced 0 à plusieurs  
menclose 1*  
msub 2 base indice
msup 2 base exposant
msubsup 3 base indice exposant
munder 2 base écriture dessous
mover 2 base écriture dessus
munderover 3 base écriture dessous écriture dessus
mmultiscripts 1 à plusieurs base (indice exposant)* [<mprescripts/> (préécriture en indice inférieur préécriture en exposant)*]
mtable 0 à plusieurs rangées 0 à plusieurs éléments mtr, ou mlabeledtr
mlabeledtr 1 à plusieurs une étiquette et 0 à plusieurs éléments mtd
mtr 0 à plusieurs 0 à plusieurs éléments mtd
mtd 1*  
maction 1 à plusieurs selon l'attribut actiontype
math 1*  

3.1.4 Les éléments avec des comportements spéciaux

Certains éléments de présentation MathML exhibent des comportement spéciaux dans certains contextes. Ces comportements spéciaux sont abordés dans les descriptions d'élément détaillées à suivre. Toutefois, par commodité, certaines classes de comportement spécial, les plus importantes, sont listées ici.

Certains éléments sont assimilés à des blancs ; ils sont définis dans la section 3.2.7 L'espacement (mspace). Cette définition affecte certaines des règles de rendu suggéré pour les éléments mo (section 3.2.5 Les opérateurs, les délimiteurs, les séparateurs ou les accents (mo)).

Certains éléments, par exemple msup, ont la capacité d'embellir les opérateurs qui sont leur premier argument. Ces éléments sont listés dans la section 3.2.5 Les opérateurs, les délimiteurs, les séparateurs ou les accents (mo), qui définit précisément ce qu'est un opérateur embelli et explique dans quelle mesure les règles de rendu suggéré pour les opérateurs étirables sont affectées.

Certains éléments traitent leurs arguments comme étant ceux d'un élément mrow inféré s'ils n'ont pas reçu exactement un argument, comme expliqué dans la section 3.1.3 Les arguments obligatoires.

Dans MathML 1.x, l'élément mtable pouvait inférer des éléments mtr autour de ses arguments, et l'élément mtr pouvait inférer des éléments mtd. Dans MathML 2.0, les éléments mtr et mtd doivent être explicites. Toutefois, pour la rétrocompatibilité, les moteurs de rendu peuvent continuer de gérer les éléments mtr et mtd inférés.

3.1.5 La disposition bidirectionnelle

L'expression disposition bidirectionnelle se rapporte au fait que les lettres de certaines écritures, notamment l'arabe et l'hébreu, s'écrivent de droite à gauche, et que les mêler à des nombres ou à des lettres issues d'écritures de gauche à droite occasionne des jets de texte en deux directions opposées dans la même ligne ou le même paragraphe.

Pour un texte ordinaire, la norme Unicode définit un algorithme bidirectionnel [Bidi]. Cet algorithme suppose que l'ordre des caractères en arrière-boutique est logique (c.à.d., dans l'ordre où ils seraient prononcés ou tapés) et définit comment les caractères sont réarrangés pour l'affichage, en fonction des propriétés des caractères et d'autres directives. Les langages HTML, CSS, XSL et SVG adoptent cet algorithme et fournissent des moyens de le contrôler via des balises ou des styles.

Dans les expressions mathématiques, une disposition bidirectionnelle est plus difficile que dans un texte. Cela est en partie dû à la nature bidimensionnelle de la disposition mathématique et au fait que les relations spatiales sont souvent employées, dans la notation mathématique, pour véhiculer une signification. Un autre facteur est l'absence de conventions établies pour la disposition bidirectionnelle des mathématiques, car relativement rare même dans les contextes d'écriture de droite à gauche.

Pour ces raisons, MathML 2.0 n'adopte qu'une version réduite de l'algorithme bidirectionnel Unicode, qui est décrite dans le reste de cette section.

3.1.5.1 La disposition bidirectionnelle dans les éléments atomiques

Pour les éléments atomiques MathML pouvant contenir du texte (mtext, mo, mi, mn et ms), on applique la partie implicite de l'algorithme bidirectionnel Unicode [Bidi] lorsque leur contenu est rendu visuellement (c'est-à-dire, les caractères sont réarrangés en fonction des propriétés des caractères). L'orientation de base est de gauche à droite.

La partie implicite de l'algorithme bidirectionnel Unicode est identique à une disposition directe de gauche à droite s'il n'y a qu'un seul caractère ou s'il n'y a aucun caractère de droite à gauche fort (c.à.d., aucun caractère arabe, hébreu ou assimilé).

Les applications ne sont pas obligées d'appliquer l'algorithme bidirectionnel Unicode si elles ne rendent pas les caractères de droite à gauche forts.

Veuillez remarquer que l'on devrait employer les points de code U+2135-U+2138 (SYMBOLE ALEF, SYMBOLE BÈT, SYMBOLE GUIMEL, SYMBOLE DALÈT) pour les nombres transfinis représentés en caractères hébreux. Ce sont des caractères de gauche à droite forts.

3.1.5.2 La disposition bidirectionnelle des formules mathématiques

MathML 2.0 n'aborde pas la disposition de droite à gauche, ou bidirectionnelle, dans les formules mathématiques. Seule la disposition de gauche à droite est reconnue. La disposition de droite à gauche des formules mathématiques pourra être abordée dans une future version MathML.

3.1.6 Le sommaire des éléments de présentation

3.1.6.1 Les éléments atomiques

mi identificateur
mn nombre
mo opérateur, délimiteur ou séparateur
mtext texte
mspace espacement
ms chaîne littérale
mglyph ajout de nouveaux glyphes de caractères à MathML

3.1.6.2 Les schémas généraux de disposition

mrow regroupe horizontalement un nombre quelconque de sous-expressions
mfrac forme une fraction d'après deux sous-expressions
msqrt forme une racine carrée (radical sans indice)
mroot forme un radical avec l'indice apparent
mstyle changement de style
merror enferme un message d'erreur de syntaxe provenant d'un préprocesseur
mpadded ajuste l'espacement autour du contenu
mphantom rend le contenu invisible mais préserve ses dimensions
mfenced entoure le contenu entre une paire de délimiteurs
menclose enferme le contenu avec un symbole étirable, tel qu'un signe de division longue

3.1.6.3 Les schémas d'écritures et de limites

msub accole un indice à une base
msup accole un exposant à une base
msubsup accole une paire indice-exposant à une base
munder accole une écriture dessous à une base
mover accole une écriture dessus à une base
munderover accole une paire (d'écritures) dessous-dessus à une base
mmultiscripts accole des préécritures et des indices tensoriels à une base

3.1.6.4 Les tables et les matrices

mtable une table ou une matrice
mlabeledtr une rangée dans une table ou une matrice avec une étiquette ou un numéro d'équation
mtr une rangée dans une table ou une matrice
mtd un élément dans une table ou une matrice
maligngroup et malignmark des marqueurs d'alignement

3.1.6.5 L'animation des expressions

maction associe des actions à une sous-expression

3.2 Les éléments atomiques

Les éléments atomiques du balisage de présentation sont destinés, dans leur ensemble, à représenter les plus petites unités de notation mathématique revêtant une signification. Les atomes sont grossièrement analogues aux mots d'un texte. Toutefois, à cause de la nature symbolique précise de la notation mathématique, les catégories et propriétés variées des éléments atomiques figurent en bonne place dans le balisage MathML. Par constraste, dans les données textuelles, les mots individuels ont rarement besoin d'être balisés ou stylés spécialement.

Les atomes se composent souvent d'un seul caractère indiquant un symbole mathématique. Dans d'autres cas, par exemple, les noms de fonction, il sont constitués de plusieurs caractères. En outre, puisque la notation mathématique traditionnelle fait grand usage de symboles qui se distinguent par leurs propriétés typographiques (par exemple, un g gothique en algèbre de Lie ou un x en caractère gras pour un vecteur), il faut s'assurer que les mécanismes de stylage respectent les propriétés typographiques qui véhiculent une signification. Par conséquent, les caractères, les atomes et les propriétés typographiques des symboles sont étroitement liés les uns aux autres dans MathML.

3.2.1 Les caractères MathML dans les éléments atomiques

Le balisage MathML admet les données textuelles uniquement comme partie du contenu d'un élément atomique. Seuls les blancs entre les éléments font exception et sont ignorés. Les éléments atomiques peuvent contenir n'importe quelle séquence de zéro à plusieurs caractères Unicode. En particulier, les atomes à contenu vide sont permis et leur rendu devrait typiquement être invisible, sans chasse hormis l'espacement supplémentaire normal pour le type d'élément atomique. Les éléments vides mspace et mglyph constituent des exceptions. La largeur de l'élément mspace dépend des valeurs de ses attributs. L'élément mglyph rend le caractère décrit par ses attributs.

Quoique toutes les données textuelles Unicode soient valides en contenu des éléments atomiques, MathML 2.0 distingue un sous-ensemble particulier de caractères Unicode 3.2 nommés, appelés caractères MathML dans ce document. La liste complète des caractères MathML est définie dans le chapitre 6 Les caractères, les entités et les fontes. On peut représenter les caractères MathML directement par des données textuelles Unicode, ou bien indirectement par des références d'entité numérique ou des références d'entité de caractère. Cf. le chapitre 6 Les caractères, les entités et les fontes pour une discussion au sujet des avantages et inconvénients des références de caractères numériques opposées aux références d'entités. On peut représenter les caractères mathématiques nouveaux ou les glyphes non standards des caractères MathML existants au moyen de l'élément mglyph.

Hormis l'élément mglyph, l'élément malignmark est le seul autre élément admis en contenu des atomes. Cf. la section 3.5.5 Les marqueurs d'alignement pour des précisions.

Les éléments atomiques (à part mspace et mglyph) devraient être rendus par leur contenu (c'est-à-dire, dans le cas d'un rendu visuel, comme une rangée horizontale formée des glyphes standards des caractères de leur contenu, espacés au plus près). Les algorithmes de rendu devraient aussi prendre en compte les attributs de style mathématique, dont la description suit, et modifier l'espacement autour selon les règles ou les attributs spécifiques de chaque type d'élément atomique.

3.2.1.1 Les caractères symboliques alphanumériques

Une grande partie des symboles mathématiques se compose d'identificateurs d'une seule lettre, habituellement utilisés comme noms de variable dans les formules. Les différentes variantes de police d'une lettre sont traitées comme des symboles distincts. Par exemple, un g gothique peut indiquer une algèbre de Lie, tandis qu'un g romain indique le groupe de Lie correspondant. Ces symboles pareils à des lettres ont traditionnellement une composition qui se différencie des mêmes caractères apparaissant dans un texte par des conventions d'espacement et de ligature différentes. Ces caractères doivent également être traités de façon particulière par les mécanismes de style, car les transformations de style arbitraires peuvent changer la signification d'une expression.

Pour toutes ces raisons, Unicode 3.1 ajoutera plus de neuf cents caractères symboliques alphanumériques mathématiques correspondant aux symboles pareils à des lettres. Ces caractères se trouvent dans le Plan multilingue complémentaire, ou PMC (N.D.T. SMP). Cf. le chapitre 6 Les caractères, les entités et les fontes pour plus d'informations. En tant que données Unicode valides, ces caractères sont admis dans MathML 2.0 et, puisque les outils et les polices pour ces caractères sont de plus en plus répandus, nous prévoyons que ce moyen prédominera pour indiquer des symboles pareils à des lettres.

Toutefois, en attendant que la gestion des caractères du PMC soit suffisamment répandue, il est toujours nécessaire de fournir un codage de remplacement en utilisant seulement le Plan multilingue de base, ou PMB (N.D.T. BMP) avec un balisage. MathML 2.0 définit une correspondance entre les éléments atomiques avec certaines combinaisons de données textuelles PMB et l'attribut mathvariant, et les atomes contenant des caractères symboliques alphanumériques mathématiques du PMC. Les applications de traitement acceptant les caractères du PMC sont tenues de traiter les combinaisons de caractères et d'attributs PMB correspondantes de façon identique. La section suivante discute plus en détails de l'attribut mathvariant, et une description technique complète des caractères correspondants est donnée dans la section 6.2.3 Les caractères symboliques alphanumériques mathématiques.

3.2.2 Les attributs de style mathématique communs des éléments atomiques

MathML 2.0 introduit quatre nouveaux attributs de style mathématique. Ces attributs sont valides sur tous les éléments atomiques de présentation, sauf les éléments mspace et mglyph, et sur aucun autre élément hormis mstyle. Ces attributs sont les suivants :

Nom Valeurs Valeur par défaut
mathvariant normal | bold | italic | bold-italic | double-struck | bold-fraktur | script | bold-script | fraktur | sans-serif | bold-sans-serif | sans-serif-italic | sans-serif-bold-italic | monospace normal (sauf sur <mi>)
mathsize small | normal | big | number v-unit héritée
mathcolor #rgb | #rrggbb | html-color-name héritée
mathbackground #rgb | #rrggbb | html-color-name héritée

Cf. la section 2.4.4 Les valeurs des attributs MathML concernant la terminologie et la notation employées pour les descriptions des valeurs d'attributs.

Les attributs de style mathématique définissent des classes logiques d'éléments atomiques. Chaque classe est conçue pour correspondre à une collection d'atomes symboliques, reliés typographiquement, qui possèdent une signification dans une expression mathématique donnée et nécessitent donc d'être distingués visuellement et protégés vis-à-vis des changements involontaires de style à l'échelle du document qui pourraient changer leur signification.

Quand le rendu MathML a lieu dans un environnement disposant de CSS, on peut assimiler les attributs de style mathématique à des sélecteurs prédéfinis pour les règles de style CSS. Cf. la section 7.1.5 L'utilisation de CSS avec MathML et l'Annexe G Exemple de feuille de style CSS pour MathML pour des précisions et un exemple de feuille de style CSS. Si CSS n'est pas disponible, la distinction visuelle des différentes classes logiques revient au mécanisme de style interne de l'application de rendu.

Sur un plan théorique, les moteurs de rendu ont toute liberté pour faire correspondre les attributs de style mathématique aux propriétés de rendu spécifiques. Toutefois, dans la pratique, les noms et valeurs des attributs de style mathématique suggèrent des propriétés typographiques évidentes et les moteurs de rendu devraient essayer de respecter ces interprétations naturelles autant que possible. Par exemple, on peut raisonnablement rendre un atome avec l'attribut mathvariant réglé à sans-serif dans la police Helvetica ou Arial. Par contre, on devrait éviter de rendre cet atome dans la police Times Roman car les conséquences à l'interprétation pourraient êtres graves.

Un problème se pose lorsque les interprétations naturelles des valeurs de l'attribut mathvariant ne sont logiques que pour certains caractères. Par exemple, le rendu d'un caractère alphabétique gothique (N.d.T. fraktur) ne se distingue pas nettement de celui d'un caractère Kanji "bold-italic". En général, les seuls cas où l'interprétation est claire sont exactement ceux correspondant aux caractères symboliques alphanumériques mathématiques PMC.

Par conséquent, on encourage très fortement les auteurs de feuille de style et les développeurs d'application à respecter strictement l'interprétation typographique évidente de l'attribut mathvariant quand il s'applique à des caractères ayant une contrepartie symbolique alphanumérique mathématique PMC. Dans tous les autres cas, il revient au moteur de rendu de déterminer, le cas échéant, quel effet aura l'attribut mathvariant. Par exemple, un moteur de rendu peut raisonnablement choisir d'afficher un atome contenant la référence d'entité &sum; (un caractère sans contrepartie PMC) dans une police grasse quand l'attribut mathvariant a la valeur "bold" ou "bold-fraktur", et de l'afficher dans une police romaine par défaut quand sa valeur est "fraktur". Ainsi que le montre cet exemple, les auteurs devraient éviter d'utiliser l'attribut mathvariant avec des caractères sans contreparties PMC, car leurs rendus seront peut-être inutiles ou imprévisibles.

Enfin, l'attribut mathvariant est cause d'un problème de redondance dont il faudra tenir compte comme cas particulier. Lorsqu'on utilise l'attribut mathvariant sur un élément mi contenant un seul caractère issu d'étendues spécifiques de données textuelles PMB, abordées dans la section 6.2.3 Les caractères symboliques alphanumériques mathématiques, le rendu final ne se distinguera pas visuellement de celui d'un élément mi sans attribut contenant le caractère PMC correspondant. C'est la raison pour laquelle MathML 2.0 impose aux applications de traitement de considérer ces deux représentations comme équivalentes. Cela constitue principalement un problème pour les applications permettant les recherches et/ou les tests d'égalité.

Les éléments atomiques admettent également les attributs id, xref, class et style pour la compatibilité avec les mécanismes de feuille de style, cf. la section 2.4.5 Les attributs communs à tous les éléments MathML. Néanmoins, on doit faire attention lorsqu'on utilise CSS généralement. On devrait tout particulièrement éviter de recourir à CSS pour produire des effets visuels qui altèrent la signification d'une équation, car MathML est utilisé dans beaucoup d'environnements non-CSS. De même, on devrait s'assurer que les transformations de style arbitraires à l'échelle du document n'affectent pas les expressions mathématiques au point d'en altérer la signification.

Puisque les expressions MathML sont souvent imbriquées dans un format textuel de données tel que XHTML, le texte alentour et le code MathML devront partager des attributs de rendu telle que la taille de la police, de sorte que le style des rendus soit compatible. Pour cette raison, les valeurs d'attributs agissant sur le rendu du texte sont, pour la plupart, héritées de l'environnement de rendu, comme l'indique la colonne Défaut du tableau précédent. (Dans les cas où le texte alentour et le code MathML sont rendus par des logiciels séparés, par exemple, par un navigateur et un module d'extension, il importe également que l'environnement de rendu fournisse au moteur de rendu MathML des informations supplémentaires, telle que la position de la ligne de base du texte alentour, qui ne sont pas définies par les attributs MathML). Toutefois, remarquez que MathML 2.0 ne définit pas de mécanisme selon lequel les informations de style sont héritées de l'environnement de rendu. Par exemple, un module d'extension de navigateur comptera peut-être entièrement sur le mécanisme d'héritage CSS et utilisera les propriétés CSS totalement résolues pour le rendu, tandis qu'une autre application consultera peut-être uniquement l'environnement de style au nœud racine puis utilisera ses propres règles internes d'héritage de style.

Pour la plupart, les moteurs de rendu MathML compteront probablement, à des degrés divers, sur d'autres algorithmes de traitement de style internes. En particulier, l'héritage de l'attribut mathvariant ne suit pas le modèle CSS. La valeur par défaut de cet attribut est "normal" (non italique) pour tous les atomes sauf pour mi. Pour les atomes mi, la valeur par défaut dépend du nombre de caractères du contenu de l'atome. (L'attribut à éviter fontslant a également ce comportement). Cf. la section 3.2.3 L'identifiant (mi) pour des précisions.

3.2.2.1 Les attributs de style à éviter sur les éléments atomiques

Les attributs de style MathML 1.01 listés ci-dessous sont à éviter dans MathML 2.0. Dans les environnements de rendu gérant CSS, il est préférable d'utiliser CSS pour contrôler les propriétés de rendu correspondant à ces attributs. Néanmoins, comme expliqué précédemment, on devrait généralement éviter de manipuler directement ces propriétés de rendu, quel que soit le moyen.

Si un nouvel attribut de style mathématique et des attributs à éviter conflictuels sont donnés simultanément, on devrait utiliser la nouvelle valeur d'attribut de style mathématique. Par exemple :

<mi fontweight='bold' mathvariant='normal'> a </mi>

Ce rendu-ci devrait se faire dans une police de graisse normale, et :

<mi fontweight='bold' mathvariant='sans-serif'> a </mi>

Ce rendu-là devrait se faire dans une police de graisse normale sans empattement. Dans l'exemple suivant :

<mi fontweight='bold' mathvariant='fraktur'> a1 </mi>

L'attribut mathvariant prime encore sur l'attribut fontweight, même si on ne devrait pas en général appliquer la valeur "fraktur" à un 1, puisqu'il n'y a aucun caractère symbolique alphanumérique mathématique PMC correspondant. En absence d'une police contenant des chiffres gothiques, la plupart des moteurs de rendu rendra probablement l'expression par un a gothique suivi d'un 1 romain.

Les nouveaux attributs de style mathématique priment aussi sur les valeurs des attributs de style à éviter héritées de MathML 1.01. Ainsi :

<mstyle fontstyle='italic'>
  <mi mathvariant='bold'> a </mi>
</mstyle>

Le rendu a lieu dans une police grasse droite et non dans une police grasse italique.

En même temps, les attributs MathML 1.01 ont encore un usage. Puisqu'ils correspondent directement aux propriétés de rendu nécessaires pour la disposition mathématique, ils sont très utiles pour décrire les règles et les algorithmes de disposition de MathML. Pour cette raison et pour la rétrocompatibilité, on continue de décrire les règles de rendu MathML suggérées dans ce chapitre dans les termes des propriétés de rendu décrites par ces attributs de style MathML 1.01.

Les attributs à éviter sont les suivants :

Nom Valeurs Valeur par défaut
fontsize number v-unit héritée
fontweight normal | bold héritée
fontstyle normal | italic normal (sauf sur <mi>)
fontfamily string | css-fontfamily héritée
color #rgb | #rrggbb | html-color-name héritée

L'attribut fontsize définit la taille de police voulue. La valeur v-unit représente une unité de longueur verticale (cf. la section 2.4.4.3 Les attributs compatibles avec CSS). L'unité la plus commune pour indiquer une taille de police dans une composition est le point pt.

Si la taille requise pour la police courante n'est pas disponible, le moteur de rendu devrait en faire une approximation de façon à obtenir le rendu en haute qualité le plus intelligible.

Beaucoup d'éléments MathML changent automatiquement la valeur de l'attribut fontsize chez certains de leurs enfants ; cf. la discussion à propos de l'attribut scriptlevel dans la section 3.3.4 Les changements de style (mstyle).

La valeur de l'attribut fontfamily devrait être le nom d'une police susceptible d'être disponible pour le moteur de rendu MathML, ou une information lui permettant de sélectionner une police d'une façon ou d'une autre ; les valeurs acceptables et leurs significations dépendent du moteur de rendu spécifique et de l'environnement de rendu utilisé, et elles ne sont pas définies par MathML (mais voir la remarque à suivre à propos de css-fontfamily). (Remarquez que le mécanisme du moteur de rendu pour récupérer des polices par leur nom peut être sensible à la casse).

Si la valeur de fontfamily n'est pas reconnue par un moteur de rendu MathML particulier, on ne devrait jamais considérer cela comme une condition d'erreur MathML ; le moteur de rendu devrait plutôt utiliser une police qui puisse représenter, de son point de vue, un substitut convenable de la police demandée, ou bien ignorer l'attribut et agir comme si aucune valeur n'avait été fournie.

Remarquez que l'utilisation de l'attribut fontfamily ne sera vraisemblablement pas portable d'un moteur de rendu MathML à l'autre. Notamment, on ne devrait jamais s'en servir pour essayer de reproduire l'effet d'un appel de caractère MathML non-ASCII (par exemple, en appelant un caractère d'une certaine police de symboles qui fait correspondre des caractères ordinaires à des glyphes de caractères non-ASCII). En corollaire de ce principe, les moteurs de rendu MathML devraient essayer de toujours produire des rendus intelligibles des caractères MathML listés dans le chapitre 6 Les caractères, les entités et les fontes, même lorsque ces caractères ne sont pas disponibles dans la famille de polices indiquée. Un tel rendu est toujours possible : en dernier recours, on peut rendre un caractère qui apparaît comme une référence d'entité de type XML en recourant à l'un des noms d'entité donnés pour le caractère en question dans le chapitre 6 Les caractères, les entités et les fontes.

La variable css-fontfamily se rapporte à une valeur légale de la propriété font-family de CSS, qui est une liste de noms de famille de polices, ou de types de police générique, séparés par des virgules, en ordre de préférence décroissante, comme cela est documenté en détails dans CSS [CSS2]. On encourage les moteurs de rendu MathML à adopter la syntaxe CSS pour indiquer les polices quand leur environnement de rendu le permet, même si par ailleurs ils ne gèrent pas CSS. (Cf. également la sous-section à propos des attributs compatibles avec CSS dans la section 2.4.4.3 Les attributs compatibles avec CSS).

3.2.2.2 Les attributs liés à la couleur

L'attribut mathcolor (et celui à éviter color) contrôle la couleur dans laquelle le contenu des atomes est rendu. En outre, hérité d'un élément mstyle ou de l'environnement de rendu d'une expression MathML, il contrôle la couleur de tous les autres dessins des éléments MathML, y compris les lignes ou les signes de radical susceptibles d'être dessinés par les éléments mfrac, mtable ou msqrt.

On peut définir les valeurs des attributs mathcolor, color, mathbackground et background comme une chaîne composée d'un caractère # suivi, sans espace intermédiaire, par les valeurs hexadécimales à un chiffre, ou bien à deux chiffres, des composantes rouge, vert et bleu, respectivement, de la couleur voulue, en utilisant le même nombre de chiffres pour chaque composante (ou encore par le mot-clé "transparent" dans le cas de l'attribut background). Les chiffres hexadécimaux sont insensibles à la casse. Les valeurs possibles à un chiffre s'étendent de 0 (composante absente) à F (composante entièrement présente) et à deux chiffres de 00 (composante absente) à FF (composante entièrement présente), la valeur à un chiffre x équivalant celle à deux chiffres xx (au lieu de x0). La notation x0 serait plus correcte strictement mais rendrait de façon désastreuse dans certains navigateurs.

On peut aussi fixer ces attributs avec un type de valeur html-color-name, dont la définition suit.

La syntaxe de couleur décrite précédemment constitue un sous-ensemble de la syntaxe des propriétés CSS color et background-color. La syntaxe de background-color constitue à son tour un sous-ensemble de la syntaxe complète de la propriété CSS background, qui permet également de définir, par exemple, une image de fond et sa répétition optionnelle. On utilise le nom d'attribut plus général background dans MathML pour faciliter les extensions éventuelles de la portée de l'attribut dans les futures versions de MathML.

On peut aussi définir les valeurs de couleur de l'un ou l'autre attribut comme valeur html-color-name, c'est-à-dire, en employant l'un des mots-clés de nom de couleur définis dans [HTML4] (aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white et yellow). Remarquez que les mots-clés de nom de couleur sont insensibles à la casse, contrairement à la plupart des mots-clés des valeurs d'attribut MathML, pour compatibilité avec CSS et HTML.

Les règles suggérées du rendu visuel MathML ne définissent pas l'étendue exacte des régions dont l'arrière-plan est affecté par l'utilisation de l'attribut background sur l'élément mstyle, hormis la chose suivante : lorsque le contenu de l'élément mstyle n'a aucune dimension négative et que la région occupée par son dessin n'est pas recouverte par un autre dessin à cause d'un espacement environnant négatif, alors cette région devrait s'étendre derrière la totalité du dessin qui rend le contenu de l'élément mstyle mais elle ne devrait pas s'étendre derrière le dessin de rendu d'une expression environnante. Ces règles ne définissent pas l'effet de recouvrement du dessin des régions provoqué par un espacement négatif sur l'étendue de la région affectée par l'attribut background.

3.2.3 Les identificateurs (mi)

3.2.3.1 Description

Un élément mi représente un nom symbolique, ou un texte arbitraire, qui devrait être rendu comme un identificateur. Les identificateurs comprennent les variables, les noms de fonction et les constantes symboliques.

Les identificateurs mathématiques ne sont pas tous représentés par des éléments mi, par exemple, on devrait représenter les variables écrites en indice ou en exposant en se servant, respectivement, des éléments msub ou msup. Réciproquement, on peut représenter un texte arbitraire jouant le rôle d'un terme (telle qu'une ellipse dans une série additionnée) en se servant d'un élément mi, comme illustré par un exemple de la section 3.2.6.4 Le mélange du texte et des mathématiques.

Rappelons que mi est un élément de présentation et, à ce titre, il indique seulement que son contenu devrait être rendu comme un identificateur. Dans la majorité des cas, le contenu d'un élément mi représentera effectivement un identificateur mathématique, tels qu'une variable ou un nom de fonction. Toutefois, comme indiqué au paragraphe précédent, la correspondance entre les notations à rendre comme des identificateurs et les notations effectivement destinées à représenter des identificateurs mathématiques n'est pas parfaite. Pour un élément dont la sémantique est assurée d'être celle d'un identificateur, cf. la description de l'élément ci dans le chapitre 4 Le balisage de contenu.

3.2.3.2 Attributs

Les éléments mi acceptent les attributs listés dans la section 3.2.2 Les attributs de style mathématique communs des éléments atomiques mais avec une valeur d'attribut par défaut différente dans un cas :

Nom Valeurs Valeur par défaut
mathvariant normal | bold | italic | bold-italic | double-struck | bold-fraktur | script | bold-script | fraktur | sans-serif | bold-sans-serif | sans-serif-italic | sans-serif-bold-italic | monospace (selon le contenu ; description à suivre)
fontstyle (à éviter) normal | italic (selon le contenu ; description à suivre)

Un moteur de rendu graphique typique rendrait un élément mi par les caractères composant son contenu, sans espacement supplémentaire autour des caractères (hormis l'espacement associé aux éléments voisins). La valeur par défaut des attributs mathvariant et fontstyle serait (typiquement) "normal" (non italique), à moins que le contenu ne se compose que d'un seul caractère, auquel cas ce serait la valeur "italic". Remarquez que cette règle des attributs mathvariant et fontstyle est spécifique des éléments mi ; la valeur par défaut des attributs mathvariant et fontstyle sur d'autres éléments atomiques MathML est "normal".

Remarquez que, pour déterminer les équivalences des caractères symboliques alphanumériques mathématiques (cf. la section 6.2.3 Les caractères symboliques alphanumériques mathématiques et la section 3.2.1.1 Les caractères symboliques alphanumériques), on devrait résoudre la valeur de l'attribut mathvariant en premier, y compris le comportement par défaut particulier décrit précédemment.

3.2.3.3 Exemples

<mi> x </mi>
<mi> D </mi>
<mi> sin </mi>
<mi mathvariant='script'> L </mi>
<mi></mi>

Un élément mi sans contenu est permis ; un éditeur d'expressions, par exemple, pourrait utiliser le code <mi></mi> pour représenter, dans une expression MathML, la position d'un terme obligatoire (conformément à la syntaxe conventionnelle des mathématiques) mais qui n'en contient pas encore.

Les identificateurs comprennent les noms de fonction tel que sin. On devrait écrire les expressions, telle que sin x, en utilisant l'opérateur &ApplyFunction; (dont le nom abrégé est &af;) comme illustré par l'exemple suivant ; cf. également la discussion à propos des opérateurs invisibles dans la section 3.2.5 Les opérateurs, les délimiteurs, les séparateurs ou les accents (mo).

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

On peut également représenter un texte arbitraire à traiter comme un terme par un élément mi, comme suit :

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

Lorqu'on utilise un élément mi dans ces situations exceptionnelles, fixer explicitement la valeur de l'attribut fontstyle peut donner de meilleurs résultats que le comportement par défaut de certains moteurs de rendu.

On devrait représenter les noms des constantes symboliques par des éléments mi :

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

Utiliser des références d'entité spéciales pour ces constantes peut simplifier l'interprétation des éléments de présentation MathML. Cf. le chapitre 6 Les caractères, les entités et les fontes pour une liste complète des références d'entités de caractères dans MathML.

3.2.4 Les nombres (mn)

3.2.4.1 Description

Un élément mn représente un littéral numérique ou d'autres données à rendre comme littéral numérique. D'une manière générale, un littéral numérique est une séquence de chiffres, avec éventuellement un point décimal, représentant un entier non signé ou un nombre réel.

Le concept mathématique d'un nombre peut être assez subtil et compliqué, selon le contexte. Par conséquent, les nombres mathématiques ne devraient pas tous être représentés par des éléments mn ; les exemples suivants montre les nombres mathématiques qu'il faudrait représenter différemment, à savoir les nombres complexes, les rapports de nombres sous forme de fractions et les noms de constantes numériques.

Inversement, puisque mn est un élément de présentation, il y a quelques situations où on souhaitera inclure un texte arbitraire dans le contenu d'un élément mn à rendre simplement comme un littéral numérique, bien que l'interprétation de ce contenu comme un nombre puisse être ambiguë conformément à un codage standard particulier des nombres en tant que séquences de caractères. Toutefois, en règle générale, on devrait réserver l'élément mn aux situations où son contenu servira effectivement à représenter une quantité numérique d'une manière ou d'une autre. Pour un élément dont la sémantique est assurée d'être celle d'un type particulier de nombre mathématique, cf. la description de l'élément cn dans le chapitre 4 Le balisage de contenu.

3.2.4.2 Attributs

Les éléments mn acceptent les attributs listés dans la section 3.2.2 Les attributs de style mathématique communs des éléments atomiques.

Un moteur de rendu typique rendrait un élément mn par les caractères de son contenu, sans espacement supplémentaire autour des caractères (hormis l'espacement des éléments voisins tel que mo). À la différence de l'élément mi, les éléments mn sont (typiquement) rendus par défaut dans une police non italique, indépendamment de leur contenu.

3.2.4.3 Exemples

<mn> 2 </mn>
<mn> 0.123 </mn>
<mn> 1,000,000 </mn>
<mn> 2.1e10 </mn>
<mn> 0xFFEF </mn>
<mn> MCMLXIX </mn>
<mn> vingt-et-un </mn>

3.2.4.4 Les nombres qu'on ne devrait pas écrire seulement avec l'élément mn

Beaucoup de nombres mathématiques devraient être représentés en utilisant d'autres éléments de présentation et pas uniquement des éléments mn ; cela comprend les nombres complexes, les rapports de nombres sous forme de fractions et les noms des constantes numériques. Voici des exemples de représentation MathML pour ces nombres :

<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.5 Les opérateurs, les délimiteurs, les séparateurs ou les accents (mo)

3.2.5.1 Description

Un élément mo représente un opérateur ou tout ce qui devrait se rendre comme un opérateur. En général, les conventions de notation pour les opérateurs mathématiques sont assez compliquées, et MathML offre donc un mécanisme relativement sophistiqué pour définir le comportement de rendu d'un élément mo. Par conséquent, dans MathML, la liste des choses devant se rendre comme un opérateur comprend un certain nombre de notations qui ne sont pas des opérateurs mathématiques au sens ordinaire. Hormis les opérateurs ordinaires avec des formes infixées, préfixées ou suffixées, cette liste comprend des caractères de délimitation tels que les accolades, les parenthèses et les traits des valeurs absolues, des séparateurs tels que la virgule et le point-virgule, et des accents mathématiques tels que le trait ou le tilde sur un symbole.

Le terme opérateur tel qu'il est employé dans ce chapitre désigne tout symbole, ou notation, devant se rendre comme un opérateur, et qui est donc représentable par un élément mo. C'est-à-dire, le terme opérateur englobe tous les opérateurs ordinaires, les délimiteurs, les séparateurs et les accents, sauf indication contraire ou autre signification d'après le contexte.

Tous ces symboles sont représentés dans MathML par des éléments mo car ils sont soumis essentiellement aux mêmes attributs et règles de rendu ; le cas échéant, les distinctions subtiles du rendu de ces classes de symboles sont gérées par les attributs booléens fence, separator et accent afin de discriminer, respectivement, les délimiteurs, les séparateurs et les accents.

Une caractéristique clé de l'élément mo tient au fait que les valeurs par défaut de ses attributs sont fixées au cas-par-cas d'après un dictionnaire d'opérateurs comme expliqué ensuite. En particulier, les valeurs par défaut des attributs fence, separator et accent pourront se trouver dans le dictionnaire d'opérateurs et n'auront pas besoin d'être indiquées sur chaque élément mo.

Remarquez que certains opérateurs mathématiques ne sont pas représentés par des éléments mo seuls mais par des éléments mo embellis, par exemple, avec des exposants environnants ; cf. les précisions qui suivent. Inversement, en tant qu'éléments de présentation, les éléments mo peuvent contenir un texte arbitraire, même quand ce texte n'est pas censé être interprété comme un opérateur ; cf., par exemple, la discussion intitulée Le mélange du texte et des mathématiques dans la section 3.2.6 Le texte (mtext). Cf. également le chapitre 4 Le balisage de contenu pour les définitions des éléments de contenu MathML assurés d'avoir une sémantique d'opérateur mathématique spécifique.

3.2.5.2 Attributs

Les éléments mo acceptent les attributs listés dans la section 3.2.2 Les attributs de style mathématique communs des éléments atomiques et les autres attributs listés ici. Pour la plupart, les attributs obtiennent leurs valeurs par défaut auprès du dictionnaire, cf. la section 3.2.5.7.1 Le dictionnaire d'opérateurs dont la description suit dans cette section. Si le dictionnaire ne contient aucune entrée pour un élément mo donné, c'est la valeur par défaut donnée ici entre parenthèses qui sera utilisée.

Nom Valeurs Valeur par défaut
form prefix | infix | postfix fixée selon la position de l'opérateur dans un élément mrow (la règle suit) ; utilisée avec le contenu d'un élément mo pour indexer le dictionnaire d'opérateurs
fence true | false fixée par le dictionnaire (false)
separator true | false fixée par le dictionnaire (false)
lspace number h-unit | namedspace fixée par le dictionnaire (thickmathspace)
rspace number h-unit | namedspace fixée par le dictionnaire (thickmathspace)
stretchy true | false fixée par le dictionnaire (false)
symmetric true | false fixée par le dictionnaire (true)
maxsize number [ v-unit | h-unit ] | namedspace | infinity fixée par le dictionnaire (infinity)
minsize number [ v-unit | h-unit ] | namedspace fixée par le dictionnaire (1)
largeop true | false fixée par le dictionnaire (false)
movablelimits true | false fixée par le dictionnaire (false)
accent true | false fixée par le dictionnaire (false)

La valeur h-unit représente une unité de longueur horizontale et la valeur v-unit une unité de longueur verticale (cf. la section 2.4.4.2 Les attributs avec des unités). Le type namedspace prend l'une des valeurs suivantes : "negativeveryverythinmathspace", "negativeverythinmathspace", "negativethinmathspace", "negativemediummathspace", "negativethickmathspace", "negativeverythickmathspace", "negativeveryverythickmathspace", "veryverythinmathspace", "verythinmathspace", "thinmathspace", "mediummathspace", "thickmathspace", "verythickmathspace" ou "veryverythickmathspace". On peut fixer ces valeurs en se servant de l'élément mstyle, comme cela est précisé dans la section 3.3.4 Les changements de style (mstyle).

Si aucune unité n'est fournie avec les valeurs des attributs maxsize ou minsize, ce nombre est un multiplicateur de la taille normale de l'opérateur dans la direction (ou les directions) où il s'étire. D'autres explications à propos de ces attributs sont fournies après.

Les moteurs de rendu graphiques typiques rendent tous les éléments mo par les caractères composant leurs contenus, avec un espacement supplémentaire autour de l'élément déterminé d'après les attributs listés précédemment. Les règles précises pour déterminer l'espacement de l'opérateur dans les rendus visuels sont décrites dans une sous-section suivante. Comme toujours, MathML n'impose aucun rendu spécifique et ces règles sont des suggestions pratiques aux développeurs.

Les moteurs de rendu ne disposant pas de polices complètes pour le jeu de caractères MathML peuvent, dans certains cas, choisir de ne pas rendre un élément mo par les caractères exacts de son contenu. Par exemple, il pourrait rendre l'expression <mo> &le; </mo> par  <=  dans un terminal. Toutefois, en règle générale, les moteurs de rendu devraient essayer de rendre le contenu d'un élément mo aussi littéralement que possible. Il faudrait donc rendre différemment les expressions <mo> &le; </mo> et <mo> &lt;= </mo> (la première par un seul caractère, c.à.d. le signe inférieur à égal à, et la seconde par la séquence de deux caractères <=).

3.2.5.3 Exemples avec des opérateurs ordinaires

<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>
<mo mathvariant='bold'> + </mo>

3.2.5.4 Exemples avec des délimiteurs et des séparateurs

Remarquez que les éléments mo dans ces exemples ne nécessitent pas d'attributs fence ou separator explicites puisqu'on peut les obtenir auprès du dictionnaire d'opérateurs (dont la description suit). On pourrait également coder certains de ces exemples à l'aide de l'élément mfenced, cf. la section 3.3.8 Les expressions comprises entre une paire de délimiteurs (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.5.5 Les opérateurs invisibles

Certains opérateurs, invisibles dans la notation mathématique traditionnelle, devraient être représentés par des références d'entités spécifiques dans les éléments mo, et non par rien. Les références d'entités utilisées pour ces opérateurs invisibles sont les suivantes :

Nom entier Nom abrégé Exemples d'utilisation
&InvisibleTimes; &it; xy
&ApplyFunction; &af; f(x) sin x
&InvisibleComma; &ic; m12

Les représentations MathML des exemples du tableau précédent sont les suivantes :

<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>

Les raisons pour lesquelles on utilise des éléments mo spécifiques pour les opérateurs invisibles sont les suivantes :

Par exemple, un moteur de rendu sonore pourrait rendre l'expression f(x) (comme dans l'exemple précédent) en disant f de x mais pourrait employer fois pour rendre xy. Bien que le rendu doive toujours être différent en fonction de la structure des éléments voisins (parfois en omettant complètement le de ou le fois), la tâche du moteur de rendu sera beaucoup plus facile avec un élément mo différent pour chaque opérateur invisible.

3.2.5.6 Les noms des autres opérateurs spéciaux

MathML inclut aussi l'entité &DifferentialD; qui, dans un élément mo, sert à représenter l'opérateur différentiel indiqué habituellement par d. Les raisons d'utiliser explicitement cette entité spéciale sont similaires à celles pour les entités spéciales des opérateurs invisibles décrits dans la section précédente.

3.2.5.7 Le détail des règles de rendu des éléments mo

Les comportements typiques du rendu visuel des éléments mo étant plus complexes que ceux des autres éléments atomiques MathML, leurs règles de rendu sont donc décrites dans cette sous-section distincte.

Remarquez, comme pour toutes les règles de rendu MathML, que celles-ci sont des suggestions et non des obligations. En outre, on n'essaye pas de définir entièrement le rendu mais plutôt de donner suffisamment d'informations afin que l'effet attendu pour les divers attributs de rendu soit aussi clair que possible.

Le dictionnaire d'opérateurs

Beaucoup de symboles mathématiques, tels que le signe de l'intégrale, le signe plus ou les parenthèses, ont un emploi bien établi, prévisible et traditionnel dans la notation. En général, cette utilisation se résume à certaines valeurs d'attribut par défaut d'éléments mo avec des contenus spécifiques et avec un attribut form spécifique. Puisque ces valeurs par défaut varient d'un symbole à l'autre, MathML prévoit que les moteurs de rendu auront un dictionnaire d'opérateurs pour les attributs par défaut des éléments mo (cf. l'Annexe F Le dictionnaire d'opérateurs) indexé par le contenu et l'attribut form de chaque élément mo. Si un élément mo n'est pas listé dans le dictionnaire, on devrait utiliser les valeurs par défaut du tableau des attributs des éléments mo, données entre parenthèses, puisque ces valeurs sont typiquement acceptables pour un opérateur générique.

Certains opérateurs sont surchargés, au sens où ils peuvent apparaître en plusieurs formes (préfixée, infixée ou suffixée), avec éventuellement des propriétés de rendu différentes pour chaque forme. Par exemple, le caractère + peut être un opérateur préfixe ou bien infixe. Un moteur de rendu visuel ajoutera typiquement un espace de chaque côté d'un opérateur infixe, tandis qu'il en ajoutera seulement à gauche d'un opérateur préfixe. L'attribut form permet d'indiquer quelle forme utiliser si plusieurs formes étaient possibles d'après le dictionnaire d'opérateurs et si la valeur par défaut décrite précédemment ne convenait pas.

La valeur par défaut de l'attribut form

Il n'est habituellement pas nécessaire de définir explicitement l'attribut form, puisqu'il existe des règles heuristiques efficaces permettant d'en déduire la valeur d'après le contexte. S'il n'est pas indiqué et que plusieurs formes sont possibles dans le dictionnaire d'un élément mo avec un contenu donné, le moteur de rendu devra choisir la forme à utiliser selon les règles suivantes (mais voir l'exception des opérateurs embellis décrite ensuite) :

Remarquez que ces règles se rapportent à l'élément mrow où se trouve l'élément mo. Dans certaines situations, cet élément mrow sera peut-être un mrow implicite présent autour des arguments d'un élément tel que msqrt ou mtd.

Les délimiteurs ouvrants (à gauche) devraient être définis par form="prefix" et les délimiteurs fermant (à droite) par form="postfix" ; les séparateurs sont habituellement infixés, mais pas toujours, selon leur entourage. Comme pour les opérateurs ordinaires, ces valeurs ne nécessitent habituellement pas de définition explicite.

Si l'opérateur n'apparaît pas dans le dictionnaire avec la forme indiquée, le moteur de rendu devrait utiliser l'une des formes qui y sont disponibles, dans l'ordre de préférence suivant : forme infixée, forme suffixée et forme préfixée ; si aucune forme n'est disponible pour le contenu de l'élément mo en question, le moteur de rendu devrait utiliser les valeurs par défaut données entre parenthèses dans le tableau des attributs des éléments mo.

L'exception des opérateurs embellis

Il existe une exception aux règles précédentes pour choisir la valeur par défaut de l'attribut form d'un élément mo. Un élément mo qui est embelli par un ou plusieurs éléments imbriqués, des exposants, des indices, du texte ou des blancs environnants, ou par des changements de style se comporte différemment. C'est la position de l'opérateur embelli en entier (cf. la définition précise suivante) dans un élément mrow qui est examinée selon les règles précédentes et son espacement environnant qui est affecté par sa forme, et non l'élément mo nucléaire ; par contre, les attributs qui influencent l'espacement environnant proviennent de l'élément mo nucléaire (ou de l'entrée de dictionnaire de cet élément).

Par exemple, on devrait considérer la partie +4 dans l'expression a+4b comme un opérateur infixe dans son entier, du fait de sa position au milieu d'un élément mrow, mais ses attributs de rendu devraient provenir de l'élément mo représentant le caractère + ou, s'ils ne sont pas explicites, de l'entrée du dictionnaire d'opérateurs de <mo form="infix"> + </mo>. La définition exacte d'un opérateur embelli est l'une des suivantes :

Remarquez que cette définition permet l'embellissement imbriqué seulement s'il n'y a aucun élément englobant intermédiaire hormis ceux de la liste précédente.

Les règles précédentes pour choisir les formes des opérateurs et pour définir les opérateurs embellis ont été établies afin que l'auteur n'ait pas besoin de définir un attribut form dans tous les cas ordinaires.

Les justifications des définitions des opérateurs embellis

Les remarques suivantes sont incluses pour justifier certains aspects des définitions précédentes mais elles ne devraient pas avoir d'importance pour la majorité des utilisateurs de MathML.

Un élément mfrac inclus fait office d'embellisseur dans le cadre de la notation commune pour un opérateur différentiel :

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

Puisque la définition d'un opérateur embelli influence l'utilisation des attributs lié à l'étirement, il est important qu'elle inclut les délimiteurs embellis ainsi que les opérateurs ordinaires ; elle s'applique donc à tous les élément mo.

Remarquez qu'un élément mrow avec un seul argument est un opérateur embelli si, et seulement si, son argument est un opérateur embelli. C'est parce qu'un élément mrow avec un seul argument doit être équivalent en tous points à cet argument seul (comme cela est expliqué dans la section 3.3.1 Le regroupement horizontal des sous-expressions (mrow)). Un élément mo qui est le seul argument d'un élément mrow déterminera la valeur par défaut de son attribut form par rapport à la position de cet élément mrow, le cas échéant, dans un élément mrow environnant (peut-être inféré), plutôt que par rapport à sa propre position dans l'élément mrow dont c'est le seul argument.

Remarquez que, dans la définition précédente, chaque élément mo est défini comme embelli, c'est-à-dire qu'on peut assimiler (et mettre en œuvre dans les moteurs de rendu) un opérateur embelli à une classe spéciale d'expressions MathML, dont l'élément mo représente un cas particulier.

L'espacement autour d'un opérateur

On peut indiquer directement la quantité d'espace à ajouter autour d'un opérateur (ou d'un opérateur embelli) lorsqu'il apparaît dans un élément mrow avec les attributs lspace et rspace. Ces valeurs sont exprimées en em si aucune unité n'est fournie. Par convention, les opérateurs qui tendent à une association étroite avec leurs arguments ont des valeurs d'espacement plus petites que les opérateurs qui tendent à une association moindre. Le dictionnaire d'opérateurs intégré à un moteur de rendu MathML devrait suivre cette convention. En TEX, il n'y a que les trois valeurs typiques suivantes : 3/18em, 4/18em et 5/18em. MathML n'impose pas ces limites.

Certains moteurs de rendu pourront choisir de n'utiliser aucun espacement autour de la plupart des opérateurs apparaissant en indice ou en exposant, comme dans TEX.

Les moteurs de rendu non graphiques devraient traiter de façon analogue les attributs d'espacement et les autres attributs de rendu décrits ici pour leur médium de rendu. Par exemple, un plus grand espacement pourrait se traduire par une pause plus longue dans un rendu sonore.

3.2.5.8 L'étirement des opérateurs, des délimiteurs et des accents

Quatre attributs déterminent si et comment un opérateur (peut-être embelli) s'étire afin de correspondre à la taille des autres éléments : stretchy, symmetric, maxsize et minsize. Si un opérateur a un attribut tel que stretchy="true", alors celui-ci (c'est-à-dire, chaque caractère de son contenu) obéit aux règles d'étirement listées après, en fonction des contraintes imposées par les polices et par le système de rendu des polices. En pratique, un moteur de rendu typique sera seulement capable d'étirer un jeu réduit de caractères et pourra, très probablement, seulement générer un jeu discret des corps de caractère.

Il n'y a aucune disposition, dans MathML, permettant d'indiquer dans quelle direction (horizontale ou verticale) étirer un caractère particulier, ou un opérateur ; mieux, pour stretchy="true", il devrait être étiré dans chaque direction où l'étirement est possible. (Les moteurs de rendu typiques peuvent étirer la plupart des caractères dans une diretion au plus mais quelques-uns peuvent étirer certains caractères, telles que les flèches diagonales, indépendamment dans les deux directions).

Les attributs minsize et maxsize limitent l'ampleur de l'étirement (dans l'une ou l'autre direction). Ces deux attributs se présentent comme des multiplicateurs de la dimension normale de l'opérateur dans la direction (ou les directions) d'étirement, ou comme des dimensions absolues lorsque leurs valeurs ont des unités. Par exemple, si un caractère a un attribut telq que maxsize="3", alors il peut croître jusqu'à trois fois au plus sa dimension normale (non étirée).

L'attribut symmetric détermine si la hauteur et la profondeur, au-dessus et en-dessous de l'axe du caractère, doivent être égales (par un forçage de la hauteur ou de la profondeur au maximum des deux). Par exemple, une situation où on pourrait fixer symmetric="false" est celle de parenthèses autour d'une matrice non alignée sur l'axe, ce qui se produit fréquemment lorsqu'on multiplie des matrices non carrées. Auquel cas, on veut que les parenthèses s'étirent afin de couvrir la matrice, alors qu'un étirement symétrique aurait forcé les parenthèses à dépasser sur un bord de la matrice. L'attribut symmetric ne s'applique qu'aux caractères étirables verticalement (sinon il est ignoré).

Si un élément mo étirable est embelli (comme défini précédemment dans cette section), l'élément mo nucléaire s'étire jusqu'à une dimension déterminée par le contexte de l'opérateur embelli dans son entier, c'est-à-dire, à la même dimension que si les embellissements étaient absents. Par exemple (cf. ci-dessous), les parenthèses (qui seraient typiquement réglées comme étant étirables par le dictionnaire d'opérateurs) seront l'une et l'autre étirées jusqu'à une dimension identique, la même qu'elles auraient eu sans le trait en-dessous et le trait au-dessus d'elles, et elles couvriront en plus le même intervalle vertical :

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

Remarquez que cela signifie que les règles d'étirement, données après, se rapportent au contexte de l'opérateur embelli dans son entier, et pas uniquement à l'élément mo.

Exemple d'attributs étirables

Voici une façon de régler la dimension maximale d'une parenthèse afin qu'elle ne grandisse pas même pour une valeur par défaut stretchy="true".

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

Cet exemple devrait se rendre par (\frac{a}{b}) par opposition au rendu par défaut \left(\frac{a}{b}\right).

Remarquez que chaque parenthèse est dimensionnée indépendamment ; si l'une seulement avait maxsize="1", leurs dimensions rendues seraient différentes.

Les règles d'étirement vertical

Pour la plupart, les délimiteurs ouvrants et fermants communs sont définis, dans le dictionnaire d'opérateurs, pour s'étirer verticalement par défaut. Les opérateurs &sum;, &int;, / et les flèches verticales s'étirent aussi verticalement par défaut.

Dans le cas d'un opérateur étirable dans une cellule de table (c.à.d., dans un élément mtd), les règles précédentes supposent que chaque cellule de la rangée de table contenant l'opérateur étirable couvre exactement une rangée. (De manière équivalente, l'attribut rowspan est censé avoir la valeur "1" pour toutes les cellules dans la rangée de table, y compris la cellule contenant l'opérateur). Quand ce n'est pas le cas, l'opérateur devrait seulement s'étirer verticalement pour couvrir les cellules de table qui sont entièrement dans l'ensemble de rangées de table que couvre la cellule de l'opérateur. Les cellules de table qui s'étendent dans des rangées non couvertes par la cellule de l'opérateur étirable devraient être ignorées. Cf. la section 3.5.4.2 Attributs pour des précisions à propos de l'attribut rowspan.

Les règles d'étirement horizontal

Pour la plupart, les flèches horizontales et quelques accents s'étirent horizontalement par défaut.

Dans le cas d'un opérateur dans une cellule de table (c.à.d., dans un élément mtd), les règles précédentes supposent que chaque cellule de la colonne de table contenant l'opérateur étirable couvre exactement une colonne. (De manière équivalente, l'attribut columnspan est censé avoir la valeur "1" pour toutes les cellules de table dans la rangée de table, y compris la cellule contenant l'opérateur). Quand ce n'est pas le cas, l'opérateur devrait seulement s'étirer horizontalement pour couvrir les cellules de la table qui sont entièrement dans l'ensemble des colonnes de table que couvre la cellule de l'opérateur. Les cellules de table qui s'étendent dans des colonnes non couvertes par la cellule de l'opérateur étirable devraient être ignorées. Cf. la section 3.5.4.2 Attributs pour des précisions à propos de l'attribut rowspan.

Les règles d'étirement horizontal s'appliquent aux éléments mtd afin de permettre aux flèches de s'étirer dans les diagrammes commutatifs disposés à l'aide d'un élément mtable. Les règles d'étirement horizontal incluent les écritures pour que les exemples comme le suivant puissent fonctionner :

<mrow>
  <mi> x </mi>
  <munder>
    <mo> &RightArrow; </mo>
    <mtext> s'applique à </mtext>
  </munder>
  <mi> y </mi>
</mrow>

Cet exemple s'affichera par : x \widearrow{\mathrm{maps~to}} y.

Les règles communes de l'étirement vertical et de l'étirement horizontal

Lorsqu'un opérateur étirable n'est pas obligé de s'étirer (c'est-à-dire, s'il ne se trouve pas à l'une des positions mentionnées précédemment ou si aucune autre expression ne nécessite un étirement de l'opérateur à sa dimension), alors il prend la dimension stantard (non étirée) déterminée par la police et son corps courant.

Lorsqu'un opérateur étirable est obligé de s'étirer, mais que toutes les autres expressions dans l'élément conteneur (cf. précédemment) décrit ci-dessus) sont également étirables, alors tous les éléments qui peuvent l'être devraient croître jusqu'au maximum des dimensions non étirées normales de tous les éléments de l'objet conteneur. Si la valeur des attributs minsize ou maxsize les en empêche, alors c'est cette valeur (minsize ou maxsize) qui sera utilisée.

Par exemple, dans un élément mrow ne contenant rien d'autre que des opérateurs étirables verticalement, chaque opérateur devrait s'étirer au maximum de toutes leurs dimensions non étirées normales, tant que la valeur d'un autre attribut ne contredise ce comportement. Bien sûr, en raison des limitations des polices ou du rendu d'une police, les dimensions étirées finales seront peut-être seulement approximatives à défaut d'être les mêmes.

3.2.5.9 Les autres attributs de l'élément mo

L'attribut largeop indique si l'opérateur devrait ou non être dessiné plus grand que la normale si displaystyle="true" dans l'environnement de rendu courant. Cela correspond à peu près à la valeur \displaystyle du paramètre de style de TEX. MathML utilise deux attributs, displaystyle et scriptlevel, pour contrôler les caractéristiques de présentation orthogonales que TEX code par un seul attribut style avec les valeurs \displaystyle, \textstyle, \scriptstyle et \scriptscriptstyle. Ces attributs sont abordés plus en détails dans la section 3.3.4 Les changements de style (mstyle) décrivant l'élément mstyle. Remarquez qu'on peut définir ces attributs directement dans la balise ouvrante d'un élément mstyle mais pas sur la plupart des autres éléments. Les opérateurs &int; et &prod; sont des exemples de ce type d'agrandissement.

L'attribut movablelimits définit si les écritures dessous et dessus, attachées à l'élément mo en question, devraient être dessinées en indice et en exposant pour displaystyle="false". La définition movablelimits="false" indique de ne jamais représenter les écritures dessous et dessus par des indices et des exposants. En général, l'attribut displaystyle a la valeur "true" pour les mathématiques affichées et la valeur "false" pour les mathématiques en-ligne. L'attribut displaystyle a également la valeur "false" par défaut dans les tables, les écritures et les fractions, plus quelques autres cas particuliers décrits dans la section 3.3.4 Les changements de style (mstyle). Les opérateurs avec movablelimits="true" s'afficheront donc avec des limites (c.à.d., des écritures dessous et dessus) pour les mathématiques affichées, et avec des indices et des exposants pour les mathématiques en-ligne, les tables, les écritures, et ainsi de suite. Comme exemple, les opérateurs sum, prod et lim sont typiquement définis avec movablelimits="true".

L'attribut accent détermine s'il faut traiter ou non par défaut cet opérateur comme un accent (marque diacritique) lorsqu'il apparaît dans une écriture dessous ou dessus ; cf. les éléments munder, mover et munderover (section 3.4.4 L'écriture dessous (munder), section 3.4.5 L'écriture dessus (mover) et section 3.4.6 Les paires dessous-dessus (munderover)).

L'attribut separator peut influencer le saut de ligne automatique chez les moteurs de rendu qui placent les opérateurs infixes ordinaires plutôt au début de la ligne coupée qu'à la fin (c'est-à-dire, qui permettent d'éviter les sauts de ligne juste après ces opérateurs), parce qu'on devrait éviter un saut de ligne juste avant un séparateur mais il est acceptable juste après.

L'attribut fence n'a aucune influence sur les règles de rendu suggéré présentées ici, et il n'est pas indispensable pour rendre correctement la notation traditionnelle à l'aide de ces règles. On le fournit de sorte que des moteurs de rendu MathML spécifiques, tout particulièrement les moteurs de rendu non visuels, disposent d'une option afin d'utiliser cette information.

3.2.6 Le texte (mtext)

3.2.6.1 Description

L'élément mtext sert à représenter un texte arbitraire à rendre en tant que tel. En général, on emploie l'élément mtext pour un texte de commentaire.

Remarquez qu'un texte dont le rôle de notation est clairement défini sera peut-être mieux balisé en recourant à un élément mi ou mo ; cet aspect est précisé après.

On peut se servir d'un élément mtext pour contenir des blancs interprétables, c'est-à-dire, des caractères invisibles destinés à modifier le positionnement des éléments environnants. Pour les médias non graphiques, ces caractères auront un effet analogue, comme introduire des temporisations positives ou négatives ou modifier le rythme d'un moteur de rendu sonore. Ils sont différents des blancs éventuels dans la source MathML, qui se composent d'espaces, de sauts de ligne, de tabulations ou de retours chariot ; les blancs directement présents dans la source sont rognés et se rétractent (cf. la section 2.4.6 La rétractation des blancs en entrée). Les blancs à rendre comme partie du contenu d'un élément doivent être représentés par des références d'entités ou des éléments mspace (sauf quand il s'agit de caractères espaces seuls entre des caractères non blancs).

Les blancs interprétables peuvent avoir une chasse positive ou négative, ainsi que &ThinSpace; et &NegativeThinSpace;, ou une chasse nulle, ainsi que &ZeroWidthSpace;. La liste complète de ces caractères est donnée dans le chapitre 6 Les caractères, les entités et les fontes. Remarquez que, dans MathML, rien ne distingue formellement les blancs interprétables d'une quelconque autre classe de caractères, que ce soit dans un élément mtext ou dans n'importe quel autre élément.

Les blancs interprétables peuvent aussi comprendre des caractères qui influencent l'alignement ou le saut de ligne. En voici quelques-uns :

Nom de l'entité Emploi (brève description)
&NewLine; commence une nouvelle ligne sans indentation
&IndentingNewLine; commence une nouvelle ligne avec indentation
&NoBreak; interdit un saut de ligne à cet endroit
&GoodBreak; si un saut de ligne est nécessaire sur la ligne, le choisir à cet endroit
&BadBreak; si un saut de ligne est nécessaire sur la ligne, l'éviter à cet endroit

Pour la liste complète des entités MathML, cf. le chapitre 6 Les caractères, les entités et les fontes.

3.2.6.2 Attributs

L'élément mtext accepte les attributs listés dans la section 3.2.2 Les attributs de style mathématique communs des éléments atomiques.

Cf. également l'avertissement concernant le regroupement légal des éléments pareils à des espaces dans la section 3.2.7 L'espacement (mspace) et l'avertissement concernant l'utilisation de ces éléments pour déformer ou véhiculer une signification dans la section 3.3.6 L'ajustement de l'espace autour du contenu (mpadded).

3.2.6.3 Exemples

<mtext> Théorème 1 : </mtext>
<mtext> &ThinSpace; </mtext>
<mtext> &ThickSpace;&ThickSpace; </mtext>
<mtext> /* un commentaire */ </mtext>

3.2.6.4 Le mélange du texte et des mathématiques

Dans certains cas, on représentera peut-être mieux un texte imbriqué dans des mathématiques en recourant à des éléments mo ou mi. Par exemple, on pourrait représenter l'expression il existe \delta>0 tel que f(x) <1, équivalant à \exists \delta>0 \backepsilon f(x)<1, par :

<mrow>
  <mo> il existe </mo>
  <mrow>
    <mrow>
      <mi> &delta; </mi>
      <mo> &gt; </mo>
      <mn> 0 </mn>
    </mrow>
    <mo> tel que </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>

Voici un exemple faisant intervenir un élément mi : x+x2+···+xn. Dans cet exemple, on devrait représenter l'ellipse à l'aide d'un élément mi parce qu'elle prend la place d'un terme dans la somme (cf. la section 3.2.3 Les identificateurs (mi)).

À l'inverse, on représentera mieux le texte d'un exposé dans MathML avec un élément mtext. Voici un exemple :

Théorème 1 : si x > 1, alors x2 > x.

Par contre, lorsqu'un code MathML est imbriqué dans HTML, ou dans un autre langage de balisage de document, l'exemple sera probablement mieux rendu en plaçant seulement les deux inégalités dans un code MathML et en laissant le texte dans le code HTML environnant.

Un autre facteur à prévoir dans le choix du balisage du texte est l'effet sur le rendu. Le texte englobé dans un élément mo ne se trouvera vraisemblablement pas dans le dictionnaire d'opérateurs d'un moteur de rendu, et il sera donc rendu avec le format et l'espacement d'un opérateur non reconnu, qui seront peut-être, ou peut-être pas, meilleurs que ceux du texte obtenu avec un élément mtext. Une entité ellipse dans un élément mi sera mieux espacée en prenant la place d'un terme dans une série qu'en apparaissant dans un élément mtext.

3.2.7 L'espacement (mspace)

3.2.7.1 Description

L'élément vide mspace représente un espace quelconque dont la dimension est réglée par ses attributs. On peut aussi s'en servir pour suggérer des sauts de ligne à un moteur de rendu visuel. Remarquez que les valeurs par défaut des attributs ont été choisies afin de n'avoir normalement aucun effet sur le rendu. L'élément mspace est donc généralement employé avec une ou plusieurs valeurs d'attribut définies explicitement.

3.2.7.2 Attributs

Outre les attributs listés ci-dessous, l'élément mspace admet les attributs id, xref, class et style, décrits dans la section 2.4.5 Les attributs communs à tous les éléments MathML.

Nom Valeurs Valeur par défaut
width number h-unit | namedspace 0em
height number v-unit 0ex
depth number v-unit 0ex
linebreak auto | newline | indentingnewline | nobreak | goodbreak | badbreak auto

Les variables h-unit et v-unit représentent, respectivement, des unités de longueur horizontales et verticales (cf. la section 2.4.4.2 Les attributs avec des unités).

L'attribut linebreak sert à suggérer un saut de ligne à un moteur de rendu visuel. La valeur par défaut est "auto", pour laquelle un moteur de rendu devrait employer l'algorithme de saut de ligne par défaut qu'il utiliserait normalement. Les significations des autres valeurs possibles de l'attribut linebreak ont été décrites précédemment dans la discussion à propos des blancs interprétables dans l'élément mtext. Cf. la section 3.2.6 Le texte (mtext) pour des précisions.

Au cas où on paramètre des attributs de dimension avec un attribut de saut de ligne, ce dernier sera ignoré.

Notez l'avertissement ci-dessous concernant le regroupement légal des éléments pareils à des espaces et l'avertissement concernant l'utilisation de ces éléments pour déformer ou véhiculer une signification dans la section 3.3.6 L'ajustement de l'espace autour du contenu (mpadded). Voir également les autres éléments qui peuvent se rendre comme des blancs, à savoir les éléments mtext, mphantom et maligngroup.

3.2.7.3 La définition des éléments pareils à des espaces

Un certain nombre d'éléments de présentation MathML sont pareils à des espaces, au sens où ils se rendent habituellement comme des blancs, et ils n'ont aucune influence sur la signification mathématique des expressions dans lesquelles ils apparaissent. En conséquence, ces éléments fonctionnent souvent de façon exceptionnelle dans d'autres expressions MathML. Par exemple, les éléments pareils à des espaces sont manipulés de façon particulière dans les règles de rendu visuel suggéré pour l'élément mo, qui sont décrites dans la section 3.2.5 Les opérateurs, les délimiteurs, les séparateurs ou les accents (mo). On définit les éléments MathML suivants comme pareils à des espaces :

Remarquez qu'un élément mphantom n'est pas automatiquement défini comme pareil à un espace, sauf si son contenu l'est. Car l'espacement d'un opérateur est influencé par les éléments adjacents selon qu'ils sont ou non pareils à des espaces. Dans la mesure où l'élément mphantom sert principalement à aider dans l'alignement des expressions, les opérateurs adjacents devraient se comporter comme s'ils étaient adjacents au contenu de l'élément mphantom, et non à l'aire d'un blanc dont la dimension serait équivalente.

3.2.7.4 Le regroupement légal des éléments pareils à des espaces

Les auteurs qui insèrent des éléments pareil à des espaces ou des éléments mphantom dans une expression MathML existante devraient noter que ces éléments comptent comme arguments, dans les éléments qui imposent un nombre spécifique d'arguments ou qui les interprètent différemment selon leur position.

Les éléments pareils à des espaces insérés dans un élément MathML de ce type devraient donc être regroupés avec un argument voisin de l'élément en question, en introduisant pour cela un élément mrow. Par exemple, pour un alignement vertical sur le bord droit de la base d'un exposant :

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

Cette expression est illégale parce que l'élément msup doit avoir deux arguments exactement ; l'expression correcte serait :

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

Voir également l'avertissement à propos de la déformation dans la section 3.3.6 L'ajustement de l'espace autour du contenu (mpadded).

3.2.8 Les chaînes littérales (ms)

3.2.8.1 Description

L'élément ms sert à représenter des chaînes littérales dans les expressions prévues pour être interprétées par des systèmes de calcul algébrique ou d'autres systèmes contenant des langages de programmation. Par défaut, les chaînes littérales sont affichées entourées par des guillemets doubles. Comme l'explique la section 3.2.6 Le texte (mtext), un texte ordinaire imbriqué dans une expression mathématique devrait être balisé avec un élément mtext ou, dans certains cas, des éléments mo ou mi mais jamais avec un élément ms.

Remarquez que les chaînes littérales codées à l'aide de ms sont des chaînes Unicode et non des chaînes ASCII. En pratique, les caractères non-ASCII seront habituellement représentés par des références d'entités. Par exemple, l'expression <ms>&amp;</ms> représente une chaîne littérale contenant un seul caractère, &, et l'expression <ms>&amp;amp;</ms> une chaîne littérale contenant cinq caractères dont le premier est &.

Comme tous les éléments atomiques, l'élément ms rogne et rétracte les blancs de son contenu, selon les règles énoncées dans la section 2.4.6 La rétractation des blancs en entrée, et on devrait donc coder les blancs qui doivent rester dans le contenu comme cela y est expliqué.

3.2.8.2 Attributs

Les éléments ms acceptent les attributs listés dans la section 3.2.2 Les attributs de style mathématique communs des éléments atomiques et en supplément :

Nom Valeurs Valeur par défaut
lquote string &quot;
rquote string &quot;

Pour les moteurs de rendu visuel, le contenu d'un élément ms est rendu habituellement sans espacement supplémentaire ajouté autour de la chaîne et avec un caractère guillemet au début et à la fin de celle-ci. Par défaut, les caractères guillemets à gauche et à droite sont tous les deux un guillemet double standard &quot;. Toutefois, on peut remplacer ces caractères par les attributs lquote et rquote respectivement.

Le contenu des éléments ms devraient être rendu avec un masquage visible de certains des caractères du contenu, dont au moins le guillemet double même et, de préférence, les blancs sauf les caractères espaces individuels. Cette intention s'adresse au lecteur afin qu'il puisse voir que l'expression est une chaîne littérale et quels caractères forment exactement son contenu. Par exemple, l'expression <ms>le guillemet double est "</ms> devrait être rendue par "le guillemet double est \"".

3.2.9 L'ajout de nouveaux glyphes de caractère à MathML (mglyph)

3.2.9.1 Description

Unicode définit un grand nombre de caractères utilisés en mathématiques et, dans la plupart des cas, les glyphes représentant ces caractères sont largement répandus dans des polices diverses. Bien que presque tous les besoins des utilisateurs puissent être satisfaits par ces caractères, MathML reconnaît que les mathématiques ne sont pas figées et que des nouveaux caractères sont ajoutés opportunément. Les caractères qui finissent par être bien acceptés seront éventuellement incorporés par le Consortium Unicode ou d'autres organismes de normalisation, mais c'est un processus souvent long. En attendant, un mécanisme qui permet d'accéder aux glyphes représentant ces caractères, issus de polices non normalisées, est nécessaire.

L'élément mglyph est le moyen avec lequel les utilisateurs peuvent accéder directement aux glyphes de caractères non définis par Unicode ou inconnus du moteur de rendu. De la même façon, on peut aussi se servir de l'élément mglyph pour sélectionner des variantes des glyphes de caractères Unicode existants, ce qui peut être souhaitable lorsqu'une variante de glyphe a commencé à se différencier comme nouveau caractère en adoptant une signification mathématique distincte.

L'élément mglyph nomme un glyphe de caractère spécifique qui est valide dans tout contenu des terminaux MathML listés dans la section 3.1.6 Le sommaire des éléments de présentation (mi, etc.) ou la section 4.2.2 Les conteneurs (ci, etc.), sauf restriction d'un attribut (par exemple, base="2" pour l'élément <cn>). Afin qu'un moteur de rendu visuel puisse rendre le ca