使用 \cref 时显示 ?? 而不是列表列表的名称

使用 \cref 时显示 ?? 而不是列表列表的名称

我将标签名称更改为lstlisting算法,它作为标题效果很好。但是当我使用时\cref,它显示 ?? 1,而不是算法 1。

\documentclass{scrreprt}
\usepackage{etex}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{bm}
\usepackage[utf8]{inputenc}
\usepackage[pdftex,final]{graphicx}
\usepackage[english]{babel}
\usepackage{color}
\usepackage{hyperref}
\usepackage[noabbrev]{cleveref}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{matlab-prettifier}

\renewcommand\lstlistingname{Algorithm}
\begin{document}

\cref{example}

\begin{lstlisting}[style=Matlab-editor, caption=A caption, label={example}]
%My listing
end
\end{lstlisting}

\end{document}

我已经尝试过了\crefname{listing}{algorithm}{algorithms}但它对我来说仍然不起作用。

答案1

该包cleveref是应该最后加载的包之一,即使 hyperref,因为它对计数器和标签/引用做了很多重新定义(当然,因为这是主题cleveref所涉及的)。

\documentclass{scrreprt}
\usepackage{etex}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{bm}
\usepackage[utf8]{inputenc}
\usepackage[pdftex,final]{graphicx}
\usepackage[english]{babel}
\usepackage{color}
\usepackage{hyperref}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{matlab-prettifier}
\usepackage[noabbrev]{cleveref}


\renewcommand\lstlistingname{Algorithm}
\crefname{listing}{algorithm}{algorithms}

\begin{document}

\cref{example}

\begin{lstlisting}[style=Matlab-editor, caption=A caption, label={example}]
%My listing
end
\end{lstlisting}

\end{document}

在此处输入图片描述

答案2

Cleveref 必须告知您要赋予环境的名称。这里有一个解决方案,它动态地(部分地)使用环境的名称。代码可以写在一个cleveref.cfg文件中:

\documentclass{scrreprt}
\usepackage{etex}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{bm}
\usepackage[utf8]{inputenc}
\usepackage[pdftex,final]{graphicx}
\usepackage[english]{babel}
\usepackage{color}
\usepackage{hyperref}
\usepackage[noabbrev]{cleveref}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{matlab-prettifier}
\crefname{lstlisting}{\MakeLowercase\lstlistingname}{\MakeLowercase\lstlistingname s}
\Crefname{lstlisting}{\lstlistingname}{\lstlistingname s}
\renewcommand\lstlistingname{Algorithm}
\begin{document}

\cref{example}
\begin{lstlisting}[ caption=A caption, label={example}]%style=Matlab-editor,
%My listing
end
\end{lstlisting}

\renewcommand\lstlistingname{Pseudo-code}
\cref{example2}
\begin{lstlisting}[ caption=A caption, label={example2}]%style=Matlab-editor,
%My listing
end
\end{lstlisting}

\end{document} 

在此处输入图片描述

相关内容