Sciences

Écrire les nombres et les unités avec \(\LaTeX\)

Nous allons aborder ici le vaste et méconnu sujet qu’est l’écriture des nombres et des unités dans un document. Vaste, car il y a beaucoup de choses à dire, et méconnu parce qu’il arrive très (trop) souvent de voir des nombres et valeurs scientifiques avec des erreurs horribles dans la vie de tous les jours, et même dans certains documents scientifiques : par exemple les radars de vitesse sur les bords de nos routes qui donnent des vitesses en kelvin mètre par henry ou encore des masses de véhicules en tesla (et non, ce n’est pas la marque du véhicule ^^). Si ne vous comprenez pas un broc de ce que je raconte ici, vous aller comprendre plus bas, ne vous inquiétez pas. ;-)

Mais avant de parler de \(\LaTeX\), je dois tout d’abord vous parler de typographie et de normes d’écriture.

Norme d’écriture des nombres et des unités

Je vais détailler ici les normes « officielles » en vigueur de nos jours par souci de simplicité. Je sais qu’il y a des débats sans fin sur le fait qu’on doive suivre ou non ces normes mais ici on s’en fout un peu. Si ce sujet vous intéresse, je vous mettrai dans les références tous les documents ayant été utilisés comme source pour écrire ce paragraphe pour pouvoir vous faire une idée personnelle.

Ces différents points permettront de paramétrer le package \(\LaTeX\) correspondant par la suite.

Les nombres

Voilà les quelques critères à prendre en compte quand on écrit un nombre :

  • on utilise une virgule et non un point pour le séparateur des décimales
  • une espace insécable est présente dans un nombre quand on passe le millier afin d’assurer une meilleure lisibilité du nombre en question. On écrit donc \(\text{123 456}\) au lieu de \(\text{123456}\). On fait de même pour les chiffres après la virgule pour la même raison : \(\text{12,345 55}\)
  • on ne place pas d’espace entre le caractère moins et le nombre dans le cas d’un nombre négatif : \(-\text{30}\). Par ailleurs, le caractère moins se distingue du trait d’union présent sur vos claviers : \(-\)/-
  • il n’y a pas d’espace entre un nombre et les signes d’angles car ceux-ci ne sont pas des unités proprement dites, on écrit donc \(12°34’75″\)
  • enfin, quand on utilise la notation scientifique de nombres, avec la notation \(10^{x}\) (\(x\) étant négatif ou positif), le facteur multiplicatif entre le nombre et le \(10^{x}\) n’est ni un « x », ni un astérisque, mais la croix multiplicative « \(\times\) » : \(\text{6,626 069 57}~\times~10^{−34}\)

Les unités

Il existe aussi quelques règles pour l’écriture des unités qui sont les suivantes :

  • les abréviations d’unités issues d’un nom de famille commencent toutes par une lettre capitale : J, K, Å, W pour respectivement les scientifiques Joules, Kelvin, Ångström et Watt. Toutes les autres unités ne portent pas de capitale : m pour mètre, sr pour stéradian ou encore lx pour lux. Le seul cas particulier est le litre qui s’écrit L afin d’éviter la confusion avec le chiffre un
  • développées, toutes les unités sont considérées comme des noms communs et ne portent pas de première lettre capitale, même ceux issus de noms propres se conjuguent : \(1~\text{A}\), \(10~\text{A}\), un ampère, 10 ampères
  • on place une espace insécable entre un nombre et son unité afin d’améliorer la lisibilité globale : \(-12~\text{°C}\) ou encore \(5~\text{km}\)
  • les abréviations d’unités ne se mettent pas en italique
  • les abréviations sont invariables
  • le kelvin n’est pas une échelle relative comme le celsius ou le fahrenheit, mais une échelle absolue : il n’y a donc pas de caractère degré avec le K
  • on n’utilise pas plusieurs barres obliques dans le cas de divisions d’unités, on privilégie alors la notation \(^{-1}\) à la place : \(\text{A}~\text{m}^{-1}~\text{s}^{-1}\)
  • on utilise une espace insécable entre deux unités pour éviter les confusions de deux unités avec une autre, un point médian (et non un point normal) peut aussi être utilisé : \(\text{N}~\text{m}\) ou \(\text{N}~⋅~\text{m}\) bien que je préfère la notation sans, c’est moins chargé

