列出包摘录代码行之间的关键字/退出键?

列出包摘录代码行之间的关键字/退出键?

除了使用firstline=和 之外lastline=,是否可以将代码包含在某个用户定义的键中?这样,如果我只想包含一个长文件的定义,我就不必担心在定义上方键入内容,因为这会更改第一行。

答案1

listings提供了一个实验性的功能,可以根据特定的开始和结束标记来包含部分代码(请参阅listings指导)。

选择

rangeprefix = <prefix>,
rangesuffix = <suffix>,
linerange   = <startmarker>-<endmarker>

将在包含的代码中查找行

... some boring code ...
<prefix><startmarker><suffix>
... interesting code ...
<prefix><endmarker><suffix>
... more boring code ...

并仅包含列表中代码的有趣部分(包括开始/结束标记,除非includerangemarker=false)。可以使用 来使用多个标记对linerange,所有标记对都用逗号分隔。前缀、后缀或标记中的特殊字符需要用 进行转义\

这种方法的缺点是您需要用开始和结束标记来注释输入的代码。

使用示例:

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

\begin{filecontents*}{\jobname.hs}
{- begin map -}
map :: (a -> b) -> [a] -> [b]
map f []     = []
map f (x:xs) = f x : map f xs
{- end map -}

{- begin head -}
head :: [a] -> a
head (x:_) = x
head []    = error "Prelude.head: empty list"
{- end head -}

{- begin tail -}
tail :: [a] -> [a]
tail (_:xs) = xs
tail []     = error "Prelude.tail: empty list"
{- end tail -}
\end{filecontents*}

\lstset{
    language=Haskell,
    basicstyle=\ttfamily,
    backgroundcolor=\color{black!5}
}

\begin{document}
\lstinputlisting[
    linerange=8-10
]{\jobname.hs}

\lstinputlisting[
    rangeprefix=\{-\ ,
    rangesuffix=\ -\},
    includerangemarker=false,
    linerange=begin\ head-end\ head
]{\jobname.hs}
\end{document}

输出

在此处输入图片描述

相关内容