在Latex中有一些可能性,下面使用包listings和makeindex創建所有函數的列表。此外\標籤被用於創建不同的部分之間的交叉引用:與
\documentclass[a4paper,11pt,reqno,twoside,pdflatex,makeidx]{amsart}
\usepackage[a4paper]{geometry}
\usepackage{listings}
\lstloadlanguages{Haskell}
\lstset{
flexiblecolumns=false,
basewidth={0.5em,0.45em},
basicstyle=\ttfamily,
language=haskell,
% numbers=left, % optional numbering of code lines
firstnumber=last,
numberstyle=\tiny,
stepnumber=2,
numbersep=5pt,
index={fac,fac2}
}
\lstnewenvironment{code}{}{}
\usepackage{hyperref}
\title{The factorial function}
\author{Federico Squartini}
\date{}
\makeindex
\begin{document}
\maketitle
\section{Factorial function}
\label{code:fac1}
The factorial function can be defined as:
\begin{code}
fac 0 = 1
fac n = n * fac (n-1)
\end{code}
\section{Factorial function in constant space}
The code for the factorial defined section~\ref{code:fac1} uses $o(n)$ stack
space. The following function uses constant space:
\begin{code}
fac2 n = go 1 1
where
go !acc i| i <= n = go (acc*i) (i+1)
| otherwise = acc
\end{code}
\printindex
\end{document}
編譯:
pdflatex example.tex
makeindex example.idx
pdflatex example.tex
pdflatex example.tex
由此產生的pdf是here。這對於生成PDF文件非常有用。對於其他類型的輸出(例如html),您應該使用乳膠以及pandoc。
另一種選擇是使用pandoc的markdown語法,並使用ad hoc latex命令(\ label和makeindex)。這應該簡化任務以及在源文件中產生較少的語法噪音。
我認爲應該很容易通過創造性地使用LaTeX來模擬這一點。 – fuz
目前Haddock和「:info」命令顯示了一個類型類的實例。但是我看不到在哪裏使用函數和變量。 – Deech
通過「索引」,你的意思是一個將每個名字鏈接到它的文檔的索引,比如Haddock產生的索引。 – Heatsink