iopart 中的子方程编号

iopart 中的子方程编号

给定方程组 (1a)、(1b) 等。我希望能够引用 (1a) 和整个系统 (1)。这对于 来说很简单subequations,但在iopart文档中,此环境似乎不受支持(amsmath我猜不是 ),建议使用\numparts ... \endnumparts。但是,对于\numparts,我无法正确引用。首先,eqnarrays 似乎不可引用(对于 来说不是问题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

相关内容