使用 varioref 和 cleveref 压缩“页面”标签

使用 varioref 和 cleveref 压缩“页面”标签

如果存在多个相同类型(比如章节)的交叉引用,即使不是连续的,cleveref's\cref命令也会使用复数形式压缩引用的标签:例如,\cref{foo2,foo4,foo6}可以打印:

第2、4和6节

代替:

第 2 节、第 4 节和第 6 节

如果也加载了,则可以通过其命令(由 重新定义)代替 来varioref添加页码。\vrefcleveref\cref

但是,“页面”标签未被压缩,如以下 MWE\vref{foo2,foo4,foo6}打印所示:

第 4 页、第 8 页和第 12 页的第 2、4 和 6 节。

可以预期的是:

第 4、8 和 12 页的第 2、4 和 6 节。

特别是从:

  • \cpageref做正确的工作,
  • cleveref的文档代码声称在重新定义中使用\cpageref而不是:\vpageref\vref

    由于\cref可以处理多个引用,我们将\vrefet al. 的页面引用魔法扩展为使用\cpageref ,并借助\@setvpageref\@vpagerefrange (使用命令排版页面引用varioref)。前者负责处理多引用,后者负责varioref页面引用魔法。

你知道发生了什么吗?

\documentclass{article}
\usepackage{multido}
\usepackage{varioref}
\usepackage{cleveref}
%
\newcommand{\test}[1]{%
  \section{#1}\label{#1}
  \newpage
  #1
  \newpage
}
%
\begin{document}
\begin{itemize}
\item \verb|\cref{foo2,foo4,foo6}|: \cref{foo2,foo4,foo6}
\item \verb|\vref{foo2,foo4,foo6}|: \vref{foo2,foo4,foo6}
\item \verb|\cpageref{foo2,foo4,foo6}|: \cpageref{foo2,foo4,foo6}
\item \verb|\vpageref{foo2,foo4,foo6}|: \vpageref{foo2,foo4,foo6}
\end{itemize}
\newpage
\multido{\i=1+1}{6}{%
  \test{foo\i}
}
\end{document}

答案1

这是由于 的限制varioref。连续页面引用 使用 时会压缩variorefcleveref但是,避免在每个页面引用(或页面引用组)之前打印“在第 x 页上”将意味着重写 的大部分内容varioref

到那时,cleveref可能会是替换varioref而不是接入。也许这有道理。但这不太可能很快发生。

相关内容