ラテックスを使用してコードを文書化したいのですが、これらすべてのモジュールとコンパイラ拡張機能がラテックス文書の先頭に表示されるのは本当に面倒です。ghcにコードを表示させながら、コードのこのセクションがpdfに表示されないようにするために、lhs2TeXに渡すことができるフラグはありますか?
これはかなり基本的な機能のようですが、マニュアルにはありません。
ラテックスを使用してコードを文書化したいのですが、これらすべてのモジュールとコンパイラ拡張機能がラテックス文書の先頭に表示されるのは本当に面倒です。ghcにコードを表示させながら、コードのこのセクションがpdfに表示されないようにするために、lhs2TeXに渡すことができるフラグはありますか?
これはかなり基本的な機能のようですが、マニュアルにはありません。
正しい方法は確かに条件文を使用することです。
簡単なオプションは、そのようなコードをlhs2TeX処理から完全に除外することです。
%if False
Everything you want LaTeX not to see. Can be
> code
as well as other stuff.
%endif
より高度なシナリオでは、lhs2TeXを使用して、LaTeXのソースとHaskellのコードの両方を前処理することができます。このような設定で、あなたは使用することができます
%if style /= newcode
Everything you want LaTeX not to see, as above.
%else
Everything you want LaTeX to see, but not Haskell.
%endif
これを実際に使用する方法の例を次に示します。関数のバージョンが2つあると仮定します。ドキュメントではそれらを区別したくありませんが、Haskellコードでは、それらは異なる名前を取得する必要があります。一方、例の最初のバージョンは不完全であるため、省略記号がありますが、それでもタイプチェックが必要です。だから私は次のことができます:
%if style /= newcode
%format example1 = example
%format example2 = example
%format DOTS = "\dots "
%else
%format DOTS = "undefined"
%endif
Our first attempt:
> example1 = 42 == DOTS
Now we complete the example:
> example2 = 42 == 6 * 9
このファイルを--newcode
モードで処理して前処理されたHaskellを抽出し、--poly
モードで通常どおりLaTeXを取得できます。
マニュアルでは、セクション10で条件について説明しています。条件の使用例は、セクション11.1および11.4で提供されています。
私は次のスタイルを使用します。
%if False
\begin{code}
<code>
\end{code}
%endif
編集:私はおそらくこのスタイルを取り入れたAndresLöhのスライドを見つけました。
http://www.haskell.org/haskellwiki/Literate_programmingから..。
コードを非表示にする場合は、たとえば次のように定義できます。
\long\def\ignore#1{}
補助機能は次のように非表示にできます。
\ignore{
\begin{code}
help = putStr "Help me, what is this LiterateProgramming thing??"
\end{code}
}