考虑一个简单的宏,\Eqs{ref1}{ref2}
,接受引用ref1
和ref2
作为参数。在当前环境中,命令\ref{ref1}
和\ref{ref2}
扩展为简单的未格式化整数,例如15
和16
。称它们为x1和x2。
我想做\Eqs
以下事情:
如果x2=x1+ 1,扩展为“(x1--x2)”,其中“--”为短划线
在任何其他情况下,扩展为“(x1,x2)”
例如,如果,\ref{ref1}
分别扩展为 15、16 和 25,则将得到“(15–16)”和“(15,25)”。\ref{ref2}
\ref{ref3}
\Eqs{ref1}{ref2}
\Eqs{ref1}{ref3}
任何帮助,将不胜感激。
(顺便说一句,众所周知的圣杯是一个宏,它接受以逗号分隔的参考列表,然后将连续的范围组合在一起,例如\Eqs{ref1,ref2,ref3}
返回“(15-16,25)”,但我意识到这是一个很高的要求,除非已经作为某个包的一部分实现。)
答案1
以下是您所追求的基本实现。cleveref
然而,在展示和与其他包的交互方面,它做得更多。此外,它还接受逗号分隔的列表并对元素进行排序。
\documentclass{article}
\usepackage{refcount}
\newcommand{\Eqs}[2]{%
\mbox{\upshape
(%
\ref{#1}% Set first reference
\ifnum\getrefnumber{#2}=\numexpr\getrefnumber{#1}+1\relax
--% References are one apart
\else
,\,% References are not one apart
\fi
\ref{#2}% Set second reference
)%
}%
}
\begin{document}
\setcounter{equation}{14}\refstepcounter{equation}\label{eq:15}% Equation 15
\refstepcounter{equation}\label{eq:16}% Equation 16
\setcounter{equation}{24}\refstepcounter{equation}\label{eq:25}% Equation 25
See \Eqs{eq:15}{eq:16}, or \Eqs{eq:15}{eq:25}.
\end{document}