识字的haskell文件中的spec块有问题

时间:2019-06-05 17:48:08

标签: haskell literate-programming

我的识字haskell文件中有这段代码

\end{code}


\paragraph{Valorização}

Codigo em C

\begin{spec}
double co(double x, int n){
  double a = 1;
  double b = -1 * x * x / 2;
  double c = 12;
  double d = 18;

  for(; n > 0; n--){
    a = a + b;
    b = b * (-1 * x * x) / c;
    c = c + d;
    d = 8 + d;
  }
  return a;
}
\end{spec}


\subsection*{Problema 4}

发生的事情是,当使用lhs2tex和pdflatex时,spec块中的内容将被完全忽略,并且转发之后的所有内容(例如它前面都有一个制表符)...也许这是常见的东西吗?我不习惯这个...第一次使用它

顺便说一句,如果我删除spec块,则其他所有文件的格式都正确

1 个答案:

答案 0 :(得分:0)

以下答案基于推测。如果您提供一个MCVE(简短的Word 97-2003 Document (*.doc)文件来清楚地说明问题),则可能会找到更好的答案。

我认为问题在于Word Document (*.docx)不适合C代码。 .lhs块使它感到困惑,认为它是Haskell代码,并输出有问题的TeX命令。实际上,我什至无法获得您发布的代码经过lhs2TeX的原因-spec太破了。您可以使用其他机制来输出C代码。 minted软件包应该可以。

pdflatex

PS:奇怪的.tex循环可以写成\documentclass{article} %include lhs2TeX.fmt \usepackage{minted} \setlength{\parindent}{0pt} \begin{document} Some C code: \begin{minted}{c} double co(double x, int n){ double a = 1; double b = -1 * x * x / 2; double c = 12; double d = 18; for(; n > 0; n--){ a = a + b; b = b * (-1 * x * x) / c; c = c + d; d = 8 + d; } return a; } \end{minted} It can be directly translated into Haskell: \begin{code} co :: Double -> Int -> Double co x = worker 1 (-1 * x * x / 2) 12 18 where worker a _ _ _ 0 = a worker a b c d n = worker (a + b) (b * (-1 * x * x) / c) (c + d) (8 + d) (n - 1) \end{code} As you can see, \textit{Haskell} code passes through just fine. \end{document} ,不是吗?