我想以這種方式使用書本類和數字方程式:
方程式必須只包含方程數沒有 章節號。我得到這個使用
\renewcommand{\theequation}{\arabic{equation}}
然後當使用\ref
指令時我會喜歡
- 如果
\ref
在方程式的同一章中調用,則引用只是(equation)
- 如果
\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
\ifnum
無法正常工作,因為可能\zref[chapter]{#1}
不返回數字,因此無法與“\thechapter”進行比較我必須找到一個命令來獲取與數字對應的章節名稱(或者可能使用
\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
我已將方程式的相對編號更改為chapter
s 內而不是section
s 內,否則您將得到重複的標籤。如果您確實想在每個部分進行重置,那麼您還應該引用相關的部分標題,並且可以直接使用zref-titleref
。
上面的程式碼僅取得編號章節的標題。如果您願意,您可以對\chapter*
via套用類似的補丁,或者在這種情況下直接自行設定。@schapter
\currentchatpername