Numeração de subequação em iopart

Numeração de subequação em iopart

Dado um sistema de equações (1a), (1b), etc. Quero ser capaz de fazer referência a (1a) e a todo o sistema (1). Isso é trivial com o subequations, mas em um iopartdocumento esse ambiente não parece ser suportado (não amsmath, eu acho) e a recomendação é usar o \numparts ... \endnumparts. No entanto, com \numparts, não consigo fazer referência adequada. Primeiro, eqnarrays não parece ser referenciável (não é um problema com numparts, mas ainda assim) e, segundo, mesmo que eu coloque tudo em equationambientes que sejam referenciáveis, ainda não consigo me referir ao sistema inteiro.

MWE:

\documentclass[10pt]{iopart}
\usepackage{cleveref}
\crefname{equation}{}{}
\begin{document}
    
    \section{Example}
    
    \numparts\begin{eqnarray} \label{system1}
    a=1, \\
    b=2
    \end{eqnarray}\endnumparts
    
    \numparts\begin{equation} \label{system2a}
    a=1
    \end{equation}\begin{equation} \label{system2b}
    b=2
    \end{equation}\endnumparts
    
    \cref{system1} should read (1) but instead labels the section\\
    \cref{system2a,system2b} should read (2) but instead reads (2a) and (2b)\\
\end{document}

Responder1

A iopartclasse comete vários erros fundamentais, o principal deles fazendo uma coisa boba que a torna incompatível com o amsmath.

Tentei entrar em contato com a equipe de suporte, mas não obtive resposta alguma.

Outro erro está na definição de \numpartsonde o equationcontador é pisado \addtocounterem vez de \refstepcounter.

No entanto, eqnarraynão se comporta bem com cleveref, portanto, para se referir às equações únicas, você precisa usar o \ref.

\documentclass[10pt]{iopart}
\usepackage{cleveref}
\usepackage{etoolbox}

\crefname{equation}{}{}

\patchcmd{\numparts}{\addtocounter{equation}{1}}{\refstepcounter{equation}}{}{}

\begin{document}

\setcounter{section}{8} % just to test
    
\section{Example}
    
\begin{numparts}\label{system1}
\begin{eqnarray}
  a&=&1,\label{system1a}\\
  b&=&2\label{system1b}
\end{eqnarray}
\end{numparts}
\begin{numparts}\label{system2}
\begin{equation} \label{system2a}
  a=1
\end{equation}
\begin{equation} \label{system2b}
  b=2
\end{equation}
\end{numparts}

\cref{system1} refers to the first system; separately \ref{system1a} and \ref{system1b}

\cref{system2} refers to the second system; separately \cref{system2a,system2b}

\end{document}

insira a descrição da imagem aqui

Por outro lado, eu simplesmente ignoraria o que as pessoas do IOP pensam e usam amsmath.

\documentclass[10pt]{iopart}

% for using amsmath
\expandafter\let\csname equation*\endcsname\relax
\expandafter\let\csname endequation*\endcsname\relax

\usepackage{amsmath}
\usepackage{etoolbox}

\patchcmd{\subequations}{\alph{equation}}{\textit{\alph{equation}}}{}{}

\usepackage{cleveref}

\crefname{equation}{}{}

\begin{document}

\setcounter{section}{8} % just to test
    
\section{Example}
    
\begin{subequations}\label{system1}
\begin{align}
  a&=1,\label{system1a}\\
  b&=2\label{system1b}
\end{align}
\end{subequations}
\begin{subequations}\label{system2}
\begin{equation} \label{system2a}
  a=1
\end{equation}
\begin{equation} \label{system2b}
  b=2
\end{equation}
\end{subequations}

\cref{system1} refers to the first system; separately \cref{system1a,system1b}

\cref{system2} refers to the second system; separately \cref{system2a,system2b}

\end{document}

Aposto que eles não descobririam. O patch para emular a saída iopartcom a letra da subequação em itálico deve ser feito antes do carregamento cleveref.

informação relacionada