如果我将 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}
请注意,我在示例文件中添加了额外的行来检查编号是否确实连续。
结果: