我想要两个命令\makelabel{foo}
并\referlabel{foo}
像示例中那样使用
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[ A \overset{\makelabel{foo}}{=} B \overset{\makelabel{bar}}{=} C \]
where \referlabel{foo} is given by \ldots and \referlabel{bar} is given by \ldots
\[ C \overset{\makelabel{foobar}}{=} D\]
Equality \referlabel{foobar} \ldots
\end{document}
使得输出与代码相同
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[ A \overset{(1)}{=} B \overset{(2)}{=} C \]
where (1) is given by \ldots and (2) is given by \ldots
\[ C \overset{(3)}{=} D\]
Equality (3) \ldots
\end{document}
也就是说,标签应该从计数器创建。可能的话,\referlabel{foo}
应该创建一个超链接\makelabel{foo}
。您能给我指出现有的解决方案或指出如何实现命令吗?
答案1
\makelabel
已经是一个已知命令,因此我将界面更改为\setlabel
/ \reflabel
:
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcounter{labelcnt}
\renewcommand{\thelabelcnt}{(\arabic{labelcnt})}
\newcommand{\setlabel}[1]{%
\refstepcounter{labelcnt}\ltx@label{lbl:#1}%
{\text{\upshape\thelabelcnt}}%
}
\newcommand{\reflabel}[1]{\text{\upshape\ref{lbl:#1}}}
\makeatother
\begin{document}
\[
A \overset{\setlabel{foo}}{=} B \overset{\setlabel{bar}}{=} C
\]
where~\reflabel{foo} is given by \ldots and~\reflabel{bar} is given by \ldots
\[
C \overset{\setlabel{foobar}}{=} D
\]
Equality~\reflabel{foobar} \ldots
\end{document}
\label
为了避免加载“多个”错误amsmath
,我们使用传统的 LaTeX\label
宏,存储在 中\ltx@label
。