I am writing a program (in C, but I suppose that’s not so relevant) in connection with a little documentary material in LaTeX. I want the documentary material to contain code snippets from my original code.
In order to include source code and keep it up to date, I do the following in my document:
\lstinputlisting[firstline=200, lastline=210]{../src/source.c)
This loads automatically the lines 200 to 210 (which contain e.g. a function) from ../src/source.c into my document.
However, if I add some lines before line 200, this means that line 200 “wanders down some lines”, so I have to adjust this in order to get my original function.
So here’s my question: Does anybody know about a possibility how to dynamically tell lstinputlisting (or any adequate substitute) to tell which lines to take?
I imagine something like the following: I add special comments to my C source code that will be recognized by lstinputlisting, e.g.
/// lstinputlisting "myfunc" BEGIN
int myFunction(int x){
return x+2;
}
/// lstinputlisting "myfunc" END
Then, lstlisting scans the file and just includes the lines between the BEGIN and the END things.
I am answering a few months after your post, but the feature of lstlistings I describe below has been in that package for several years.
The keyword to look for is the option
linerange, as well as, for convenience,rangeprefixandrangesuffix.Here is a complete example.
then save the following in code.cpp:
This is a good solution because one inevitably edits the code, and then it becomes tedious to update the line numbers throughout one’s TeX files. Using symbols solves this problem, but it also leaves a trace in the code itself that if the number of lines changes, or if the width changes too much, one needs to confirm that the typeset output still looks reasonable.
Finally, after editing the code, you need to typeset the latex files again only if you inserted/deleted within the marked blocks.