15

Literate Haskell はインデックス関数名、型クラス、変数参照をサポートしていますか? Literate Haskell ソースで実行できるフィルターはありますか?これを実行すると、素敵な PDF マニュアルまたはハイパーリンクされた HTML ドキュメントが得られます。

これらはnowebCWEBの非常に優れた機能であり、Literate Haskell の広範な採用に拍車をかけると思います。

例として、CWEB で書かれた単語カウント プログラムを見てください。項目 4 の最初のページのコード チャンクには、そのコードが使用されている場所が脚注されています。LHS はチャンクをサポートしていませんが、コードが使用されている場所を知りたいです:

  1. 関数を説明するコメント。

    func = id

    以下で使用: (XYZf、ABCg、セクション 1.5)

    func2 = indefined

    以下で使用: (ABCx、セクション 2.1)

さらに、すべての関数名と変数を、ドキュメント内や他の関数などで参照されている場所に沿って集約するインデックス。

4

1 に答える 1

1

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 のマークダウン構文を使用することです。これにより、タスクが簡素化されるだけでなく、ソース ファイル内の構文ノイズが少なくなります。

于 2011-07-19T10:01:20.067 に答える