带有较短注释的列表中的 texcl 和 range 前缀

带有较短注释的列表中的 texcl 和 range 前缀

我正在尝试使用包中的行范围标记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}

相关内容