Я отвечаю через несколько месяцев после вашего поста, но функция списков рассылки, которую я опишу ниже, была в этом пакете в течение нескольких лет.
Ключевым словом, которое нужно искать, является также опция linerange
как, для удобства, rangeprefix
и rangesuffix
.
Вот полный пример.
\documentclass{article}
\usepackage{fullpage,times,listings}
\lstloadlanguages{C++}
\lstset{language=C++,keywordstyle=\bfseries,commentstyle=\itshape,
rangeprefix=//----------------,rangesuffix=----------------,
includerangemarker=false,columns=spaceflexible}
\begin{document}
We first show the main function.
\lstinputlisting[linerange=main0-main1]{code.cpp}
Then we show the implementation.
\lstinputlisting[linerange=fact0-fact1]{code.cpp}
\end{document}
, затем сохраните следующее в code.cpp:
#include <cassert>
//----------------fact0----------------
// A recursive implementation of factorial
int factorial(int i)
{
if(i)
return i * factorial(i-1);
else
return 1;
}
//----------------fact1----------------
//----------------main0----------------
// Test the implementation.
int main()
{
assert(factorial(5) == 120);
}
//----------------main1----------------
Это хорошее решение, потому что человек неизбежно редактирует код, а затем становится утомительным обновлять номера строк в файлах TeX.Использование символов решает эту проблему, но также оставляет след в самом коде: если количество строк изменяется или ширина меняется слишком сильно, необходимо подтвердить, что вывод набора по-прежнему выглядит разумным.
Наконец, после редактирования кода вам нужно будет снова набирать латексные файлы, только если вы вставили / удалили внутри отмеченных блоков.