如果我有一个包含一些代码的文件(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