iopart의 하위 방정식 번호 매기기

iopart의 하위 방정식 번호 매기기

방정식 (1a), (1b) 등의 시스템이 주어지면 (1a)와 전체 시스템 (1)을 모두 참조할 수 있기를 원합니다. 에서는 이는 사소한 일 subequations이지만 iopart문서에서는 이 환경이 지원되지 않는 것 같으며(아니요 amsmath, 내 생각에는) 를 사용하는 것이 좋습니다 \numparts ... \endnumparts. 그러나 에서는 \numparts제대로 참조할 수 없습니다. 첫째, eqnarrays는 참조할 수 없는 것 같습니다( 의 문제는 아니지만 numparts여전히). 둘째, 참조할 수 있는 환경에 모든 것을 넣어도 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}

답변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.

관련 정보