我正在撰写我的硕士论文,并且lstlisting
在 LaTeX 包方面遇到了(特定)问题。
我指的是Random.class
Java 中的 -file,并且只想打印一些特定的行范围,这对于 Latex 的以下几行来说工作正常:
\lstinputlisting[linerange={62-62,78-81,475-479},breaklines=true,language=Java, caption=Excerpt of Source Code of \texttt{Random}-class, label=list:excerptRandomCode, basicstyle=\ttfamily\tiny, captionpos=b,numbers=left,tabsize=2,float=t]{RandomClass.java}
现在唯一的问题是,它不会打印实际的行号。它从行号 1 开始,到行号 10 结束(因此我引用了这么多行)。
我怎么能说他也打印了我提到的行呢linerange
?如果我能在三段代码之间添加一个没有任何引用的空行就好了。
答案1
实现方法是将其拆分为单独的lstinputlisting
命令,并使用firstnumber
来设置给定的第一行的行号linerange
。下面是显示第 2-6 行和第 9-11 行的示例。这还为您提供了中间的空行。应该可以编写一个宏,根据lstinputlisting
给定的行范围列表来生成所需的命令,但这可能应该是一个单独的问题,因为它与宏处理的关系比与列表的关系更密切:
\documentclass{article}
\usepackage{filecontents}
\usepackage{listings}
\begin{filecontents*}{foo.java}
public int nextInt(int n) {
if (n<=0)
throw new IllegalArgumentException("n must be positive");
if ((n & -n) == n) // i.e., n is a power of 2
return (int)((n * (long)next(31)) >> 31);
int bits, val;
do {
bits = next(31);
val = bits % n;
} while(bits - val + (n-1) < 0);
return val;
}
\end{filecontents*}
\lstdefinestyle{MyListStyle} {
numbers=left,
language=Java
}
\begin{document}
\lstinputlisting[
style=MyListStyle,
linerange={2-6},
firstnumber=2,
]{foo.java}
\lstinputlisting[
style=MyListStyle,
linerange={9-11},
firstnumber=9,
]{foo.java}
\end{document}