我正在编写一个程序(在C中,但我认为这不是那么相关)与LaTeX中的一些纪录片材料有关.我希望纪录片材料包含原始代码中的代码片段.
为了包含源代码并使其保持最新,我在我的文档中执行以下操作:
\lstinputlisting[firstline=200, lastline=210]{../src/source.c)
Run Code Online (Sandbox Code Playgroud)
这将线200到210(包含例如函数)自动加载../src/source.c
到我的文档中.
但是,如果我在第200行之前添加一些行,这意味着第200行"向下漫游某些行",所以我必须调整它以获得我的原始函数.
所以这是我的问题:有没有人知道如何动态告诉lstinputlisting
(或任何足够的替代品)告诉哪些线路?
我想象如下:我在我的C源代码中添加特殊注释lstinputlisting
,例如
/// lstinputlisting "myfunc" BEGIN
int myFunction(int x){
return x+2;
}
/// lstinputlisting "myfunc" END
Run Code Online (Sandbox Code Playgroud)
然后,lstlisting
扫描该文件,只是包括之间的线BEGIN
和END
东西.
Cal*_*laf 14
我在你的帖子发表几个月后回答,但我在下面描述的lstlists的功能已经在这个包中好几年了.
要查找的关键字是选项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}
Run Code Online (Sandbox Code Playgroud)
然后在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----------------
Run Code Online (Sandbox Code Playgroud)
这是一个很好的解决方案,因为不可避免地编辑代码,然后更新一个TeX文件中的行号变得繁琐.使用符号解决了这个问题,但它也在代码本身留下了一条痕迹,如果行数发生变化,或者宽度变化太大,则需要确认排版输出看起来仍然合理.
最后,在编辑代码之后,只有在标记的块中插入/删除时才需要再次排版乳胶文件.
归档时间: |
|
查看次数: |
2204 次 |
最近记录: |