다른 장 제목을 사용하여 세련된 방정식 번호 매기기

다른 장 제목을 사용하여 세련된 방정식 번호 매기기

나는 그런 식으로 책 클래스와 숫자 방정식을 사용하고 싶습니다.

방정식은 방정식의 수만 전달해야 합니다.없이 장 번호. 나는 이것을 사용하여 얻는다

    \renewcommand{\theequation}{\arabic{equation}}

그런 다음 명령을 사용할 때 \ref나는 그것을 원합니다

  1. \ref방정식의 동일한 장에서 호출되는 경우 참조는 다음과 같습니다.(equation)
  2. \ref방정식의 다른 장에서 호출되는 경우 참조는 다음과 같습니다.(equation)\textsubscript{name-of-the-chapter-containing-equation}

여기에 내 시도가 있습니다.zref

\documentclass{book}
\usepackage{amsmath}
\usepackage{hyperref}
\usepackage{zref-user}
\makeatletter
\zref@newprop{chapter}{\thechapter}
\zref@addprop{main}{chapter}
\makeatother
\numberwithin{equation}{section}
\renewcommand{\theequation}{\arabic{equation}}
\newcommand{\myref}[1]{\ifnum\thechapter=\zref[chapter]{#1} (\zref{#1}) \else (\zref{#1})\textsubscript{something} \fi}
\begin{document}
 \chapter{First}
 \ifnum\myref[chapter]{eq:1}=1 a \else b \fi
  \myref{eq:1}, \myref{eq:2}, \myref{eq:3}, \myref{eq:4}
 \section{First First}
 \begin{equation}\zlabel{eq:1}
 E=\gamma m
 \end{equation}
 \section{First Second}
 \begin{equation}\zlabel{eq:2}
 0=0
 \end{equation}
 \chapter{Second}
  \myref{eq:1}, \myref{eq:2}, \myref{eq:3}, \myref{eq:4}
 \begin{equation}\zlabel{eq:3}
 e^{i\pi}+1=0
 \end{equation}
 \chapter{Third}
  \myref{eq:1}, \myref{eq:2}, \myref{eq:3}, \myref{eq:4}
 \begin{equation}\zlabel{eq:4}
 f(w) = \frac{1}{2i\pi}\oint_{C_w}\frac{f(z)\mathrm{d}z}{z-w}
 \end{equation}
 \chapter{Last}
 \myref{eq:1}, \myref{eq:2}, \myref{eq:3}, \myref{eq:4}
\end{document}

정의하는 데 두 가지 문제가 있습니다.\myref

  1. \ifnum\zref[chapter]{#1}might는 숫자를 반환하지 않으므로 `\thechapter'와 비교할 수 없기 때문에 제대로 작동하지 않습니다.

  2. \nameref숫자에 해당하는 장 이름을 얻으려면(또는 아마도 를 사용하려면 ) 명령을 찾아야 합니다.

어떻게 해결할 수 있나요?

답변1

다음과 같이 이 작업을 수행할 수 있습니다. 먼저 및를 사용하여 \zrefused추가 \zref@extract서식을 트리거하기 위해 비교할 값을 가져옵니다.

이제 패키지는 zref-titleref제목 필드를 얻는 방법에 대한 아이디어를 제공하지만 장뿐만 아니라 섹션 등에서도 업데이트됩니다. 따라서 대신 zref-titleref장 제목만 가져오는 수정된 버전의 코드를 작성합니다.

샘플 출력 두 번째 샘플

\documentclass{book}

\usepackage{amsmath}
\usepackage{zref-user,gettitlestring}
\usepackage{hyperref}

\newcommand{\setcurrentchaptername}[1]{\GetTitleStringNonExpand{#1}\edef\currentchaptername{\detokenize\expandafter{\GetTitleStringResult}}}
\def\currentchaptername{}
\makeatletter
\zref@newprop{chapter}{\thechapter}
\zref@addprop{main}{chapter}
\zref@newprop{chaptername}{\currentchaptername}
\zref@addprop{main}{chaptername}
\ZREF@patch{@chapter}{\def\@chapter[#1]{\setcurrentchaptername{#1}%
  \ZREF@org@@chapter[{#1}]}}
\makeatother

\numberwithin{equation}{chapter}
\renewcommand{\theequation}{\arabic{equation}}

\makeatletter
\newcommand{\myref}[1]{\zrefused{#1}%
\ifnum\zref@extract{#1}{chapter}=\thechapter\relax
(\zref{#1}) \else (\zref{#1})\textsubscript{\zref@extract{#1}{chaptername}}\fi}
\makeatother

\begin{document}
\chapter{First}
\myref{eq:1}, \myref{eq:2}, \myref{eq:3}, \myref{eq:4}
\section{First First}
\begin{equation}\zlabel{eq:1}
  E=\gamma m
\end{equation}
\section{First Second}
\begin{equation}\zlabel{eq:2}
  0=0
\end{equation}
\chapter{Second}
\myref{eq:1}, \myref{eq:2}, \myref{eq:3}, \myref{eq:4}
\begin{equation}\zlabel{eq:3}
  e^{i\pi}+1=0
\end{equation}
\chapter{Third}
\myref{eq:1}, \myref{eq:2}, \myref{eq:3}, \myref{eq:4}
\begin{equation}\zlabel{eq:4}
  f(w) = \frac{1}{2i\pi}\oint_{C_w}\frac{f(z)\mathrm{d}z}{z-w}
\end{equation}
\chapter{Last}
\myref{eq:1}, \myref{eq:2}, \myref{eq:3}, \myref{eq:4}
\end{document}

코드에서와 마찬가지로 \zref@newprop추적할 새 속성을 설정하는 데 사용됩니다. \zlabel명령이 호출될 때 올바른 데이터를 가져올 수 있는 방법이 필요합니다 . 장 번호의 경우 이는 \thechapter이미 사용한 에 있습니다. 장 제목의 경우 이를 저장하고 이 이름이 설정되도록 명령을 \currentchaptername수정합니다 . \chapter다른 이름(예: 더 짧은 이름)을 사용하려면 명령 \currentchaptername바로 다음에 다시 정의할 수 있습니다 \chapter. 이제 참조 명령에서 \myref먼저 발행하여 레이블 데이터를 얻은 \zrefused다음 \zref@extract특정 필드를 가져옵니다.

chapter방정식의 상대 번호 매기기를 s 가 아닌 s 내에 있도록 변경했습니다 section. 그렇지 않으면 중복된 레이블이 표시됩니다. 정말로 각 섹션에서 재설정을 원하는 경우 대신 관련 섹션 제목을 참조해야 하며 zref-titleref직접 사용할 수도 있습니다.

위의 코드는 번호가 매겨진 장의 제목만 가져옵니다. 원하는 경우 \chapter*via 에 유사한 패치를 적용할 수도 있고 , 그러한 상황에서는 직접 직접 설정할 수도 있습니다.@schapter\currentchatpername

관련 정보