我用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-1
,lst: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}