使用其他章節標題精煉方程式編號

使用其他章節標題精煉方程式編號

我想以這種方式使用書本類和數字方程式:

方程式必須只包含方程數沒有 章節號。我得到這個使用

    \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

相關內容