22

How can I get the current .tex source line number? I want to use it to generate useful error messages in a package I am writing.

There are some errors that can only be detected at the end of the document, so I want to create a command that checks for them and tells at what line the error was made. To do that, I need to be able to save the source line number in the command that was misapplied.

Preferably a command that can be used like \sourcelineno in this example:

\documentclass{minimal}
\newcommand \showlineno {line \sourcelineno}

\begin{document}

You are now at \showlineno.

This paragraph starts at \showlineno, and 
some more text,
and runs until \showlineno. 

\end{document}

where the output would be

You are now at line 6.

This paragraph starts at line 8, and some more text, and runs until line 10. 
Peter Grill
  • 223,288
JanKanis
  • 2,307

2 Answers2

19

You can use a variation of the kernel's \on@line:

\documentclass{article}

\makeatletter
\ifnum\inputlineno=\m@ne
\let\showlineno\@empty
\else
\def\showlineno{ line \the\inputlineno}
\fi
\makeatother

\begin{document}

You are now at \showlineno.

This paragraph starts at \showlineno, and 
some more text,
and runs until \showlineno.

on input line \the\inputlineno

\end{document}
Gonzalo Medina
  • 505,128
  • 1
    Great! \inputlineno is what I was looking for. – JanKanis Nov 07 '12 at 14:26
  • Gonzalo, do you know how to put this command on the whole document? I mean, there is a way to use automatically this command (\showlineno) on every line of the source? Mi objective is to get something like this: http://tex.stackexchange.com/questions/261571/marginpar-for-all-the-document – MrSelberg Aug 16 '15 at 14:29
0

A LuaLaTeX variation on Gonzalo's answer, as an introductory example of \directlua usage.

\documentclass{article}

\def\showlineno{ line \directlua{tex.print(tex.inputlineno)}% }

\begin{document}

You are now at \showlineno.

This paragraph starts at \showlineno, and some more text, and runs until \showlineno.

on input line \the\inputlineno

\end{document}

The weird line numbers are not managed.