如何在列表中引用源代码的行号,而无需手动添加标签?

如何在列表中引用源代码的行号,而无需手动添加标签?

我用listings它来编写我的 Matlab 代码。在那里我可以使用\label\ref命令让读者直接找到我的代码和行号。

\begin{lstlisting}[caption={Code for deflection at the point of intersection},label={lst:A.1},numbers=left,escapeinside={@}{@}]
@\label{lst:Li11}@In_x = X_num - 1;
\end{lstlisting}

As you can see in listing \ref{lst:A.1} line number \ref{lst:Li11}

我的代码有 700 行,我必须通过交叉引用来讨论每一行代码。正如你所见,这很累。还有其他方法可以让我快速标记行号吗?

答案1

listings不会自动为每个行号添加标签,但我们可以使用钩子EveryPar来做到这一点。以下代码根据列表的label值加上用连字符分隔的行号为每行定义一个标签,因此在您的示例中lst:A.1-1lst:A.1-2等等。

\documentclass{article}
\usepackage{listings}
\usepackage{hyperref}

\makeatletter

\lst@AddToHook{EveryPar}{%
    \edef\@temp{\noexpand\label{\lst@label-\arabic{lstnumber}}}%
    \@temp
}

\makeatother

\begin{document}
\begin{lstlisting}[
    caption={Code for deflection at the point of intersection},
    label={lst:A.1},
    numbers=left,
    basicstyle=\ttfamily,
    escapeinside={@}{@}]
foo
bar
@\label{lst:Li11}@In_x = X_num - 1;
baz
\end{lstlisting}

As you can see in listing \ref{lst:A.1} line number \ref{lst:Li11} ...

As you can see in listing \ref{lst:A.1} line numbers \ref{lst:A.1-1}--\ref{lst:A.1-3} ...
\end{document}

在此处输入图片描述

相关内容