我正在尝试使用包中的行范围标记listings
来包含代码段。我之前一直使用实际的行号,但根据对这个问题,我已经能够逐渐过渡到使用标记。似乎如果定义了多行注释序列(例如,使用comment=[l]{;},morecomment=[l]{;;}
),有时是必要的(参见这个答案),并且texcl
使用了该选项,则作为注释的行范围前缀必须包含最长的此类注释形式。
例如,以下 MWE 将;
和定义;;
为引入注释,并使用texcl
选项,但不会编译。
\documentclass{article}
\usepackage{listings}
\begin{document}
\lstset{%
texcl=true,%
comment=[l]{;},%
morecomment=[l]{;;},%
rangeprefix=;MARK\ ,%
includerangemarker=false,%
}
\begin{lstlisting}[linerange=lineTwo-lineFour]
lineOnee
;MARK lineTwo
lineThree
;MARK lineFour
lineFive
;MARK lineSix
lineSeven
\end{lstlisting}
\begin{lstlisting}[linerange=5-7]
lineOne
;MARK lineTwo
lineThree
;MARK lineFour
lineFive
;MARK lineSix
lineSeven
\end{lstlisting}
\end{document}
错误是
错误:未定义控制序列。
--- TeX said ---
\lst@next ->\lst@c;1 M
l.26 ;M
ARK lineFour
--- HELP ---
TeX encountered an unknown command name. You probably misspelled the
name. If this message occurs when a LaTeX command is being processed,
the command is probably in the wrong place---for example, the error
can be produced by an \item command that's not inside a list-making
environment. The error can also be caused by a missing \documentclass
command.
注释掉该texcl=true
选项将使此示例编译,但我需要该texcl
选项。或者,将范围前缀更改为;;MARK\
(并适当更新列出的代码)也有效,并且是我正在使用的解决方法。我同意这种解决方法,但我想知道是否有办法使用texcl
、;
和;;
作为注释,并让范围前缀以单个 开头;
。
答案1
;
该问题似乎与和之间缺少空格有关MARK
。一种解决方法是确保标记行的格式与简单注释相同,即; MARK
。请注意,这些范围标记是 的实验性功能listings
。
\documentclass{article}
\usepackage{listings}
\begin{document}
\lstset{%
texcl=true,%
comment=[l];,%
morecomment=[l];;,%
rangeprefix=;\ MARK\ ,%
includerangemarker=false}
\begin{lstlisting}[linerange=lineTwo-lineFour]
lineOnee
; MARK lineTwo
lineThree
; MARK lineFour
lineFive
; MARK lineSix
lineSeven
\end{lstlisting}
\begin{lstlisting}[linerange=5-7]
lineOne
; simple comment on line two
; MARK lineThree
lineFour
lineFive
; MARK lineSix
lineSeven
\end{lstlisting}
\lstset{rangeprefix=;;MARK\ ,}
\begin{lstlisting}[linerange=5-7]
lineOne
; simple comment on line two
;;MARK lineThree
lineFour
lineFive
;;MARK lineSix
lineSeven
\end{lstlisting}
\end{document}