Проблема со спецификацией блока в грамотном файле haskell - PullRequest
2 голосов
/ 05 июня 2019

У меня есть этот блок кода в моем грамотном файле 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 то, что находится внутри блока спецификации, полностью игнорируется, и все, что находится после него, передается вперед, как будто перед ним есть вкладка ... Может быть, это что-то общее? Я к этому не привык ... Первый раз использую

Кстати, если я уберу блок спецификации, все остальное будет отформатировано правильно

1 Ответ

0 голосов
/ 05 июня 2019

Следующий ответ основан на предположениях. Если бы вы предоставили MCVE - короткий .lhs файл, который ясно демонстрирует проблему - возможно, может быть найден лучший ответ.

Я думаю, проблема в том, что lhs2TeX не предназначен для кода Си. Он запутывается в блоке spec, думает, что это код на Haskell, и выводит проблемные команды TeX. На самом деле, я даже не могу получить ваш опубликованный код за pdflatex - .tex это не работает. Вы можете использовать другой механизм для вывода кода C. Пакет minted должен подойти.

\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}

PS: странный for -петл может быть записан while(n-- > 0) { ... }, нет?

...