假设有一个大型*.tex
文档,其中有许多嵌套的\input
指令,其中有许多被命令包围的 Haskell 列表\begin{code} \end{code}
。
如何才能突出显示所有这些代码列表,就像在许多 haskell 论文中突出显示所有 haskell 代码一样(功能珍珠就是一个很好的例子)?
我听说很多 haskell 论文都是用 写的,lhs
然后通过 传输的tex
。lhs2tex
是的,这是一个不错的工具,但它会生成整个tex
文档,很难用于像我这样的任务。
顺便说一句,我已经尝试过了,lstlistings
但fancyvrb
效果远非理想。
答案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}