Voilà, je pense avoir noté l’essentiel des règles « classiques » à respecter pour obtenir une typographie correcte et compréhensible par tout le monde.

Maintenant que les bases sont posées, nous pouvons désormais passer à la seconde partie pour les écrire correctement dans un document. :-)

Les nombres scientifiques avec Siunitx

Nous allons parler ici du package Siunitx qui permet d’écrire les nombres et les unités. Celui-ci est très complet et permet énormément de choses. Je vais mentionner ici que les principales fonctions utiles dans la majorité des cas. Pour des applications plus spécifiques, je vous renvoie à la documentation à la fin de l’article.

Paramétrage du package

Pour importer le package dans votre document, il suffit de l’importer de cette façon dans votre préambule :

\usepackage{siunitx}

On utilise ensuite la macro \sisetup afin de le paramétrer manuellement, il est en effet par défaut configuré pour des notations anglo-saxonnes. Je vais vous partager une partie de la configuration utilisée dans mon mémoire de thèse pour vous en expliquer chaque ligne, nous verrons d’autres options plus tard :

\sisetup{
detect-all,
output-decimal-marker={,},
group-minimum-digits = 3,
group-separator={~},
number-unit-separator={~},
inter-unit-product={~}
}
  • detect-all : ce paramètre va détecter automatiquement la fonte de la police utilisée dans votre document et va adapter le texte en fonction : gras, avec ou sans empattements, etc.
  • output-decimal-marker : ce paramètre va utiliser une virgule à la place du point comme séparateur des décimales
  • group-minimum-digits : ce paramètre définit le nombre de chiffres entre chaque séparation, ici 3
  • group-separator : ici, on définit que le séparateur des milliers est une espace insécable
  • number-unit-separator : ici on dit qu’il y a une espace insécable entre un nombre et son unité
  • inter-unit-product : ce paramètre définit une espace insécable entre deux unités

Avec ces différentes options, nous avons configuré le package pour qu’il utilise les différentes notations présentées dans la première partie. Nous pouvons désormais détailler ses principales écritures.

Utilisation de Siunitx

Écrire un nombre

Je vais mentionner ici quatre macros spécifiques à l’écriture des nombres avec Siunitx : \num{}, \ang{}, \numlist{} et \numrange{}{}.

\num{}

La macro \num{} est utilisée pour écrire un nombre simple, par exemple : \num{1765,75145} va donner \(\text{1 765,751 45}\).

Il est par ailleurs possible d’écrire des nombres complexes avec cette macro : \num{1-5i} va donner \(1-5\text{i}\). Vous avez la possibilité de changer la lettre i par j avec l’option suivante dans le \sisetup :

output-complex-root = j,

Les notations scientifiques sont aussi simplement prises en charge par la macro : \num{1.3e5} va donner \(\text{1,3}~\times~10^{5}\).

Enfin, il est aussi possible d’écrire les incertitudes proprement via cette macro. Dans le \sisetup, on rajoute alors ces deux options :

separate-uncertainty = true,
multi-part-units = single

Ces deux lignes vont déterminer la façon dont on veut écrire les incertitudes, ici le résultat sera le suivant : \(12~±~2\) qui est une notation assez conventionnelle dans la littérature scientifique.

L’incertitude d’un nombre s’écrit alors de la façon suivante : \num{14,56(5)} qui va donner \(\text{14,56}~±~\text{0,05}\). Notez que la valeur entre parenthèses correspond à l’incertitude sur la décimale la plus petite, ici le 6. Il existe plusieurs options de notation des incertitudes que je n’ai pas mentionnées ici, mais que vous pouvez retrouver dans la documentation officielle.

