交叉引用 \lstinputlisting 代码

交叉引用 \lstinputlisting 代码

我经常需要将 C 代码放入我的文档中,因此我定义了,

\newcommand{\Ccode}[1]{\lstinputlisting[backgroundcolor=\color{gray!5},caption=\texttt{\lstname},language=C]{C/#1}}

在我的文档序言中。我有一个名为 的目录C,里面有我所有的C源代码,所以我只需用这个将这些代码导入到我的文档中,

\Ccode{screen_buffer.c}

现在,我想在我的文档中使用和引用我的一段代码\label{}\ref{}但我不知道把放在哪里\label{}。那么,如果可能的话,我该如何交叉引用我的代码呢?

编辑:我的文件是

\documentclass[11pt]{book}
\title{Computational Physics}
\author{Ayatana}
\usepackage{listings, xcolor}

\newcommand{\Ccode}[1]{
    \lstinputlisting[backgroundcolor=\color{gray!5},
    caption=\texttt{\lstname},language=C]{C/#1}
}
\renewcommand{\lstlistingname}{Code}
\lstset{
    frame=single,
    breaklines=true,
    numbers=left,
    numberstyle=\color{gray}\small\texttt,
    basicstyle=\ttfamily,
    columns=fullflexible,
    showstringspaces=false
    captionpos=b,
}

\begin{document}
The \texttt{Hello World} code in C programming language goes like this,
\Ccode{hello.c}
\end{document}

pdflatex渲染如下, pdftlatex 渲染

现在我想使用 引用上面的代码\ref{}。那么,我应该把 放在哪里\label{}呢?

答案1

标签可以使用label=...。我建议使用可选参数来\Ccode指定标签(#2 适用于外部代码文件)

\documentclass[11pt]{book}
\title{Computational Physics}
\author{Ayatana}
\usepackage{listings, xcolor}

\newcommand{\Ccode}[2][]{
    \lstinputlisting[backgroundcolor=\color{gray!5},
    caption=\texttt{\lstname},language=C,#1]{#2}
}
\renewcommand{\lstlistingname}{Code}
\lstset{
    frame=single,
    breaklines=true,
    numbers=left,
    numberstyle=\color{gray}\small\texttt,
    basicstyle=\ttfamily,
    columns=fullflexible,
    showstringspaces=false
    captionpos=b,
}

\begin{document}
The \texttt{Hello World} code in C programming language goes like this,
\Ccode[label={myhello}]{hello.c}

In listing \ref{myhello} we see


\end{document}

相关内容