如何在lhs2TeX中隐藏代码块?

Mik*_*cki 9 haskell literate-programming

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

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

kos*_*kus 6

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

简单的选择是完全从lhs2TeX处理中排除这样的代码:

%if False
Everything you want LaTeX not to see. Can be

> code

as well as other stuff.
%endif
Run Code Online (Sandbox Code Playgroud)

在更高级的场景中,您可能希望使用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
Run Code Online (Sandbox Code Playgroud)

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

您可以在--newcode模式下处理此文件以提取预处理的Haskell,并在--poly模式下像往常一样获取LaTeX.

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


Jan*_*sen 5

我使用以下样式.

%if False

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

%endif
Run Code Online (Sandbox Code Playgroud)

编辑:我刚刚找到了AndresLöh的幻灯片,我可能已经采用了这种风格.