在大型 *.tex 文档中突出显示 haskell 列表

在大型 *.tex 文档中突出显示 haskell 列表

假设有一个大型*.tex文档,其中有许多嵌套的\input指令,其中有许多被命令包围的 Haskell 列表\begin{code} \end{code}

如何才能突出显示所有这些代码列表,就像在许多 haskell 论文中突出显示所有 haskell 代码一样(功能珍珠就是一个很好的例子)?

我听说很多 haskell 论文都是用 写的,lhs然后通过 传输的texlhs2tex是的,这是一个不错的工具,但它会生成整个tex文档,很难用于像我这样的任务。


顺便说一句,我已经尝试过了,lstlistingsfancyvrb效果远非理想。

答案1

lstlistings我对我在学士论文中使用的设置感到满意:

\lstset{
  frame=none,
  xleftmargin=2pt,
  stepnumber=1,
  numbers=left,
  numbersep=5pt,
  numberstyle=\ttfamily\tiny\color[gray]{0.3},
  belowcaptionskip=\bigskipamount,
  captionpos=b,
  escapeinside={*'}{'*},
  language=haskell,
  tabsize=2,
  emphstyle={\bf},
  commentstyle=\it,
  stringstyle=\mdseries\rmfamily,
  showspaces=false,
  keywordstyle=\bfseries\rmfamily,
  columns=flexible,
  basicstyle=\small\sffamily,
  showstringspaces=false,
  morecomment=[l]\%,
}

您可以在我的论文中找到一些示例:https://www.dropbox.com/sh/zu56xcp1mj57ikq/TtFoHKmOLV/thesis.pdf

如果需要的话,我还可以提供整个.tex源代码。

答案2

我不确定你说的“许多嵌套\input指令,其中有许多被命令包围的 Haskell 列表\begin{code} \end{code}”是什么意思,但是……minted包裹支持 Haskell 语法高亮。以下是一些示例代码,取自Haskell 编程语言的维基百科页面

在此处输入图片描述

\documentclass{article}
\usepackage{minted}
\begin{document}
\begin{minted}{haskell}
-- Type annotation (optional)
fib :: Int -> Integer

-- With self-referencing data
fib n = fibs !! n
        where fibs = 0 : scanl (+) 1 fibs
        -- 0,1,1,2,3,5,...

-- Same, coded directly
fib n = fibs !! n
        where fibs = 0 : 1 : next fibs
              next (a : t@(b:_)) = (a+b) : next t

-- Similar idea, using zipWith
fib n = fibs !! n
        where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

-- Using a generator function
fib n = fibs (0,1) !! n
        where fibs (a,b) = a : fibs (b,a+b)
\end{minted}
\end{document}

相关内容