来自方程范围参考的条带截面号

来自方程范围参考的条带截面号

我正在尝试调整方程范围编号从(1.10)-(1.15)(1.10-15)

通过在序言中调用此:

\crefrangelabelformat{equation}{(#3#1#4-#5#2#6)}

然后在文档中这样写:

\Crefrange{eq:1-10}{eq:1-15}

我已经将范围放在相同的括号内,即(1.10-1.15),但我无法从范围中的第二个标签中删除部分编号。有没有办法{eq:1-15}在调用之前调整标签\Crefrange(即更改1.15为),然后在调用后将其改回?我需要将其改回,因为在其他位置我单独引用 1.15,因此需要保留部分编号。或者,我可以从传递给 的15格式化文本( )中删除部分编号吗?#2\crefrangelabelformat

任何帮助均感激不尽。

答案1

#1#2包含\crefrangelabelformat格式化的方程编号。以下示例将它们展开并存储在\eq@ref@a和中\eq@ref@b。然后分析两者,看方程编号是否有点分隔符。如果是,则比较前部分\eq@ref@b,如果前部分相等,则省略 中的前部分。

\documentclass{report}
\usepackage{cleveref}

\makeatletter
\crefrangelabelformat{equation}{%
  \protected@edef\eq@ref@a{#1}%
  \protected@edef\eq@ref@b{#2}%
  \expandafter\expandafter\expandafter
  \eq@ref@check\expandafter\eq@ref@a\expandafter.\expandafter\@nil
                           \eq@ref@b.\@nil
  (%
    #3\eq@ref@a#4%
    --%
    #5\eq@ref@b#6%
  )%
}
\def\eq@ref@check#1.#2\@nil#3.#4\@nil{%
  \def\eq@tmp{#2}%
  \ifx\eq@tmp\@empty
  \else
    \def\eq@tmp{#4}%
    \ifx\eq@tmp\@empty
    \else
      \def\eq@tmp@a{#1}%
      \def\eq@tmp@b{#3}%
      \ifx\eq@tmp@a\eq@tmp@b
        \expandafter\def\expandafter\eq@ref@b\expandafter{%
          \eq@strip@dot#4\@nil
        }%
      \fi 
    \fi
  \fi
}
\def\eq@strip@dot#1.\@nil{#1}
\makeatother

\begin{document}
\crefrange{eq:first}{eq:second} and \crefrange{eq:second}{eq:third}
\chapter{First chapter}
\addtocounter{equation}{9}
\begin{equation}
\label{eq:first}
1=1
\end{equation}
\addtocounter{equation}{4}
\begin{equation}
\label{eq:second}
2=2
\end{equation}
\chapter{Second chapter}
\begin{equation}
\label{eq:third}
3=3
\end{equation}
\end{document}

结果

相关内容