![如何告诉 cleveref 本地不对引用进行排序](https://linux22.com/image/458126/%E5%A6%82%E4%BD%95%E5%91%8A%E8%AF%89%20cleveref%20%E6%9C%AC%E5%9C%B0%E4%B8%8D%E5%AF%B9%E5%BC%95%E7%94%A8%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F.png)
cleveref 手册声明如下:
当 cleveref 排版多个交叉引用或页面引用的列表时,默认行为是自动对列表进行排序,并将连续的交叉引用或页码序列压缩到引用范围中。您可以通过提供以下包选项之一来更改此行为:
种类对交叉引用列表进行排序,但不要压缩连续的引用。
压缩将连续引用序列压缩到引用范围内,但不对交叉引用列表进行排序。
不排序既不对交叉引用列表进行排序,也不压缩连续引用。sort&compress 对交叉引用列表进行排序,并将连续引用序列压缩到引用范围中(这是默认设置)。
有时,您可能希望防止特定序列的连续交叉引用被压缩到参考范围,而无需全局禁用此功能。
但是,它没有说明如何本地禁用对引用的排序。可以这样做吗?
MWE 输出:
\documentclass{article}
\usepackage{cleveref}
\begin{document}
First equation:
\begin{equation}
\label{equation:first}
a=2
\end{equation}
Second equation:
\begin{equation}
\label{equation:second}
b=1
\end{equation}
As seen in \Cref{equation:second,equation:first}
\end{document}
目标是获得“如公式 (2) 和 (1) 所示”的结果,但不停止更全局范围的排序。
答案1
您可以在本地停用排序功能:
\documentclass{article}
\usepackage{cleveref}
\makeatletter
\newcommand*{\Crefns}[1]{{\@cref@sortfalse\Cref{#1}}}
\makeatother
\begin{document}
First equation:
\begin{equation}
\label{equation:first}
a=2
\end{equation}
Second equation:
\begin{equation}
\label{equation:second}
b=1
\end{equation}
As seen in \Crefns{equation:second,equation:first}
\end{document}
也许您还想停用压缩功能:
\documentclass{article}
\usepackage{cleveref}
\makeatletter
\newcommand*{\Crefns}[1]{{\@cref@sortfalse\@cref@compressfalse\Cref{#1}}}
\makeatother
\begin{document}
First equation:
\begin{equation}
\label{equation:first}
a=2
\end{equation}
Second equation:
\begin{equation}
\label{equation:second}
b=1
\end{equation}
As seen in \Crefns{equation:second,equation:first}
\end{document}
但是,请注意,此建议使用了 的内部结构cleveref
。因此,当内部结构发生变化时,它可能会在未来失败。