
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 iopart
Dokument scheint diese Umgebung nicht unterstützt zu werden (kein amsmath
, nehme ich an) und es wird empfohlen, zu verwenden \numparts ... \endnumparts
. Mit \numparts
gelingt mir die Referenzierung jedoch nicht. Erstens eqnarray
scheinen s nicht referenzierbar zu sein (kein Problem mit , aber trotzdem) und zweitens kann ich, selbst wenn ich alles in referenzierbare Umgebungen numparts
setze , 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 iopart
Klasse 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, \numparts
wo der Zähler mit statt mit equation
weitergeschaltet wird .\addtocounter
\refstepcounter
Allerdings eqnarray
verhä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}
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 iopart
mit dem kursiv gedruckten Untergleichungsbuchstaben muss vor dem Laden erstellt werden cleveref
.