该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}