如何解决列表包中解析(Java)评论的错误

如何解决列表包中解析(Java)评论的错误

当使用 listings 包(v1.5e;尽管 v1.3 表现出同样的行为)将一些 Java 源代码放在幻灯片上时,我遇到了以下奇怪的问题(错误?)。我最小化了文件以帮助隔离问题,所以忘记了这段 Java 代码在做什么。

Java 源文件Example.java包含:

public class Example implements StringHandler {

    /** 
     * Prints the given string.
     *   
     * @param s  the given string
     */  
    @Override
    public void handle(String s) {
        System.out.println(s);
    }

}

这是 LaTeX 源文件test.tex

\documentclass[a4paper,landscape]{slides}
\usepackage{color,listings,courier}

\lstset{language=Java,%
  basicstyle=\ttfamily,%
  numbers=left,%
  numberstyle=\tiny,%
  commentstyle=\color{blue}\itshape}

\begin{document}

% Suppress javadoc tag, and @Override (to avoid cluttering the slide)
\begin{slide}
\lstinputlisting[linerange={1-4,7-7,9-13}]{Example.java}
\end{slide}

\end{document}

正如您从中看到的linerange,目标是将其呈现在幻灯片上:

public class Example implements StringHandler {

    /** 
     * Prints the given string.
     */  
    public void handle(String s) {
        System.out.println(s);
    }

}

但相反,我得到了

public class Example implements StringHandler {

    /** 
     * Prints the given string.
     */  
    @Override
    public void handle(String s) {
        System.out.println(s);
    }

}

很难@Override去掉。如果 javadoc 被限制在一行(没有标签),它就会消失:/** Prints the given string. */。但我不想修改给定的源文件。

我是否配置错误了某些东西?

有没有什么办法可以解决这个问题?

它似乎与列表包对源文件的解析有关,特别是它如何识别注释的结尾。

答案1

文档对该选项的listings描述linerange如下:

linerange={⟨first1⟩-⟨last1⟩,⟨first2⟩-⟨last2⟩, and so on}

仅可用于单个列表。显示列表的给定行范围。间隔必须排序且不得相交。

您使用的范围,

linerange={1-4,7-7,9-13}

在两个方面都是有效的:间隔是排序的并且不相交。但是,@Override当不应该出现时,不断出现的线并不是文档所宣传的行为。因此,这只能被描述为一个错误。您应该将此事通知软件包的维护者listings

相关内容