【问题标题】:How to comment out lines in literate haskell如何在识字的haskell中注释掉行
【发布时间】:2013-07-21 11:36:57
【问题描述】:

我无法在 lhs 风格的 haskell 程序中注释掉代码行,因此 haskell 和 Latex 都会忽略该行。

当我使用-- 时,我的 lh2tex 将尝试将 haskell 代码呈现为注释。但这通常会失败,因为代码中包含美元和其他让 Latex 感到困惑的东西。

当我使用--% 时,Latex 很高兴,因为它只是忽略了评论,但 haskell 不喜欢--%。只有当我在--haskell 后面放一个空格时才可以,但后来 Latex 又开始抱怨了。

【问题讨论】:

  • LaTeX 到底为什么会抱怨-- %?您会在该行上得到一个 n 破折号,或者可能是两个相邻的连字符减号,但该行的其余部分应被视为注释并被 LaTeX 忽略。
  • 你不能在整行前加上%(或者% )吗?这将使其成为 LaTeX 注释,并且由于该行不再以 > 开头,因此它也将被视为文字注释。不过,我还没有测试过。
  • @DanielWagner 是的,但请记住,您必须在代码行(以 > 开头)和非空白非代码行之间放置一个空行。

标签: haskell latex literate-programming


【解决方案1】:

如果您使用的是 lhs2TeX(您似乎是),那么您可以通过使用 lhs2TeX 条件来隐藏 LaTeX 中的代码:

%if False

> code seen by Haskell but not typeset
> -- comment that is not typeset

%endif

> code seen by Haskell and typeset
> -- comment that will be typeset

正如 Daniel Wagner 在他的评论中所建议的那样,另一种选择是在完整的行前面加上 % 以将它们转换为 LaTeX cmets。

lhs2TeX 将始终将 cmets 视为 LaTeX 文本,但它还会执行预处理。因此,在带有注释的行上使用%(如-- %不会起作用,因为% 最终会出现在部分相关代码的中间生成 TeX 文件并触发错误。

【讨论】:

  • 如果对这个回复投了反对票的人可以提供一些反馈,这样我以后可以提供更好的答案,那将会很有帮助。
  • %if False 很高兴知道。它的行为就像你说的那样。与此同时,我发现了另一种可能性。加载评论包后,我将我的 \begin{code} 替换为 \begin{comment} 并相应地 \end 。这是注释掉整个文本块的好方法。对于单行,您的建议回答了我的问题。
【解决方案2】:

显然,lhs2tex 仍会在将-- 之后的任何内容呈现为 LaTeX 之前对其进行预处理,这就是 -- % 不起作用的原因,正如您在问题中指出的那样,--% 未被识别为评论由 Haskell 提供,因为它可能是一个运算符。

最简单的解决方法是让它成为 Haskell 和 LaTeX 的注释行。例如,如果您有:

> main = do
>       options <- getOptions
>       setup <- fmap readSetup $ readFile "setup.dat"
>       configureWith options setup
>       putStrLn "Some message to the user"

如果您想暂时错过configureWith 行,可以这样做:

> main = do
>       options <- getOptions
>       setup <- fmap readSetup $ readFile "setup.dat"

% >       configureWith options setup

>       putStrLn "Some message to the user"

空行是必要的,因为在读写 Haskell 中,代码行旁边不能有注释行。 (这是为了防止因遗漏初始&gt; 而出现简单错误。)

【讨论】:

    猜你喜欢
    • 2015-12-23
    • 2016-01-26
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 2011-06-01
    相关资源
    最近更新 更多