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 \ref
den Befehl verwende, möchte ich, dass
- wenn
\ref
im selben Kapitel der Gleichung der Verweis aufgerufen wird, ist nur(equation)
- wenn
\ref
in 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
\ifnum
funktioniert nicht richtig, weil möglicherweise\zref[chapter]{#1}
keine Zahl zurückgegeben wird und daher ein Vergleich mit `\thechapter' nicht möglich ist.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 \zrefused
und , \zref@extract
um den zu vergleichenden Wert abzurufen und die zusätzliche Formatierung auszulösen.
Jetzt vermittelt Ihnen das Paket zref-titleref
eine 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-titleref
Codes, die nur die Kapitelüberschriften erfasst.
\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@newprop
wird verwendet, um neue zu verfolgende Eigenschaften einzurichten. Diese müssen eine Möglichkeit haben, die richtigen Daten zum Zeitpunkt des \zlabel
Befehlsaufrufs abzurufen. Für die Kapitelnummer ist dies in \thechapter
, das Sie bereits verwendet haben. Für den Kapiteltitel speichern wir dies in \currentchaptername
und ändern den \chapter
Befehl so, dass dieser Name festgelegt wird. Wenn Sie einen anderen (z. B. kürzeren) Namen verwenden möchten, können Sie ihn \currentchaptername
unmittelbar nach dem \chapter
Befehl neu definieren. Jetzt erhalten wir im Referenzierungsbefehl \myref
die Beschriftungsdaten, indem wir zuerst \zrefused
und dann \zref@extract
ein bestimmtes Feld abrufen.
Ich habe Ihre relative Nummerierung der Gleichungen so geändert, dass sie innerhalb chapter
von s statt section
s 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-titleref
direkt 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 \currentchatpername
in solchen Fällen alternativ direkt selbst festlegen.