我想交叉引用列表项。我在 中使用了 标签\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}