列表行号适用于一个列表,但不适用于另一个列表

列表行号适用于一个列表,但不适用于另一个列表

第一个清单的行号忽略了步骤号,而第二个清单则没有问题。我猜这可能与使用数学模式有关,但 mathescape 适用于这两种模式,所以如果是这样的话,我不清楚该怎么做

\documentclass[a4paper, twoside]{book}

\usepackage{listings}
\lstset{
    basicstyle=\small,
    keywordstyle=\ttfamily,
    identifierstyle=\ttfamily,
    numbers=left,
    numberstyle=\tiny,
    stepnumber=5,
    numbersep=5pt,
    numberfirstline=true,
    firstnumber=1,
    mathescape=true
    }


\begin{document}

\begin{lstlisting}
g = $\infty$

for $v$ in vertices:
    s = $\emptyset$
    r = $\{v\}$
    pred[v] = $\emptyset$
    d[v] = $0$
    while not r == $\emptyset$:
        x = $x \in r$
        s = s $\cup$ x
        r = r $\setminus$ x
        for
\end{lstlisting}

\begin{lstlisting}
step = 1
res = new Graph()

def BFS(v,currentLength,maxLength):
    if currentLength < maxLength:
        if not label[v]:
            label[v] = step
            step = step + 1
        for w in Neighborhood(v):
            if label[w]:
                continue
            pred[w] = v
            res.Append(v,w)
            BFS(w,currentLength + 1, maxLength)

root = PickVertex()
BFS(root,0,k)
\end{lstlisting}


\end{document}

答案1

我相信这是由列表代码。打印这些行号是因为测试代码行是否是第一行的标志永远不会被重置。如果你添加

\makeatletter
\gdef\lst@numberfirstlinefalse{\global\let\lst@ifnumberfirstline\iffalse}
\lst@AddToHook{Init}{\global\let\lst@ifnumberfirstline\iftrue}
\makeatother

到你的代码(之后\usepackage{listings}),那么你将得到预期的结果(\global缺少lstmisc.sty)。(编辑:我刚刚添加了在里面上面的行来修复下面评论中提到的第一个行号问题。)

在此处输入图片描述

相关内容