Дана система уравнений (1a), (1b) и т. д. Я хочу иметь возможность ссылаться как на (1a), так и на всю систему (1). Это тривиально с subequations
, но в iopart
документе эта среда, похоже, не поддерживается (нет amsmath
, я полагаю), и рекомендуется использовать \numparts ... \endnumparts
. Однако с \numparts
, мне не удается правильно ссылаться. Во-первых, eqnarray
s, похоже, не являются ссылаемыми (это не проблема с numparts
, но все же), и, во-вторых, даже если я помещу все в equation
среды, на которые можно ссылаться, я все равно не смогу ссылаться на всю систему.
МВЭ:
\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}
решение1
Класс iopart
допускает несколько фундаментальных ошибок, главная из которых — выполнение глупой вещи, делающей его несовместимым с amsmath
.
Я пытался связаться со службой поддержки, но не получил никакого ответа.
Другая ошибка заключается в определении того, \numparts
куда equation
следует нажимать счетчик, \addtocounter
вместо \refstepcounter
.
Однако eqnarray
не очень хорошо работает с cleveref
, поэтому для ссылки на отдельные уравнения необходимо использовать обычный \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}
С другой стороны, я бы просто проигнорировал то, что думают люди в IOP, и использовал бы 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}
Держу пари, они бы этого не обнаружили. Патч для эмуляции вывода iopart
с буквой подуравнения курсивом должен быть сделан до загрузки cleveref
.