Latex にはいくつかの可能性があります。以下では、すべての関数のリストを作成するために makeindex と共にパッケージのリストを使用します。さらに \label は、異なるセクション間の相互参照を作成するために使用されます:
\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はこちらです。これは、pdf ファイルの作成に最適です。他の種類の出力 (html など) の場合は、 latex をpandocと一緒に使用する必要があります。
もう 1 つのオプションは、アドホックな latex コマンド (\label および makeindex) と組み合わせて、pandoc のマークダウン構文を使用することです。これにより、タスクが簡素化されるだけでなく、ソース ファイル内の構文ノイズが少なくなります。