gpt4 book ai didi

latex - LaTeX:LSTListing自动识别代码通过

转载 作者:行者123 更新时间:2023-12-04 16:32:48 31 4
gpt4 key购买 nike

我正在写一个程序(用C语言编写,但我想那不太重要),它与LaTeX中的一些记录 Material 有关。我希望纪录片 Material 包含原始代码中的代码片段。

为了包括源代码并使其保持最新,我在文档中执行以下操作:

\lstinputlisting[firstline=200, lastline=210]{../src/source.c)

这会自动将 ../src/source.c中的第200到210行(包含例如一个函数)加载到我的文档中。

但是,如果我在第200行之前添加一些行,这意味着第200行会“向下移动一些行”,因此我必须对其进行调整才能获得原始功能。

所以这是我的问题:是否有人知道如何动态地告诉 lstinputlisting(或任何适当的替代品)来告诉应该采取哪几行?

我想像以下内容:我在C源代码中添加了特殊注释,这些注释将由 lstinputlisting识别,例如
/// lstinputlisting "myfunc" BEGIN
int myFunction(int x){
return x+2;
}
/// lstinputlisting "myfunc" END

然后, lstlisting扫描文件,只包括 BEGINEND事物之间的行。

最佳答案

我在您发布帖子后几个月回答,但是我下面介绍的lSTListing的功能已经包含了好几年了。

要查找的关键字是linerange选项,为了方便起见,还包含rangeprefixrangesuffix

这是一个完整的例子。

\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文件中更新行号变得很乏味。使用符号可以解决此问题,但同时也会在代码本身中留下痕迹,即如果行数更改或宽度更改太多,则需要确认排版输出看起来仍然合理。

最后,在编辑代码之后,仅当您在标记的块中插入/删除时,才需要再次排版 latex 文件。

关于latex - LaTeX:LSTListing自动识别代码通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3915709/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com