Ecrire un isotope en LaTeX

Ecrire un isotope en LaTeX

Allons droit au but : quand on écrit le code suivant en \(\LaTeX\):

^{235}_{92}U

il s’affiche ceci \(^{235}_{92}U\). Les nombres ne sont pas alignés à droite, ce qui peut déranger certains yeux (dont les miens).

Il existe plusieurs façons d’y remédier. Nous allons voir quelques façons de définir une macro \isotope ayant 3 arguments.

Avec un tableau

C’est la méthode bourrin… mais qui donne un résultat satisfaisant.

\newcommand{\isotope}[3]{\begin{tabular}{@{}r@{}}#1\\#2\end{tabular}#3}

qui donne ceci :

Un isotope écrit en \(LaTeX\) avec un tableau

On peut ensuite affiner le résultat en modifiant la taille des nombres ainsi que leur espacement vertical :

\newcommand{\isotope}[3]{\begin{tabular}{@{}r@{}}\small#1\\[-0.5ex]\small#2\end{tabular}#3}

qui donne, en tapant \isotope{235}{92}{U} dans un texte:

Un isotope écrit en \(LaTeX\) avec un tableau

La méthode pour faire le kéké

\makeatletter
\newcommand{\isotope}[3]{%
   \settowidth\@tempdimb{\ensuremath{\scriptstyle#1}}%
   \settowidth\@tempdimc{\ensuremath{\scriptstyle#2}}%
   \ifnum\@tempdimb>\@tempdimc%
   	\setlength{\@tempdima}{\@tempdimb}%
   \else%
   	\setlength{\@tempdima}{\@tempdimc}%
   \fi%
  \begingroup%
  \ensuremath{^{\makebox[\@tempdima][r]{\ensuremath{\scriptstyle#1}}}_{\makebox[\@tempdima][r]{\ensuremath{\scriptstyle#2}}}\text{#3}}%
  \endgroup%
}%
\makeatother

J’ai trouvé ce bout de code je ne sais où il y a fort longtemps… L’intérêt n’est pas tant dans le résultat que dans les explications car au final, le résultat n’est pas beaucoup mieux que le précédent :

Un isotope écrit en \(\LaTeX\)

Explications du code :

  • d’abord, on fixe les largeurs qu’occupent les deux nombres (avec la commande \settowidth\@tempdimb{blabla}, on stocke la largeur dans la macro \@tempdimb);
  • ensuite, on stocke dans la macro \@tempdima la dimension la plus grande (c’est le rôle du test \ifnum);
  • après, on commence l’affichage en le mettant dans un broupe (\begingroup)
  • on s’assure que l’affichage sera en mode mathématique (\ensuremath) car il y a un exposant et un indice;
  • on créé en exposant et en indice une boîte dont la largeur est égale à \@tempdima (la plus grande des largeurs des deux nombres);
  • et on finit par afficher en mode texte l’élément.

Méthode graphique avec TiKZ

Bon, cette méthode, autant vous le dire, n’est là que pour le fun car je vous déconseille de faire une macro graphique pour si peut (même si vous faites ce que vous voulez après tout…).

 \newcommand{\isotope}[3]{\tikz[baseline=-0.33\baselineskip,outer xsep=0pt,inner xsep=0pt]{\node (elt) {#3};\node[left] at (elt.north west) {\small#1}; \node[left] at (elt.south west) {\small#2};}}

Voici les trois méthodes les unes à la suite des autres, dans l’ordre traité ici:

Comparatif des méthodes d’affichage d’un isotope en \(\LaTeX\)

Mon conseil

Si j’étais vous, ce qui n’est pas le cas, fort heureusement pour vous, j’opterais pour la méthode en \(\LaTeX\) pur car lors de changement de taille de caractères, elle reste insensible et se comporte toujours de la même façon. Par exemple, si on fixe la taille des caractères à 30pt, voilà ce que cela donne:

Affichage d’un isotope en \(\LaTeX\) avec une grande taille de caractères

Stéphane Pasquet
Stéphane Pasquet

Laissez votre message