我对 TeX 还很陌生。
我的源代码在一个外部文件中,我们将其称为source.java
,然后我使用\lstinputlisting{source.java}
。
我怎样才能仅使用第 3-5 行来列出代码?(而不是整个文件?)
我怎样才能仅使用特定的行,例如代码清单中的行 {1,3,7,12}?(当我仍有一个正在运行的程序时,我将仅使用这个最后的例子来显示重要的行
source.java
。)我可以对该
minted
包裹做同样的事情吗?
答案1
2012-02-01:已更新,允许调整后续行之间的间距。
以下是针对前两个问题的解决方案在列表中,如何显示引用的行号而不是标准的升序行号。
句法:
\ShowListingForLineNumber*[percentage]{<line number>}}{<file name>}
在哪里:
*
调整当前行上方的空间(可选)[percentage]
\baselineskip
=当前行上方留出的百分比(可选,如果*
未使用则忽略)。如果未指定,则默认为1.0
抑制上方的整个间距。<line number>}
是要打印列表的行号<file name>
是输入文件的文件名
笔记:
- 我使用
xparse
软件包提供了带星号的命令版本。如果您不想包含其他软件包,请参阅其他方法定义带星号的命令版本(* 宏)
代码:
\documentclass{article}
\usepackage{filecontents}
\usepackage{xcolor}
\usepackage{xparse}% to define star variant of macro
\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,
backgroundcolor={\color{yellow}},
breaklines=true
}
\begin{document}
\noindent
Showing line range 3-5:
\lstinputlisting[
style=MyListStyle,
linerange={3-5},
firstnumber=3,
]{foo.java}
\bigskip\noindent
Showing lines 1,3,7,12 (note that Line 7 is blank) with starred version between lines 1 and 3 to supress the space and the space before line 12 set to 50\% of the \verb|\baselineskip|:
\NewDocumentCommand{\ShowListingForLineNumber}{s O{1.0} m m}{
\IfBooleanTF{#1}{\vspace{-#2\baselineskip}}{}
\lstinputlisting[
style=MyListStyle,
linerange={#3-#3},
firstnumber=#3,
]{#4}
}%
\ShowListingForLineNumber{1}{foo.java}
\ShowListingForLineNumber*{3}{foo.java}% supress space before
\ShowListingForLineNumber*[0.5]{7}{foo.java}% supress 50% of the space before
\ShowListingForLineNumber*{12}{foo.java}
\end{document}