LaTeX 代码用于将连续方程引用格式化为与非连续引用不同?

LaTeX 代码用于将连续方程引用格式化为与非连续引用不同?

考虑一个简单的宏,\Eqs{ref1}{ref2},接受引用ref1ref2作为参数。在当前环境中,命令\ref{ref1}\ref{ref2}扩展为简单的未格式化整数,例如1516。称它们为x1x2

我想做\Eqs以下事情:

  • 如果x2=x1+ 1,扩展为“(x1--x2)”,其中“--”为短划线

  • 在任何其他情况下,扩展为“(x1x2)”

例如,如果,\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}

相关内容