\ang{}

La macro \ang{} permet spécifiquement d’écrire les angles, par exemple \ang{4;5;2} va donner \(4°5’2″\). Il est à noter ici que le point virgule permet la séparation des degrés, minutes et secondes. Il est possible ceci dit d’écrire un angle à virgule de la façon suivante : \ang{5,7} qui va donner \(\text{5,7}°\).

\numlist{}

Ici nous allons rajouter dans l’environnement \sisetup vu plus haut deux nouvelles lignes :

list-separator = {, },
list-final-separator = { et },

La première va définir le caractère qui sera utilisé entre chaque terme de la liste et la seconde va définir le mot qui terminera la liste. Attention, les espaces sont importantes ici, et n’oubliez pas la virgule à la fin de la ligne.

La macro \numlist{} permet de formater automatiquement une liste de nombres, chaque nombre étant séparé par un point virgule : \numlist{0;1;1;2;3;5;8;13;21} va alors donner « 0, 1, 1, 2, 3, 8 , 13 et 21 » (pour info, c’est la suite de Fibonacci :-)).

\numrange{}{}

Cette dernière macro permet d’écrire une plage de valeur : la valeur inférieure se trouvant dans le premier champ et la valeur supérieure dans le second. Par exemple \numrange{0}{100}va donner \(0–100\).

Par défaut, le caractère utilisé entre les deux nombre est tiret demi-cadratin, ou -- en formatage \(\TeX\). Vous pouvez modifier le caractère entre avec l’option suivante à ajouter au \sisetup  :

range-phrase = --,

Écrire les unités

Maintenant qu’on a vu comment écrire les nombres en \(\LaTeX\), passons désormais aux unités. Pour écrire une unité seule, la macro à utiliser est \si{}. Le package connait toutes les principales unités existantes et chacune d’elle a une macro à son nom : par exemple le kelvin s’écrit \kelvin ou encore le mètre \meter. Il n’y a alors plus de risque de mal orthographier les abréviations.

Le tableau ci-dessous montre les unités du système international.

Unités du système international
Unités du système international

À ces unités se rajoutent d’autres unités dérivées des 7 ci-dessus qui sont les suivantes :

Unités dérivées du système international
Unités dérivées du système international

Enfin, on peut aussi citer quelques unités non officielles, mais qu’il arrive de rencontrer :

Il existe aussi de nombreux préfixes d’unités pour les sous-unités. La liste est la suivante :

Préfixes d’unités
Préfixes d’unités

À partir de l’ensemble de ces tableaux, vous pouvez maintenant écrire n’importe quelle unité correctement. \(\LaTeX\) se chargera de la mise en forme en utilisant les bonnes notations des abréviations. Il n’y a alors plus de risque d’erreur. :-)

Par exemple le kilomètre, km, s’écrit \si{\kilo\meter} ou le micro-sievert, µSv, s’écrit \si{\micro\sievert}. Vous pourriez me dire que ça fait long à écrire ces unités quand il commence à en avoir plusieurs. Certes, bien que j’ai tendance à les écrire de cette façon par habitude, le package prend en charge de nombreux alias des unités les plus courantes pour vous faciliter la vie :

Écrire les nombres avec unités

Pour terminer, la dernière partie de cet article consiste à voir les nombres avec leurs unités. Nous verrons ici les commandes suivantes : \SI{}{}, \SIlist{}{} et \SIrange{}{}{}.

\SI{}{}

