结合 linerange、firstnumber 和 Continuousnumbers 会产生非连续数字

结合 linerange、firstnumber 和 Continuousnumbers 会产生非连续数字

如果我将 linerange、firstnumber 和 Continuousnumbers 与行标记一起使用,则会导致不连续的行号。MWE:

\documentclass[a4paper]{article} 
\usepackage{listings}
\begin{filecontents}{file.java}
{a}
Hello world 1
{end}
{b}
Hello world 2
{end}
\end{filecontents} 
\begin{document} 
\lstset{
  numbers=left,
  rangeprefix=\{,
  rangesuffix=\},
  firstnumber=0,
  consecutivenumbers=true
}
\lstinputlisting[
  linerange={a-end,b-end}
]{file.java}
\end{document}

结果是:

0 {a}
1 Hello  world 1
2 {end}
0 {b}
1 Hello  world 2
2 {end}

我希望:

0 {a}
1 Hello  world 1
2 {end}
3 {b}
4 Hello  world 2
5 {end}

我有 CTAN 的 listings 1.8d。这是错误吗,还是我误用了软件包?如果我想报告此错误,我是否只需... 给维护者发送电子邮件?

答案1

使用标记列表作为linerange多个列表构建,并为每个新列表firstnumber=0执行。根据文档,consecutivenumbers只能在单个列表上使用,因此错误在于范围列表不被视为“单个列表”。

\lst@InitLstNumber作为一种解决方法,您可以禁用用于初始化数字的范围的宏。

梅威瑟:

\documentclass[a4paper]{article} 
\usepackage{listings}
\begin{filecontents}{exfile.java}
{a}
Hello world 1
{end}
extra line
{b}
Hello world 2
{end}
\end{filecontents} 
\begin{document} 
\lstset{
  numbers=left,
  rangeprefix=\{,
  rangesuffix=\},
  firstnumber=0,
  %consecutivenumbers=true
}
\makeatletter
\def\lst@InitLstNumber{\relax}
\makeatother

\lstinputlisting[
  linerange={a-end,b-end}
]{exfile.java}
\end{document}

请注意,我在示例文件中添加了额外的行来检查编号是否确实连续。

结果:

在此处输入图片描述

相关内容