考虑以下最小示例:
\documentclass{article}
\usepackage{listings}
\usepackage{cleveref}
% \crefname{lstnumber}{line}{Line}
\begin{document}
% \section{Section}
\begin{lstlisting}[escapechar=@]
Lorem ipsum@\label{lineref}@
\end{lstlisting}
See \cref{lineref}: line~\ref{lineref}.
\end{document}
编译此文档(两次)会产生警告
LaTeX 警告:输入行 16 上标签类型 `` 的 cref 参考格式未定义。
输出为:
看??:第 1 行。
如果我取消注释该\section{Section}
行,则所有内容都会编译,并且引用结果为
参见第 1 节:第 1 行。
似乎 cleveref 出于某种原因选择了最接近的环境引用,而不是引用行号。请注意,在较长的示例中,该\ref
命令始终会生成正确的行号。
我使用的 cleveref 版本不需要手册\crefname{lstnumber}{line}{Line}
,事实上,取消注释不会改变任何东西。
我的日志文件中的相关信息是:
This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian) (format=pdflatex 2011.7.11) 21 APR 2012 21:29
...
(/usr/share/texmf-texlive/tex/latex/listings/listings.sty
...
(/usr/share/texmf-texlive/tex/latex/listings/lstmisc.sty
File: lstmisc.sty 2007/02/22 1.4 (Carsten Heinz)
...
(/usr/share/texmf-texlive/tex/latex/listings/listings.cfg
File: listings.cfg 2007/02/22 1.4 listings configuration
...
Package: listings 2007/02/22 1.4 (Carsten Heinz)
...
(/home/cs-students/12abs1/texmf/tex/latex/cleveref/cleveref.sty
Package: cleveref 2012/02/15{} v0.18.4{} Intelligent cross-referencing
Package cleveref Info: `listings' support loaded on input line 2843.
Package cleveref Info: loaded `english' language definitions on input line 6732
...
对于正在发生的事情或如何解决它,您有什么想法吗?
答案1
尝试最新版本 v0.18.5。更新日志显示
修复列表和算法包支持,由于更改为本地而不是全局
\cref@currentlabel
定义而中断....
从 Gonzalo Medina 的评论来看,这似乎解决了问题,但如果没有,我建议你应该写信给 cleveref 的作者 Toby Cubitt,并提供你的 MWE。他非常乐于助人,很可能会修复错误。