Dans cette macro, le premier champ est utilisé par le nombre et le second par l’unité, on écrit alors \SI{13}{\milli\volt} pour écrire \(13~\text{mV}\). Pour les unités multiples il suffit de les écrire à la suite : \SI{10}{\meter\per\second} pour \(10~\text{m s}^{-1}\). Vous voyez ici que la division s’opère avec la macro \per qui utilise par défaut la notation en exposant négatif. Vous pouvez aussi utiliser la notation \SI{10}{\meter/\second} avec une barre oblique pour écrire \(10~\text{m/s}\). Pour les carrés ou cubiques, il existe les macros \square et \cubic à placer avant l’unité : \SI{9.81}{\meter\per\square\second} qui donnera alors \(\text{9,81}~\text{m s}^{-2}\) ou encore \SI{5}{\cubic\meter} pour \(5~\text{m}^3\).

\SIlist{}{}

De la même façon qu’il existe les listes de nombres, on peut en faire de même avec des nombres à unités. La macro s’utilise de la même façon. Par exemple \SIlist{125;152;210;273}{\kelvin} va donner \(125~\text{K}, 152~\text{K}, 210~\text{K}\text{ et } 273~\text{K}\). Si vous ne souhaitez pas la répétition de l’unité, vous pouvez ajouter la ligne suivante dans le \sisetup :

list-units:single,

Vous aurez alors pour la même commande le résultat suivant : \(125, 152, 210 \text{ et } 273~\text{K}\).

\SIrange{}{}{}

Enfin, \SIrange{}{}{} va s’utiliser de la même façon que la \numrange{}{} avec l’unité en plus : \SIrange{0}{100}{\degreeCelsius} va donner \(0~\text{°C}–100~\text{°C}\).

De la même façon que pour \SIlist{}{}, l’option range-units:single dans le \sisetup va éviter la répétition de l’unité : \(0–100~\text{°C}\).

Conclusion

Cet article était assez long mais ce package étant particulièrement complet c’était inévitable. Je vous ai présenté ici les principales macros pour l’écriture des nombres et des unités. Grâce à lui, vous n’aurez plus jamais de question à vous poser sur la façon de les écrire vu qu’il s’en chargera pour vous.

Je vous invite vivement à regarder la documentation du package pour découvrir les autres fonctionnalités que je n’ai pas pu mentionner ici : tableaux de valeurs, changements de couleurs suivant si le nombre est négatif ou positif, simplification d’unités et j’en passe.

Vous comprennez désormais pourquoi les radars de vitesse sur le bord des routes où il est écrit Km/H ou des panneaux interdisant le passage à des véhicules de 3 T me rendent fou, ça n’a aucun sens. :-)

Si vous avez bien tout suivi, voilà la configuration complète que j’utilise dans mes documents :

\sisetup{
detect-all,
output-decimal-marker={,},
group-minimum-digits = 3,
group-separator={~},
number-unit-separator={~},
inter-unit-product={~},
list-separator = {, },
list-final-separator = { et },
range-phrase = --,
separate-uncertainty = true,
multi-part-units = single,
list-units = single,
range-units = single
}

Sources

Pour la partie typographie et normes, voilà mes différentes sources :


Crédit photo

Photo de Nick Hillier sur Unsplash

2 Comments

  • eric

    Bonjour,
    Merci pour ce travail d’explication. J’ai un besoin particulier qui m’oblige à écrire des tours par minute, des tours par seconde, et tout un tas d’autres fractions dans les unités. Ceci est-il possible avec package et comment ?
    Dans l’attente de votre retour.

    • Nicolas

      Bonjour Éric,

      En effet le package ne peut pas prévoir toutes les unités existantes dans toutes les langues.
      Dans ce cas, je continue d’utiliser le package pour profiter des options du package (espaces entre nombres et unités, gestion du \per, etc.), mais j’écris juste l’unité ou son abréviation en toutes lettres sans macro, par exemple pour le cas présent : \SI{4}{tr\per\minute} ou \SI{3}{rpm} par exemple.
      Si une unité est très souvent utilisée dans un document, il est possible de créer une macro spécifique dans le préambule du document pour pouvoir l’utiliser : \newcommand{\tour}{tr} ou encore \newcommand{\rpm}{tr\per\minute} pour gagner du temps.

      J’espère que ça répond à votre question.

      Nicolas