lstlisting 中的 Linerange 自定义(或类似)

lstlisting 中的 Linerange 自定义(或类似)

如果我有一个包含一些代码的文件(somecodefile):

Var x = io.input("x", UInt(32));
Var y = x + 1;
io.output("y", y, UInt(32));

...我设置了一些“轮廓线”(例如TEXBLOCK)...

/*TEXBLOCK {x}*/
Var x = io.input("x", UInt(32));
/*TEXBLOCK {end}*/
/*TEXBLOCK {y}*/
Var y = x + 1;
io.output("y", y, UInt(32));
/*TEXBLOCK {end}*/

...是否可以在 lstlisting 环境 (或类似环境) 中使用 linerange 选项来使“linerange=x-end”之类的内容仅产生:

Var x = io.input("x", UInt(32));

那么 MWE 可能是使用 TEXBLOCKs“x”和“end”:

\documentclass{article}
\begin{document}
\begin{lstlisting}[linerange=x-end] 
\input{somecodefile}
\end{lstlisting} 
\end{document}

再例如,让 linerange=y-end 产生:

Var y = x + 1;
io.output("y", y, UInt(32));

其中 MWE 为:

\documentclass{article}
\begin{document}
\begin{lstlisting}[linerange=y-end] 
\input{somecodefile}
\end{lstlisting} 
\end{document}

我已经在 Makefile 中使用 Python 2.7 实现了这个功能,但我真的很想使用 LaTeX 来实现它。使用 delineator(“TEXBLOCK”)和 lstlisting 环境正是我让 Python 脚本执行的操作:如果有办法使用不同的环境来做同样的事情,那么我当然也会对此感兴趣。我基本上只是希望能够挑选出包含代码行的文件中的特定部分。

答案1

好吧,我对此很感兴趣,但最终却陷入了困境:

\newcommand{\newcode}[2]{

  \foreach \x in {0,...,#2} {
    \edef\dolisting{\noexpand\lstinputlisting[linerange=test\x,rangeprefix=//---,includerangemarker=false]{#1}}
    \dolisting
\vspace{-1em}

  }}

\begin{mdframed}
\newcode{Kernel.code}{2}
\end{mdframed}

其中代码(Kernel.code)为:

//---test0

this is some code; //---test0 //---test1

import some more code; //---test1 //---test2

class code extends morecode {
        code(code parameters) {
                super(parameters);
                code x = io.input("x", codecodecode(32));
                code y = x + 1;
                io.output("y", y, codecodecode(32));
        }
}
//---test2

相关内容