我想使用cleveref
自动引用目标类型识别,但更口头页面引用varioref
。这是我的 MWE:
\documentclass{report}
\usepackage{varioref}
%\usepackage{cleveref} % note cleveref package changes type of ref..
% and style of references to last/next page
\begin{document}
% This figure appears on page 1.
\begin{figure}[!htb]
\centering
\rule{24pt}{24pt}
\caption{The famous black square}
\label{OneBlackSquare}
\end{figure}
% This sentence appears on page 2.
\clearpage
The non-color black is shown in \vref{OneBlackSquare}.
\end{document}
当使用该包时,它会产生一个很好的阅读口头参考varioref
:
唯一缺少的是自动目标类型。启用该cleveref
包会添加这个非常好的功能,但也会覆盖 的所有口头行为varioref
。无论目标空间如何,所有引用都按页码而不是“下一页”定位。
但是我怎样才能将它们结合起来得到:
- 自动目标类型如图形或方程式
cleveref
和 - 如果目标位于最后一页/下一页,是否需要对其位置进行口头描述以提高读者的阅读流畅度?
一周后编辑:我没有收到任何解决方案,而且两份文档都无法解决我的问题。因此我坚持varioref
并在文本中硬编码了浮动对象的类型。
答案1
一个很棒的错误! cleveref 包中缺少一个空格字符。第 2337 行当前内容为:
\advance\@tempcnta-2%
但应为:
\advance\@tempcnta-2 %
是的,就是那个空格字符(参见TeX 计数和 LaTeX 计数器之间有什么区别?)。
我已经通知了 Toby Cubitt,但是现在您可以本地修复您的软件包源,或者按如下方式覆盖序言中的更改:
\documentclass{report}
\usepackage{varioref}
\usepackage{cleveref}
\makeatletter
\def\cref@old@@vpageref#1[#2]#3{%
\leavevmode%\unskip <<<
\global\advance\c@vrcnt\@ne%
\vref@pagenum\@tempa{\the\c@vrcnt @vr}%
\vref@pagenum\@tempb{\the\c@vrcnt @xvr}%
%\vref@label{\the\c@vrcnt @xvr}% <<<
\ifx\@tempa\@tempb\else%
\vref@err{\noexpand\vref or \noexpand\vpageref at page boundary
\@tempb-\@tempa\space (may loop)%
}%
\fi%
\vrefpagenum\thevpagerefnum{#3}%
\vref@space%
\ifx\@tempa\thevpagerefnum%
\def\@tempc{#1}%
\ifx\@tempc\@empty%
\unskip%
\else%
#1%
\fi%
\else%
#2%
\is@pos@number\thevpagerefnum%
{%
\is@pos@number\@tempa%
{\@tempcnta\@tempa%
\advance\@tempcnta\@ne%
}%
{\@tempcnta\maxdimen}%
\ifnum \thevpagerefnum =\@tempcnta%
\ifodd\@tempcnta%
\if@twoside%
\reftextfaceafter%
\else%
\reftextafter%
\fi%
\else%
\reftextafter%
\fi%
\else%
\advance\@tempcnta-2 % <--- there was a space missing here!
\ifnum \thevpagerefnum =\@tempcnta%
\ifodd\@tempcnta%
\reftextbefore%
\else%
\if@twoside%
\reftextfacebefore%
\else%
\reftextbefore%
\fi%
\fi%
\else%
\reftextfaraway{#3}%
\fi%
\fi%
}%
{\reftextfaraway{#3}}%
\fi%
\vref@label{\the\c@vrcnt @xvr}% <<<
\vref@label{\the\c@vrcnt @vr}%
}%
\makeatother
\begin{document}
% This figure appears on page 1.
\begin{figure}[!htb]
\centering
\rule{24pt}{24pt}
\caption{The famous black square}
\label{OneBlackSquare}
\end{figure}
% This sentence appears on page 2.
\clearpage
The non-color black is shown in \vref{OneBlackSquare}.
\end{document}
这给出了预期的结果:
The non-color black is shown in Fig. 1 on the preceding page.
答案2
就像是:
\newcommand{\refthing}[1]{\cref{#1}, \vpagerefnearby{#1}{\vpageref{#1}}{\cpageref{#1}}}
应该这么做。