Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I have all kinds of labeltypes for my own convenience defined like "sec:", "cha:", "fig:", "lst:" and so on.

Now I wanted to point to a certain line of code within one of my listings. There is no need have a label for that listing, but on some other page I want to put "(see on page X)" especially because of the listing might be split by a natural pagebreak.

At the end of the line of code I wrote $\label{lbl:mySpecialLineOfCode}$. At the location where I want to put the page number by \pageref{lbl:mySpecialLineOfCode} and it outputs the correct page number.

For experimental reasons I put \ref{lbl:mySpecialLineOfCode} and it printed 14. I don't understand how Latex determines this number. The label is placed neither in chapter in 14, nor in section X.14, nor is it the 14th label or the 14th listing (I have a larger number of both before that position).

My only fear is, that it occupies a "place"/"number" and the listofwhatever at the beginning in the document will go from 13 to 15 in the next line. That would be too bad. Better I know beforehand that something like this can happen (I cannot say it happens - in my case though).

Anybody can give me a hint?

share|improve this question
    
This is most likely the line number in the listing. Could you verify that lbl:mySpecialLineOfCode is placed on line 14? –  Werner Jan 25 '13 at 19:13
    
Indeed. That is the reason. I see new possibilities arising... I should have done some more profound trials. –  David Jan 25 '13 at 19:23
add comment

1 Answer

up vote 5 down vote accepted

LaTeX's \label-\ref system by default works along the following lines:

  • With the issue of \label{<lab>}, LaTeX stores the last updated counter that used \refstepcounter and the associated page number in the .aux file. \label actually uses \@currentlabel, which is set by \refstepcounter. This step only occurs at page shipout to ensure that the correct page number is associated with the label;
  • An issue of \ref retrieves the counter written during \label (\@currentlabel) while \pageref retrieves the accompanying page number.

listings has a counter for each lstlisting (the counter lstlisting), but also a counter for each line of a specific listing (the counter lst@lineno).

If you wish to reference the counter for the listing, place your \label immediately after the listing \caption. If you wish to reference the counter for a line within the listing, place your \label on the appropriate line.

share|improve this answer
    
As Werner has suspected, \ref{somelabel} indeed prints the line number when \label{somelabel} is placed within a lstlisting environment on some line of code. –  David Jan 25 '13 at 19:27
    
I'm sorry. I had submitted my own answer and probably you have been writing your answer the same time. –  David Jan 26 '13 at 7:19
    
@David: Don't worry about it. We can clean up the comments now (delete them). –  Werner Jan 26 '13 at 16:22
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.