## Editer des mathématiques

La possibilité d'inclure des expressions mathématiques est vraiment importante pour les scientifiques. Certains formats informatiques, tels que LaTeX, le permettent déjà pour les documents dont le but est d'être rendus de façon visuelle, en particulier d'être imprimée. Néanmoins, l'inclusion de formules mathématiques dans les pages web est beaucoup plus difficile. On utilise généralement des images produites à partir de sources LaTeX : on obtient un temps de chargement plus long, une mise en page inadaptée au texte environnant, une mauvaise qualité d'impression... De plus, Internet est censé être un moyen universel de partage de l'information et un language plus puissant que LaTeX est requis pour que les formules soient compréhensibles par des synthétiseurs vocaux (pour les malvoyants), des logiciels mathématiques, des moteurs de recherche...

Pour toutes ces raisons, le W3C a créé le MathML (Mathematical Markup Language) et indique que, du fait de sa complexité, il ne devrait pas être édité à la main. Par conséquent, Amaya propose une interface Wysiwyg où les expressions mathématiques sont traitées comme des composants structurés, de la même manière que les éléments HTML. Vous pouvez donc manipuler les expressions mathématiques comme vous manipulez les autres parties des documents HTML. Toutes les commandes d'édition fournies par Amaya pour traiter le texte sont également utilisables pour les mathématiques. Il y a quelques manipulations supplémentaires pour entrer des constructions mathématiques. Notez que les différents navigateurs ne se comportent pas de la même manière envers le MathML : regardez la section sur la compatibilité des navigateurs pour plus d'informations.

### Créer une formule mathématique

#### Nouvelle formule

Généralement, les formules mathématiques ne sont pas isolées, mais incluses dans un document avec du texte, des tableaux, des images... pour cela vous devez créer un document XHTML. Sinon, vous pouvez créer un document MathML (mml) par exemple pour utiliser les formules dans d'autres logiciels.

Pour créer une expression mathématique dans un document, il suffit de placer le point d'insertion à l'endroit où vous voulez insérer l'expression, puis de cliquer sur le bouton Math (le premier bouton de la palette Math) ou de sélectionner l'entrée Nouvelle formule du menu XML. Voici des exemples avec une formule insérée directement dans le document XHTML ou à l'intérieur d'une image SVG :

Γ ⁡ ( x ) = ∫ 0 + ∞ t x − 1 ⅇ − t ⅆ t

#### Le menu XML

Le menu XML/Eléments math de base contient des éléments non disponibles dans la palette. Les premiers éléments créent un nouvel élément d'un type donné à l'intérieur d'une expression mathématique : Texte (`mtext`), Identificateur (`mi`), Nombre (`mn`), Opérateur (`mo`). Ces commandes peuvent aussi changer le type d'un élément seul ou d'une séquence d'éléments.

La commande suivante, Espace (`mspace`), vous permet d'ajouter un espace dans une formule. Pour changer sa taille, vous devez modifier l'attribut width. Voir la section sur l'Espacement.

Ces éléments sont suivis de la commande Caractère (`&xxx;`) qui vous permet d'entrer un caractère qui n'est pas disponible sur le clavier. Elle affiche une boîte de dialogue dans laquelle vous devez entrer le nom du caractère (par exemple `alpha` pour le caractère grec α).

Les deux dernières commandes InvisibleTimes and ApplyFunction sont utilisés pour entrer les caractères invisibles correspondants. Voir la section sur les caractères spéciaux.

Le menu XML/Constructions math vous permet de créer de nouvelles constructions à l'intérieur d'une formule. Si le point d'insertion n'est pas dans une formule, un élément Math est d'abord créé pour accepter la nouvelle construction. Les constructions disponibles sont :

