verfeinerte Gleichungsnummerierung unter Verwendung anderer Kapiteltitel

verfeinerte Gleichungsnummerierung unter Verwendung anderer Kapiteltitel

Ich möchte die Buchklasse und die Zahlengleichung folgendermaßen verwenden:

Die Gleichung muss nur die Anzahl der Gleichungen enthaltenohne Kapitelnummer. Ich erhalte dies mit

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

Wenn ich dann \refden Befehl verwende, möchte ich, dass

  1. wenn \refim selben Kapitel der Gleichung der Verweis aufgerufen wird, ist nur(equation)
  2. wenn \refin einem anderen Kapitel der Gleichung der Verweis aufgerufen wird,(equation)\textsubscript{name-of-the-chapter-containing-equation}

Hier ist mein Versuch mitzref

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

Ich habe zwei Probleme bei der Definition von\myref

  1. \ifnumfunktioniert nicht richtig, weil möglicherweise \zref[chapter]{#1}keine Zahl zurückgegeben wird und daher ein Vergleich mit `\thechapter' nicht möglich ist.

  2. Ich muss einen Befehl finden, um den Kapitelnamen entsprechend einer Nummer zu erhalten (oder vielleicht zu verwenden \nameref)

Wie kann ich sie lösen?

Antwort1

Gehen Sie hierzu folgendermaßen vor: Verwenden Sie zunächst \zrefusedund , \zref@extractum den zu vergleichenden Wert abzurufen und die zusätzliche Formatierung auszulösen.

Jetzt vermittelt Ihnen das Paket zref-titlerefeine Vorstellung davon, wie Sie das Titelfeld erhalten, es wird jedoch nicht nur bei Kapiteln, sondern auch bei Abschnitten usw. aktualisiert. Stattdessen schreiben wir also eine geänderte Version des zref-titlerefCodes, die nur die Kapitelüberschriften erfasst.

Beispielausgabe Zweite Probe

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

Wie in Ihrem Code \zref@newpropwird verwendet, um neue zu verfolgende Eigenschaften einzurichten. Diese müssen eine Möglichkeit haben, die richtigen Daten zum Zeitpunkt des \zlabelBefehlsaufrufs abzurufen. Für die Kapitelnummer ist dies in \thechapter, das Sie bereits verwendet haben. Für den Kapiteltitel speichern wir dies in \currentchapternameund ändern den \chapterBefehl so, dass dieser Name festgelegt wird. Wenn Sie einen anderen (z. B. kürzeren) Namen verwenden möchten, können Sie ihn \currentchapternameunmittelbar nach dem \chapterBefehl neu definieren. Jetzt erhalten wir im Referenzierungsbefehl \myrefdie Beschriftungsdaten, indem wir zuerst \zrefusedund dann \zref@extractein bestimmtes Feld abrufen.

Ich habe Ihre relative Nummerierung der Gleichungen so geändert, dass sie innerhalb chaptervon s statt sections liegt, sonst erhalten Sie doppelte Beschriftungen. Wenn Sie wirklich in jedem Abschnitt eine Neueinstellung wünschen, sollten Sie stattdessen auch auf den entsprechenden Abschnittstitel verweisen und diesen wahrscheinlich zref-titlerefdirekt verwenden.

Der obige Code erfasst nur die Titel nummerierter Kapitel. Sie können einen ähnlichen Patch auf \chapter*via anwenden @schapter, wenn Sie möchten, oder ihn \currentchatpernamein solchen Fällen alternativ direkt selbst festlegen.

verwandte Informationen