numeração de equações refinada usando outro título de capítulo

numeração de equações refinada usando outro título de capítulo

Eu gostaria de usar a classe do livro e a equação numérica dessa maneira:

A equação deve conter apenas o número de equaçõessem número do capítulo. Eu entendo isso usando

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

Então, ao usar \refo comando, eu gostaria disso

  1. se the \reffor invocado no mesmo capítulo da equação, a referência é apenas(equation)
  2. se \reffor invocado em outro capítulo da equação a referência a ser(equation)\textsubscript{name-of-the-chapter-containing-equation}

Aqui está minha tentativa de usarzref

\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}

Tenho dois problemas na definição de\myref

  1. \ifnumnão funciona corretamente porque talvez \zref[chapter]{#1}não retorne um número e por isso é impossível comparar com `\thechapter'

  2. Eu tenho que encontrar um comando para obter o nome do capítulo correspondente a um número (ou talvez para usar \nameref)

Como posso resolvê-los?

Responder1

Você pode fazer isso da seguinte maneira. Primeiro use \zrefusede \zref@extractpara obter o valor a ser comparado para acionar a formatação extra.

Agora o pacote zref-titlerefdá a você a ideia de como obter o campo de título, mas ele atualiza não apenas nos capítulos, mas também nas seções, etc. Então, em vez disso, escrevemos uma versão modificada do zref-titlerefcódigo, que apenas captura os títulos dos capítulos.

Exemplo de saída Segunda amostra

\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}

Como no seu código, \zref@newpropé usado para configurar novas propriedades a serem rastreadas. Eles precisam encontrar uma maneira de obter os dados corretos no momento em que o \zlabelcomando é chamado. Para o número do capítulo está em \thechapter, que você já usou. Para o título do capítulo, armazenamos isso \currentchapternamee modificamos o \chaptercomando para que este nome seja definido. Se desejar usar um nome diferente (por exemplo, mais curto), você poderá redefinir \currentchapternameimediatamente após o \chaptercomando. Agora, no comando de referência \myref, obtemos os dados do rótulo emitindo primeiro \zrefusede depois \zref@extractobtendo um campo específico.

Alterei a numeração relativa das equações para chapters em vez de sections, caso contrário, você obterá rótulos duplicados. Se você realmente deseja redefinir cada seção, também deve fazer referência ao título da seção relevante e provavelmente poderá usá-lo zref-titlerefdiretamente.

O código acima captura apenas títulos de capítulos numerados. Você pode aplicar um patch semelhante \chapter*via, @schapterse desejar, ou, alternativamente, definir \currentchatpernamevocê mesmo em tais circunstâncias.

informação relacionada