cleveref最后加载

cleveref最后加载

我想交叉引用列表项。我在 中使用了 标签\lstinputlisting,但输出显示??。以下是脚本:

\documentclass{article}
\usepackage{lipsum}
\usepackage{cleveref}
\usepackage{listings}
\usepackage{xcolor}

\begin{document}
\title{Test}
\maketitle

\section{Listing}
\lstset{language=Python}\label{ls:example}

\lstinputlisting[language=Python, label=my_listing_label, caption={caption.}]{/home/e/Documents/test_latex/test.py}

\section{Another Section}
We reference~\cref{my_listing_label}
\end{document}

以下是test.py内容:

if x==y:
    print("hi")

输出如下: 在此处输入图片描述

编辑: 另外,我需要补充一点,我希望交叉引用显示为清单 1,而不是第 1 节。

答案1

cleveref最后加载

最后加载cleveref解决了这个问题。

有些软件包最好在其他软件包之后加载

并非所有软件包都能很好地相互配合。最好在最后包括的一些软件包(按照我发现的需要导入的顺序)包括

\usepackage{hyperref} 
\usepackage{cleveref} % After hyperref
\usepackage{caption}  % After cleveref.
\usepackage{geometry} % Last of all.

欲了解更多信息,请参阅哪些包应该在 hyperref 之后加载而不是之前加载?

一个工作示例

\documentclass{article}
\usepackage{lipsum}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{cleveref} % <-- Now loaded last of all. 


\begin{document}
    \title{Test}
    \maketitle

    \section{Listing}
    \lstset{language=Python}\label{ls:example}

    \lstinputlisting[language=Python, label={my_listing_label}, caption={caption.}]{eg.py}

    \section{Another Section}
    We reference~\cref{my_listing_label}
\end{document}

在此处输入图片描述

相关内容