我正在尝试调整方程范围编号从(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}