уточненная нумерация уравнений с использованием другого названия главы

уточненная нумерация уравнений с использованием другого названия главы

Я хотел бы использовать класс книги и численное уравнение таким образом:

Уравнение должно содержать только номер уравнениябез Номер главы. Я получаю это с помощью

    \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}не возвращает число и поэтому невозможно сравнить с `\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получив определенное поле.

Я изменил вашу относительную нумерацию уравнений, чтобы она была в пределах chapters, а не sections, иначе вы получите дублирующиеся метки. Если вы действительно хотите сбросить в каждом разделе, то вы также должны ссылаться на соответствующее название раздела, и, вероятно, могли бы использовать zref-titlerefнапрямую.

Приведенный выше код захватывает только заголовки пронумерованных глав. Вы можете применить аналогичный патч к \chapter*via @schapter, если хотите, или же установить его \currentchatpernameсамостоятельно в таких обстоятельствах.

Связанный контент