使用 listings 包仅显示特定行

使用 listings 包仅显示特定行

我对 TeX 还很陌生。

我的源代码在一个外部文件中,我们将其称为source.java,然后我使用\lstinputlisting{source.java}

  1. 我怎样才能仅使用第 3-5 行来列出代码?(而不是整个文件?)

  2. 我怎样才能仅使用特定的行,例如代码清单中的行 {1,3,7,12}?(当我仍有一个正在运行的程序时,我将仅使用这个最后的例子来显示重要的行source.java。)

  3. 我可以对该minted包裹做同样的事情吗?

答案1

2012-02-01:已更新,允许调整后续行之间的间距。


以下是针对前两个问题的解决方案在列表中,如何显示引用的行号而不是标准的升序行号

句法:

\ShowListingForLineNumber*[percentage]{<line number>}}{<file name>}

在哪里:

  • *调整当前行上方的空间(可选)
  • [percentage]\baselineskip=当前行上方留出的百分比(可选,如果*未使用则忽略)。如果未指定,则默认为1.0抑制上方的整个间距。
  • <line number>} 是要打印列表的行号
  • <file name>是输入文件的文件名

在此处输入图片描述

笔记:

代码:

\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}

相关内容