【问题标题】:How can I hide code blocks in lhs2TeX?如何在 lhs2TeX 中隐藏代码块?
【发布时间】:2012-10-25 19:33:19
【问题描述】:

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

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

【问题讨论】:

    标签: haskell literate-programming


    【解决方案1】:

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

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

    您可以在--newcode 模式下处理此文件以提取预处理的Haskell,并在--poly 模式下照常获取LaTeX。

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

    【讨论】:

      【解决方案2】:

      我使用以下样式。

      %if False
      
      \begin{code}
      <code>
      \end{code}
      
      %endif
      

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

      【讨论】:

        【解决方案3】:

        来自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}
        }
        

        【讨论】:

        • 我实际上不鼓励这种解决方案。当然,可以使用这样的宏排除部分 TeX 文档。但是给定的\ignore 可能会在您的文档中引入虚假空格(在关闭} 之后),并且它的存在可能仍会以微妙的方式影响周围的文档。如果您想了解所有问题,请查看 LaTeX comment 环境及其文档。在预处理器中进行隐藏完全绕过了这些问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多