9

我想用乳胶来记录我的代码,但是在乳胶文档的开头显示所有这些模块和编译器扩展真的很烦人。是否有一些标志我可以传递给 lhs2TeX 以防止它在 pdf 中显示这部分代码,同时仍然让 ghc 看到代码?

这似乎是一个非常基本的功能,但我在手册中找不到它。

4

3 回答 3

6

正确的方法确实是使用条件。

简单的选择是从 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

这是我在实践中如何使用它的一个示例:假设我有一个函数的两个版本;在文档中我不想区分它们,但在 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

您可以在 mode 下处理此文件--newcode以提取预处理的 Haskell,并在--polymode 下像往常一样获取 LaTeX。

手册在第 10 节中描述了条件。第 11.1 和 11.4 节提供了条件的使用示例。

于 2012-10-25T21:39:51.307 回答
5

我使用以下样式。

%if False

\begin{code}
<code>
\end{code}

%endif

编辑:我刚刚找到了 Andres Löh 的幻灯片,我可能从那里获得了这种风格。

于 2012-10-25T19:54:32.347 回答
4

来自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}
}
于 2012-10-25T19:54:17.823 回答