나는 그런 식으로 책 클래스와 숫자 방정식을 사용하고 싶습니다.
방정식은 방정식의 수만 전달해야 합니다.없이 장 번호. 나는 이것을 사용하여 얻는다
\renewcommand{\theequation}{\arabic{equation}}
그런 다음 명령을 사용할 때 \ref
나는 그것을 원합니다
\ref
방정식의 동일한 장에서 호출되는 경우 참조는 다음과 같습니다.(equation)
\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
\ifnum
\zref[chapter]{#1}
might는 숫자를 반환하지 않으므로 `\thechapter'와 비교할 수 없기 때문에 제대로 작동하지 않습니다.\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