decoration

The iopart.cls class and the amsmath.sty package

Trucs et astuces…

Il y a une incompatibilité entre la classe proposée par l’éditeur IOP et le package fort utile amsmath.sty. Ce problème semble ne pas émouvoir les responsables d’IOP. Pour les personnes habituées comme moi aux packages de l’AMS, c’est inadimissible qu’un éditeur nous force à ne pas les utiliser.

La classe iopart.cls redéfinit visiblement des commandes définies par amsmath.sty. En réalité je n’ai trouvé que l’environnement d’équation

\begin{equation*}
...
\end{equation*}

qui entre en conflit.

Je propose donc la solution suivante, qui consiste à appeler la classe iopart.cls comme requis par l’IOP, puis à vider la définition de l’environnement d’équation ci-dessus juste avant d’appeler le package amsmath.sty :

\documentclass[12pt]{iopart}
... [packages divers]

\expandafter\let\csname equation*\endcsname=\relax
\expandafter\let\csname endequation*\endcsname=\relax
\usepackage{amsmath}

... [packages divers]


\begin{document}
...
\end{document}

J’ai testé avec succès ce code sur un article utilisant abondamment les ressources des packages de l’AMS.

Attention, il ne faut pas appeler le package compagnon à la classe iopart.cls appelé iopams.sty qui empiète encore plus sur les définitions des packages de l’AMS.

Ce code peut paraître un peu barbare, mais il signifie la chose suivante : lorsqu’on souhaite « vider » une commande en LaTeX, on la redéfinit à \relax. Il se trouve que les deux commandes à redéfinir ne sont pas réellement des commandes “\blabla” à cause de l’étoile en fin de nom. C’est pourquoi il faut avoir recours au subterfuge du \csname ... \endcsname.

Je ne sais pas si ces deux lignes supplémentaires suffisent à régler complètement l’incompatibilité. Si ce n’est pas le cas, je souhaiterais en être informé.