在列表中,如何显示引用的行号而不是标准的升序行号

在列表中,如何显示引用的行号而不是标准的升序行号

我正在撰写我的硕士论文,并且lstlisting在 LaTeX 包方面遇到了(特定)问题。

我指的是Random.classJava 中的 -file,并且只想打印一些特定的行范围,这对于 Latex 的以下几行来说工作正常:

\lstinputlisting[linerange={62-62,78-81,475-479},breaklines=true,language=Java, caption=Excerpt of Source Code of \texttt{Random}-class, label=list:excerptRandomCode, basicstyle=\ttfamily\tiny, captionpos=b,numbers=left,tabsize=2,float=t]{RandomClass.java}

现在唯一的问题是,它不会打印实际的行号。它从行号 1 开始,到行号 10 结束(因此我引用了这么多行)。

我怎么能说他也打印了我提到的行呢linerange?如果我能在三段代码之间添加一个没有任何引用的空行就好了。

答案1

实现方法是将其拆分为单独的lstinputlisting命令,并使用firstnumber来设置给定的第一行的行号linerange。下面是显示第 2-6 行和第 9-11 行的示例。这还为您提供了中间的空行。应该可以编写一个宏,根据lstinputlisting给定的行范围列表来生成所需的命令,但这可能应该是一个单独的问题,因为它与宏处理的关系比与列表的关系更密切:

在此处输入图片描述

\documentclass{article}
\usepackage{filecontents}
\usepackage{listings}

\begin{filecontents*}{foo.java}
 public int nextInt(int n) {
     if (n<=0)
        throw new IllegalArgumentException("n must be positive");

     if ((n & -n) == n)  // i.e., n is a power of 2
         return (int)((n * (long)next(31)) >> 31);

     int bits, val;
     do {
         bits = next(31);
         val = bits % n;
     } while(bits - val + (n-1) < 0);
     return val;
 }
\end{filecontents*}


\lstdefinestyle{MyListStyle} {
    numbers=left,
    language=Java
    }
\begin{document}

\lstinputlisting[
    style=MyListStyle,
    linerange={2-6},
    firstnumber=2,
    ]{foo.java}

\lstinputlisting[
    style=MyListStyle,
    linerange={9-11},
    firstnumber=9,
    ]{foo.java}
\end{document}

相关内容