抑制列表包中空行的行号

抑制列表包中空行的行号

listings包很好地格式化了我的伪代码列表。有没有办法可以指定应隐藏空行的行号?

答案1

您可以使用numberblanklines=false; 一个小例子:

\documentclass{article} 
\usepackage{listings}

\lstset{numbers=left,numberblanklines=false}

\begin{document}

\begin{lstlisting}
First line.

Second line.
\end{lstlisting}

\end{document}

在此处输入图片描述

上述方法不会对空白行进行编号,但会将其考虑在内以增加控制行号的计数器;您可以定义一个命令来手动减少计数器;如下所示:

\documentclass{article} 
\usepackage{listings}

\lstset{numbers=left,numberblanklines=false,escapeinside=||}
\newcommand*\DNumber{\addtocounter{lstnumber}{-1}}

\begin{document}

\begin{lstlisting}
First line.|\DNumber|

Second line.|\DNumber|

Third line.
\end{lstlisting}

\end{document}

在此处输入图片描述

Marco Daniel 建议采用以下自动化方式防止空行增加计数器,即通过定义新键countblanklines并使用宏\lst@AddToHook{<hook>}

\documentclass{article} 
\usepackage{listings}

\lstset{numbers=left,numberblanklines=false}

\makeatletter
\lst@Key{countblanklines}{true}[t]%
    {\lstKV@SetIf{#1}\lst@ifcountblanklines}

\lst@AddToHook{OnEmptyLine}{%
    \lst@ifnumberblanklines\else%
       \lst@ifcountblanklines\else%
         \advance\c@lstnumber-\@ne\relax%
       \fi%
    \fi}
\makeatother

\begin{document}

\begin{lstlisting}
First line.

Second line.

Third.
\end{lstlisting}


\begin{lstlisting}[countblanklines=false]
First line.

Second line.

Third.
\end{lstlisting}

\end{document}

在此处输入图片描述

答案2

您可以使用钩子将 @Gonzalo 建议的行减少例程添加到 中OnEmptyLines。这是由宏 提供的\lst@AddToHook{<hook>}。当然,方便之处在于,无需退出列表即可减少计数器。然而,这概括了所有 的方法OnEmptyLines

在此处输入图片描述

\documentclass{article} 
\usepackage{listings}% http://ctan.org/pkg/listings
\makeatletter
\lst@AddToHook{OnEmptyLine}{\addtocounter{lstnumber}{-1}}% Remove line number increment from listings
\makeatother
\lstset{numbers=left,numberblanklines=false}
\begin{document}
\begin{lstlisting}
First line.

Second line.

Third line.
\end{lstlisting}
\end{document}​

相关内容