Utilisateur:Flo/maths

Une page de Wikipédia, l'encyclopédie libre.

Du rendu des maths sur Wikipédia Un sujet un peu délaissé par les développeurs, mais qui me tient à cœur. Le problème #1 est l'intégration des images au sein du texte (alignement, hauteur de ligne). Quelques idées en vrac.

  • Il faudrait séparer les formules en- et hors-texte, à l'instar de LATEX ; c'est-à-dire introduire une nouvelle balise <m>…</m> destinée aux formules en-texte, où elles seraient générées en HTML si possible (celles en HTML si très simple sont trop limitées), avec quelques améliorations. Notamment :
    • Oublier les tableaux pour simuler les fractions et les indices sous et sur les grands symboles : les tableaux cassent les paragraphes et sont inaccessibles. Les premières peuvent être écrites avec une barre oblique (le modèle:frac est là pour ça), les seconds peuvent être écrits à côté.
    • Introduire les symboles ℝ, ℂ, ℕ, et ℤ, et rendre les autres en gras.
    • Accessoirement, gérer les espaces de façon correcte : certains symboles (comme l'astérisque) se voient entourés d'espaces, d'autres – la plupart – (comme le point médian et les relations d'équivalence) sont collés aux caractères qui les entourent.
  • Une autre idée, plus facile à mettre en œuvre, serait de continuer à générer des images, mais de jouer sur leur dimension.
    • En adaptant leur hauteur à celle du texte (réduction proportionnelle) : cela pose toujours le problème de l'alignement.
    • En utilisant une police plus petite.
  • D'autre part, il manque pas mal de commandes, cf Discussion Wikipédia:Atelier TeX#Ajout de commandes.

En attendant, des modèles existent :

et dès que les fonctions MediaWiki sur les chaînes de caractères seront disponibles, des modèles pour les vecteurs, les sommes, intégrales et j'en passe pourront être créés.

Suivi du bug : bugzilla:12223

Numérotation des équations Je me suis amusé à implémenter l'idée faite sur le Thé d'avoir un système permettant de numéroter les équations en leur donnant un label (étiquette) puis d'y faire référence dans le texte, de la même manière que TEX.

function labels(){
	if( !document.getElementById("content") || !document.getElementById("content").getElementsByTagName("span") ) return;
	var index = 0;
	window.labels = new Array();
	for( var i=0; span = document.getElementById("content").getElementsByTagName("span")[i]; i++ ) {
	    if (!$(span).hasClass("label") || !span.id) continue;
		index++;
		var t = document.createTextNode("(" + index + ")");
		span.appendChild(t);
		window.labels[span.id] = index;
	}
}
addOnloadHook(labels);
function eqrefs() {
	if( !document.getElementById("content") || !document.getElementById("content").getElementsByTagName("span") || !window.labels) return;
	for( var i=0; span = document.getElementById("content").getElementsByTagName("span")[i]; i++ ) {
		if (!$(span).hasClass("eqref")) continue;
		var a = span.firstChild;
		if(!a) continue;
		var label = a.href.substring(a.href.indexOf("#")+1);
		var num = window.labels[label];
		if(!a.firstChild) continue;
		a.firstChild.nodeValue = num ? "(" + num + ")" : "";
	}
}
addOnloadHook(eqrefs);

à utiliser avec un modèle qui prendrait en argument un nom (id) pour le label et insérerait :

<span class="label" id="{{{id}}}">

pour créer l'ancre et afficher le numéro (à l'aide de la fonction labels()), et un autre pour créer une référence vers le label (un lien) avec pour argument le nom (id) du label :

<span class="eqref"><a href="#{{{id}}}"></a></span>

ainsi, quand JavaScript n'est pas activé le lien affiche une flèche, et dans le cas contraire la fonction eqrefs() a pour rôle de remplacer la flèche par le numéro correspondant au label.