Nummerierung der Untergleichungen in iopart

Nummerierung der Untergleichungen in iopart

Gegeben sei ein Gleichungssystem (1a), (1b) usw. Ich möchte sowohl auf (1a) als auch auf das gesamte System (1) verweisen können. Mit ist das trivial subequations, aber in einem iopartDokument scheint diese Umgebung nicht unterstützt zu werden (kein amsmath, nehme ich an) und es wird empfohlen, zu verwenden \numparts ... \endnumparts. Mit \numpartsgelingt mir die Referenzierung jedoch nicht. Erstens eqnarrayscheinen s nicht referenzierbar zu sein (kein Problem mit , aber trotzdem) und zweitens kann ich, selbst wenn ich alles in referenzierbare Umgebungen numpartssetze , immer noch nicht auf das gesamte System verweisen.equation

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}

Antwort1

Die iopartKlasse macht mehrere grundlegende Fehler. Der wichtigste besteht darin, dass sie etwas Dummes macht, das sie inkompatibel mit macht amsmath.

Ich habe versucht, das Support-Team zu kontaktieren, habe aber überhaupt keine Antwort erhalten.

Ein weiterer Fehler liegt in der Definition, \numpartswo der Zähler mit statt mit equationweitergeschaltet wird .\addtocounter\refstepcounter

Allerdings eqnarrayverhält sich nicht gut mit cleveref, daher müssen Sie zum Verweisen auf die einzelnen Gleichungen das einfache verwenden \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}

Bildbeschreibung hier eingeben

Andererseits würde ich einfach ignorieren, was die Leute bei IOP denken und verwenden 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}

Ich wette, sie würden es nicht entdecken. Der Patch zum Emulieren der Ausgabe von iopartmit dem kursiv gedruckten Untergleichungsbuchstaben muss vor dem Laden erstellt werden cleveref.

verwandte Informationen