当使用 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
。