- Racine (`mroot` dans MathML) : x + 1 3
- Racine carrée ( `msqrt)`: x + 1
- Englobe (`menclose)`: 1234
- Fraction (`mfrac)`: 1 x + 1
- Indice et exposant Expression (`msubsup)`: x i + 1 n ou ∫ 0 ∞
- Indice (`msub)`: x i
- Exposant (`msup)`: x n
- Dessous et dessus (`munderover)`: ∑ i = 1 n
- Dessous (`munder)`: x ̲
- Dessus (`mover)`: x → maps to y
- Multi-scripts (`mmultiscripts)`: X i j k l

Enfin, le menu XML/Matrices vous permet de créer et éditer des tableaux MathML : a b c d

Vous devez alors choisir le nombre de lignes et de colonnes désirées et tableau vide est créée à la position courante. Il se manipule comme les tableaux HTML grâce aux commandes disponibles dans le menu XML/Matrices.

#### La palette MathML

Cliquer sur un boutton de la palette Math insert la construction mathématique représentée sur son icône. Les parties en noires sont vraiement insérée, les parties en rouge représentent des cases à compléter, les parties en bleues sont demandées par le biais d'une fenêtre de dialogue. Les parties en vertes sont simplement des informations supplémentaires qui ne sont pas insérées.

La palette contient toutes les constructions décrites dans le MathML de contenu (mais le code produit est un équivalent en MathML de présentation, voir la section sur les limites courantes) et même plus. Vous pouvez aussi enregistrer vos propres constructions dans un fichier mml pour les utiliser ultérieument. Les 6 onglets sont :

1. - Constructions diverses
     - nouvelle formule
     - `mrow`: utilisé pour regrouper des éléments. Voir la section sur la construction row
     - `mphantom`: cache un fragment de la formule, utilisable pour l'alignement. Les parties cachées sont visibles si vous sélectionnez la formule :

       { + 5 x + 3 y + 0 z = +0 0 − 2 x + 0 y + 7 z = + 11 − 3 x + 2 y − 6 z = − 7

     - parenthèses: ( x )
     - intervalle: On demande les symboles ouvrants/fermants et séparateurs. [ a ; b ]
     - fence: Idem, mais le nombre d'éléments est demandé. [ 1 , c , Y , ⅇ , ∏ }
     - `mtable`: a b c d
     - `menclose`: a or b
     - selector: On demande le nombre de coordonnées. a i ⁣ j
     - accolades avec disjonction de cas ou accolades : ∣ x ∣ = { x if x ≥ 0 − x otherwise
   - Constructions de MathML de présentation : msup, msub, msubsup, mover, munder, munderover, multiscripts.
   - Ensembles de nombres: naturels, entiers, rationnels, réels, complexes, quaternions, premiers.
   - Accents et script en dessous.
2. - relations d'équivalence et relations d'ordre
     - égalité, approx, congru, isomorphe
     - inégalités
     - inf, sup, max and min
   - logique
     - Vrai et Faux
     - Equivalence
     - Quantificateurs universels et existentiels
     - Non, Et, Ou, Ou exclusif, Implique, Equivalent à
3. - théorie des ensembles
     - ensemble/liste construit par extension/séparation, nuplet
     - élement, sous ensemble
     - ensemble vide, ensemble des parties
     - complément, différence, différence symétrique
     - intersection, union, produit cartésien
     - cardinal, omega, aleph, intersection diagonale
   - fonctions et applications
     - construction lambda
     - définition d'application, flèches
     - domaine, image, codomaine
     - identité, composition, application réciproque
4. - arithmétique
     - somme, produit
     - factoriel, combinaison, cardinal
     - divise
     - ppcm, pgcd
     - reste, quotient
   - opérations
     - opérations élémentaires: plus, moins, fois, division, fraction
     - puissance, racine
     - plancher, plafond
   - complexes
     - abs (module), arg, conjugué
     - cartesien, polaire
     - partie réelle et imaginaire
   - constantes: ⅇ , ⅈ , π , γ , NaN (non un nombre)
5. - analyse
     - differentielle, differentielle partielle
     - intégrales: simple/double/triple, normal/contour, msub/msupsub
     - équivalence
     - limite, tend vers
     - supminus ( 1 - ) ou supplus ( 0 + )
     - l'infini
     - petit et grand O
   - algèbre linéaire
     - somme direct
     - vecteur ligne/colonne, matrice
     - transposée, déterminant
     - rot, div, grad, laplacien
     - produit vectoriel, produit scalaire, produit externe
     - orthogonal, parallèle, complémentaire orthogonal, norme
   - statistique : moyenne, sdev, variance, médiane, mode, moment
6. fonctions élémentaires classiques (trigonometriques, réciproques...)

#### Entrer des constructions à partir du clavier

Vous n'êtes pas obligé d'utiliser un menu ou la palette Math pour créer et éditer des expressions mathématiques. Vous pouvez entrer des constructions mathématiques directement à partir du clavier puisque que chaque entrée du menu a un équivalent sur le clavier (les raccourcis sont indiqués dans les menus). Voir les raccourcis clavier courant pour les versions Linux, Mac OS X, et Windows. Vous pouvez rentrer des lettres grecques via les raccourcis suivants: (Ctrl) g (Ctrl) [lettre] et (Ctrl + Shift) G (Ctrl + Shift) [lettre].

Vous pouvez aussi utiliser les touches directionelles (flèches) pour faire passer le point d'insertion d'une construction à une autre. En particulier, les deux flèches horizontales permettent de se déplacer selon la structure de l'expression mathématique. Par exemple, en fin de numérateur d'une fraction, la flèche droite fait passer au début du dénominateur. En outre, si vous utilisez la flèche vers la droite à l'intérieur d'une construction non encore complétée, le point d'insertion est directement déplacé à la case vide la plus proche.

### Options d'éditions avancées

#### Entrer des caractères

Quand vous tapez une chaîne de caractères dans un élément MathML, Amaya analyse cette chaîne et engendre automatiquement des éléments `mo` (opérateur), `mn` (nombre), `mi` (identificateur), et `mtext`

Par exemple, pour entrer la formule x = 2 a + b

1. si vous n'êtes pas dans une expression mathématique, cliquer d'abord sur l'entrée Nouvelle formule du menu XML ou sur le bouton Math de la palette.
2. taper cette séquence de 6 caractères : `x=2a+b`

Vous pouvez vérifier dans le vue Structure ou source la structure générée par Amaya :

`<mi>x</mi><mo>=</mo><mn>2</mn><mi>a</mi><mo>+</mo><mi>b</mi>`

Si le résultat ne correspond pas exactement à ce que vous vouliez, il suffit de sélectionner les caractères mal interprétés et de changer leur type avec l'une des commandes Texte (mtext), Identificateur (mi), Nombre(mn), Opérateur (mo) du menu XML/Math.

#### La construction row

La construction row de la palette est équivalente aux accolades en LaTeX : elle vous permet de donner des informations sur la façon dont les différentes parties d'une formule sont liées entre elles. Elle n'apparait pas à l'écran mais peut avoir un effet indirect sur le rendu.

Par exemple, si vous créez des parenthèses, comme dans l'expression suivante :

f ( x ) = 1 x

taper la séquence de caractères `f(x)=` . . . donnerait :

f ( x ) = 1 x

Ici, le (x) doit être contenu dans un element `mrow`. Vous pouvez corriger le problème en sélectionnant la partie de la formule puis en cliquant sur la construction row. Vous pouvez aussi directement obtenir le `mrow` souhaité en utilisant la commande Parenthèses du menu XML/Math ou de la palette.

#### Espacement

Amaya gère les espacements à l'intérieur des expressions mathématiques, mais vous avez parfois besoin d'ajouter d'autres espaces. Déplacez le curseur à l'endroit où vous voulez insérer un espace et choisissez Eléments math de base/Espace (mspace) dans le menu XML. Ceci créer un espace horizontal par défaut. Vous pouvez alors changer son attribut width pour ajuster sa taille ou ajouter d'autres attributs (height, depth, linebreak) pour changer l'espacement vertical. Voir la spécification MathML pour plus de détails.

#### Caractères spéciaux

Pour entrer les caractères et symboles mathématiques qui ne sont pas disponibles au clavier, vous pouvez utiliser la commande Caractères du menu XML/Eléments math de base. Tapez le nom du caractère (la liste des noms est disponible dans la spécification MathML). Au lieu du nom, vous pouvez entrer la valeur Unicode du caractère. Pour entrer cette valeur en décimal, commencez par '#'. Pour l'entrer en hexadécimal, commencez par '#x'. Pour accélérer la frappe, vous pouvez entrer directement une valeur hexadécimal, sans la faire précéder de '#x', mais cela peut donner une ambiguïté (comme 'af', par exemple). En cas d'ambiguïté, la alpes saisie est interprétée comme un nom de caractère.

Vous pouvez aussi utiliser la palette Caractères spéciaux qui se trouve en-dessous de la palette Math. Les boutons de la partie supérieure de cette palette permettent de choisir un groupe de caractères qui sont alors disponibles dans le menu qui se trouve en-dessous. Choisissez le caractère voulu dans ce menu, puis insérez-le dans le document à l'aide du bouton voisin.

En outre, la spécification MathML dit d'ajouter des caractères invisibles pour que la lecture de la formule soit plus facile pour les synthétiseurs vocaux. Ils sont automatiquement insérés dans les contructions de la palette mais parfois vous devez le faire vous même. Vous pouvez utiliser le menu XML ou des raccourcis. Les trois caractères invisibles sont :

1. le produit invisible : a ⁢ b
2. l'application de fonction : f ⁡ ( x )
3. la virgule invisible : a i ⁣ j

#### Editer la structure

Si vous voulez changer la structure d'une expression existante, pour ajouter par exemple un exposant ou mettre des parenthèses autour d'une expression, il suffit de sélectionner dans le document l'expression à transformer et d'entrer la nouvelle expression avec la palette Math, le menu XML/Constructions math ou le clavier. Vous pouvez également utiliser la commande Transformer du menu Edition. Sélectionnez l'expression que vous voulez transformer et la commande Transformer affichera un menu avec tous les changements possibles.

#### Vue Structure

Toutes les fois qu'un document contient des éléments MathML, la sélection de l'article Montrer la structure du menu Vues ouvre la vue Structure qui montre la structure principale du document HTML. Dans cette vue, les éléments MathML et leur contenu effectif sont affichés.

Vous pouvez éditer des expressions mathématiques aussi bien dans la vue principale que dans la vue Structure. La vue Structure est particulièrement utile pour éviter l'ambiguïté. Observez l'exemple suivant :

x = a + b + 1

Lorsque vous déplacez le point d'insertion après le caractère b, il n'est pas évident de distinguer si vous voulez ajouter quelque chose à l'intérieur de la racine carrée ou après elle. Sélectionner (ou vérifier ) dans la vue Structure évite toute ambiguïté. Vous pouvez également vérifier dans la ligne d'état, en bas de la fenêtre.

#### Les liens dans MathML

Vous pouvez créer et utiliser des liens hypertexte dans des expressions mathématiques. Ces liens sont représentés en utilisant le XML Linking Language (XLink). Seuls les liens simples unidirectionnels sont utilisables, mais vous pouvez associer un lien à n'importe quelle partie d'une formule. Par exemple, la fraction dans la formule ci-dessous est un lien vers la page d'accueil du W3C :

y = 1 x 2 + 1

Cliquer deux fois sur un des caractères à l'intérieur de la fraction fait apparaître la page d'accueil du W3C.

Pour créer un tel lien, il suffit de sélectionner une expression (la fraction dans l'exemple ci-dessus), de cliquer sur le bouton Lien de la palette XHTML (ou de sélectionner l'entrée "Créer/changer lien" du menu Liens), et de cliquer sur la cible désirée. Si la cible est une expression dans une formule, vous devez d'abord faire de cette expression une cible. Il suffit de sélectionner l'expression ainsi que l'entrée "Créer cible" du menu Liens. Ceci crée un attribut `id` pour l'expression cible.

### Un peu plus à propos de MathML

#### Compatibilité des navigateurs

Firefox ou autres navigateurs basés sur Gecko supportent le MathML, tandis que Internet Explorer a besoin d'un plugin.

Il faut utiliser le suffixe `.xml` pour être sûr que tous les browsers traitent les documents XHTML comme du XML et donc affichent correctement les documents incluant des formules mathématiques.

Il est aussi recommandé d'utiliser le charset utf-8 pour les documents XML.

Par défaut Amaya ajoute le doctype `XHTML 1.1 plus MathML 2.0` en tête du document. Ce doctype n'est pas obligatoire mais il est utile :

- pour valider le document,
- pour engendrer des entités alphanumériques (&int; par exemple) pour les symboles mathématiques, dans le code source. Sinon les symboles mathématiques seront codés comme tout autre caractère unicode.

Malheureusement, ce doctype n'est pas supporté par beaucoup de browsers. Il peut donc être nécessaire de le supprimer avec la commande Fichier>Changer le type du document>Supprimer le doctype.

IE utilise la feuille de transformation `pmathml.xsl` et un plugin pour afficher le code MathML inclus. Amaya ajoute automatiquement le lien vers la feuille de transformation, mais il faut penser à déposer une copie de cette feuille de transformation (pmathml.xsl) dans le répertoire local du document.

#### Limites courantes

- Amaya implémente seulement les Balises de Présentation de MathML 2.0, et non le Balisage du Contenu.
- Certaines balises de présentation ne sont pas entièrement disponibles: `mglyph`, `maction`
- Tous les éléments de présentation et les attributs sont utilisables, mais seuls les attributs suivant sont pris en compte dans le formatage : `display, alttext`, `mathvariant, mathsize`, `mathcolor, mathbackground, fontsize, fontweight`, `fontstyle`, `fontfamily`, `color`, `linethickness`, `numalign`, `denomalign`, `bevelled`, `notation`, `lquote`, `rquote`, `lspace`, `rspace`, `largeop`, `movablelimits, subscriptshift`, `superscriptshift`, `form`, `width` (`mspace`), `height` (`mspace`), `depth` (`mspace`), `align`, `rowalign`, `columnalign`, `frame`, `framespacing`, `displaystyle,side`, `rowspan`, `columnspan, rowspacing, columnspacing, rowlines, columnlines`.
- Les attributs `class`, `id` et `style` sont utilisables, avec la même sémantique que dans HTML : vous pouvez associer du style CSS aux éléments MathML (attribut `class` et `style`) et un élément MathML peut être la cible d'un lien (attribut `id`).
- Amaya utilise les polices STIX pour afficher des symboles mathématiques, mais tous ne sont pas supportés.