我希望每个章节都有一组封闭的标签,这意味着不同的章节可以包含相同的标签,如果我\eqref
在该章节中使用,则只在同一章节中查找标签,否则会显示“未定义标签”。总之,我希望每个章节都有独立的标签。我可以这样做吗?
答案1
您可以创建一个宏来自动添加chap<chapternumber>:
在每个标签前,并进行更改\ref
以便它搜索带有chap<chapternumber>:
前缀的引用。
\documentclass{book}
\usepackage{amsmath}
\let\normallabel\label
\let\normalref\ref
\makeatletter
% Poor man's version of ConTeXt's \expanded macro
\newcommand\expanded[1]
{\xdef\EXPANDED@MACRO{\noexpand#1}\EXPANDED@MACRO}
\makeatother
\newcommand\customlabel[1]
{\expanded{\normallabel{chap\thechapter:#1}}}
\newcommand\customref[1]
{\normalref{chap\thechapter:#1}}
\let\ref\customref
\let\label\customlabel
% AMSMath changes the behavior of label.
\makeatletter
\let\ltx@label\customlabel
\makeatother
\begin{document}
\chapter{First chapter}
\begin{equation}\label{eq:first}
a = b + c
\end{equation}
It is shown in \eqref{eq:first} (\ref{eq:first}) that \ldots
\chapter{Second chapter}
\begin{equation}\label{eq:first}
a = b + c
\end{equation}
It is shown in \eqref{eq:first} (\ref{eq:first}) that \ldots
\end{document}
如果你打开filename.aux
文件,你会看到:
\relax
\@writefile{toc}{\contentsline {chapter}{\numberline {1}First chapter}{1}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{chap1:eq:first}{{1.1}{1}}
\@writefile{toc}{\contentsline {chapter}{\numberline {2}Second chapter}{3}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{chap2:eq:first}{{2.1}{3}}
因此,标签写为{chap1:eq:first}
、{chap2:eq:first}
等。所以,每个章节的标签都是唯一的。