# In listings, how to show referenced linenumbers instead of standard ascending linenumbers

I'm just writing on my master thesis and have a (specific) problem with lstlisting package in LaTeX.

I'm referring to the Random.class-file in Java and only want to print some specific line-ranges, which is working fine with following lines for 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}


The only problem is now, that this doesn't print the actual line numbers. It's starts with line number 1 and stops with line number 10 (thus as many lines I refer to).

How can I say, that he also prints the lines as I mentioned in the linerange? And it would be nice, if I could add one empty line without any reference between my three excerpts of the code.

-

## migrated from stackoverflow.comOct 5 '11 at 22:05

This question came from our site for professional and enthusiast programmers.

Welcome to TeX.sx! Your question was migrated here from Stack Overflow. Please register on this site, too, and make sure that both accounts are associated with each other, otherwise you won't be able to comment on or accept answers or edit your question. –  Werner Oct 5 '11 at 22:17
I am a bit late on this, however I think that it can be solved by a combination of adding the code I created for Creating line numbers in lstlisting. One could create a new environment or the equivalent which parses the linerange and in that way insert it consequitively. –  zeroth Mar 17 '12 at 11:03

## 1 Answer

The way to do it is to split into separate lstinputlisting commands and use firstnumber to set the line number of the first line for the given linerange. Here is an example of showing lines 2-6 and 9-11. This also provides you with an empty line in between. It should be possible to write a macro that generates the required lstinputlisting commands given a list of line ranges, but that should probably be a separate question as it is more related to macro processing than listings:

\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}

-
This would be great of one could automate the sequence of linerange={...} ranges into a sequence of lstlistings. –  Werner Oct 5 '11 at 17:02
This was also an idea I had, but I want to refer to his as a whole listing and not to three separate listings (that's why I labelled it with label=list:excerptRandomCode). I think there will be a problem, if I write this label to each listing. Or is there a way to make a \begin{caption?} ... \caption{text}\label{WholeListing}\end{caption?} around this list and refer then to the whole surrounding? –  Markus G. Oct 5 '11 at 18:30
Wouldn't just captioning the last one work? –  Peter Grill Oct 5 '11 at 18:50
That would work, but now it happens that one of the listings appears on a different page. –  Markus G. Oct 5 '11 at 19:13
Perhaps putting the listings in a float environment? –  Peter Grill Oct 5 '11 at 19:15