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 \ref
o comando, eu gostaria disso
- se the
\ref
for invocado no mesmo capítulo da equação, a referência é apenas(equation)
- se
\ref
for 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
\ifnum
não funciona corretamente porque talvez\zref[chapter]{#1}
não retorne um número e por isso é impossível comparar com `\thechapter'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 \zrefused
e \zref@extract
para obter o valor a ser comparado para acionar a formatação extra.
Agora o pacote zref-titleref
dá 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-titleref
código, que apenas captura os títulos dos capítulos.
\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 \zlabel
comando é chamado. Para o número do capítulo está em \thechapter
, que você já usou. Para o título do capítulo, armazenamos isso \currentchaptername
e modificamos o \chapter
comando para que este nome seja definido. Se desejar usar um nome diferente (por exemplo, mais curto), você poderá redefinir \currentchaptername
imediatamente após o \chapter
comando. Agora, no comando de referência \myref
, obtemos os dados do rótulo emitindo primeiro \zrefused
e depois \zref@extract
obtendo um campo específico.
Alterei a numeração relativa das equações para chapter
s em vez de section
s, 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-titleref
diretamente.
O código acima captura apenas títulos de capítulos numerados. Você pode aplicar um patch semelhante \chapter*
via, @schapter
se desejar, ou, alternativamente, definir \currentchatpername
você mesmo em tais circunstâncias.