假设我有一个方程
a = b + c (1.5)
在第 2 章中。在第 2 章中,我想将其称为“方程 (1.5)”。但是从其他章节开始,我想以不同的方式引用此方程,例如“方程 (2;1.5)”。
通常我把方程写成以下形式
\begin{equation}
\label{1.5}
a = b + c.
\end{equation}
并在参考处写上“ \eqref{1.5}
”。但是我无法用两个标签标记同一个方程式,以便在不同的参考文献中选择合适的方程式。我该怎么做呢?
答案1
不要使用这样的标签名称,因为1.5
它们容易出错,因为方程式编号会发生变化(这正是使用易于记忆的名称而不是数字的意义所在)
我正在使用它zref
来存储章节,然后使用\moreref
(作为包装器\zref@extract
)提取它
\eqref
不适用于zref
-labels,因此请重新定义\eqref
或提供包装器。
\documentclass{book}
\usepackage{amsmath}
\numberwithin{equation}{section}
\renewcommand{\theequation}{\arabic{section}.\arabic{equation}}
\usepackage[user]{zref}
\makeatletter
\zref@newprop{chapter}{\thechapter}
\zref@addprop{main}{chapter}
\newcommand{\moreref}[1]{%
\zref@ifrefundefined{#1}{%
}{%
(equation \zref@extract{#1}{chapter},\zref{#1})%
}%
}
\newcommand{\zeqref}[1]{%
equation \zref{#1}%
}
\makeatother
\begin{document}
\chapter{Number One}
\chapter{Number Two}
\section{A section}
\begin{equation}
\zlabel{someequation}
a = b + c.
\end{equation}
In \moreref{someequation} or \zeqref{someequation}
\end{document}
使用丑陋的黑客进行更新
解释:该\morelabel
命令设置了两个标签,一个是假的,一个是真的。
因为equation
(或者更确切地说:amsmath
不允许在内部有两个标签equation
并重新定义,所以\label
我使用了外部标签定义来存储假标签\@currentlabel
。
然后命令\longref
提取标签。more::#1
\documentclass{book}
\usepackage{amsmath}
\numberwithin{equation}{section}
\renewcommand{\theequation}{\arabic{section}.\arabic{equation}}
\makeatletter
\let\latex@@label\label
\newcommand{\morelabelformat}{%
(equation \thechapter,\theequation)%
}
\newcommand{\morelabel}[1]{%
\let\@oldcurrentlabel\@currentlabel%
\edef\@currentlabel{\morelabelformat}
\latex@@label{more::#1}%
\let\@currentlabel\@oldcurrentlabel
\label{#1}%
}
\newcommand{\longref}[1]{%
\@ifundefined{r@more::#1}{%
% Do nothing!
}{%
\ref{more::#1}%
}%
}
\makeatother
\begin{document}
\chapter{Number One}
\chapter{Number Two}
\section{A section}
\begin{equation}
\morelabel{someequation}
a = b + c.
\end{equation}
In \longref{someequation} or \eqref{someequation}
\end{document}
答案2
很抱歉,但对于问题中描述的情况,最简单的解决方案是:不要只手动添加标签,还要手动添加引用。换句话说:根本不要使用标签引用机制。
Knuth 也手工对物品进行了编号。