6

我目前正在写很多小报告。其中大多数只是带有一些图表和说明性评论的价值转储。

是否有一个有文化的编程环境,让我以简单的格式(最好是 markdown/latex 和 haskell)编写我的报告,然后转换为包含在原始文件中完成的计算结果的某种输出格式(最好是 pdf)?

我知道 Haskell 支持识字编程,但我不认为可以捕获输出(可能还有整个图像)。

4

5 回答 5

15

lhs2TeX处理器支持通过 GHCi 评估 Haskell 表达式。这是一个最小的例子:

\documentclass{article}

%include polycode.fmt
%options ghci

\begin{document}

Running

> fmap (+1) [1..10]

yields \eval{fmap (+1) [1..10]}.

\end{document}

这将产生输出,其中包含命令在输入[2,3,4,5,6,7,8,9,10,11]中的位置的列表。\eval

您可以引用当前文件中的定义。即,该\eval函数通过将当前文件加载到ghci然后在该上下文中评估表达式来工作。

还有\performwhich 与 相同\eval,但输出不会被视为一段 Haskell 代码,而是一段 LaTeX 代码。因此,您可以编写生成部分输出文档的 Haskell 函数。

话虽如此,在 lhs2TeX 中这个功能还有很多可以改进的地方,而且实现起来相当麻烦。

编辑:从评论中得出结论,目标是包含图表库生成的图像。这是一个概念证明文档,展示了如何实现这一目标:

\documentclass{article}

\usepackage{graphicx}

%include polycode.fmt
%options ghci

%if style == newcode
(Stuff here will not be typeset by LaTeX, but seen by Haskell.)

> import Data.Accessor
> import Graphics.Rendering.Chart
>
> renderAndInclude :: Renderable a -> FilePath -> IO ()
> renderAndInclude r filename = do
>   renderableToPDFFile r 200 200 filename
>   putStrLn $ "\\includegraphics{" ++ filename ++ "}"

%endif

%format ^= = "\mathbin{{}^\wedge\!\!=}"

\begin{document}

The image description

> image :: Renderable ()
> image  =  toRenderable
>        $  layout1_title  ^=  "Test"
>        $  layout1_plots  ^=  [ Left (toPlot plot) ]
>        $  defaultLayout1
>   where
>     plot   =  plot_lines_values ^= [[ (x, sin x) | x <- [0, 0.01 .. 10 :: Double] ]]
>            $  defaultPlotLines

yields the following output:

\perform{renderAndInclude image "image.pdf"}.

\end{document}

您必须编写的中央辅助函数类似于renderAndInclude上面的内容,它执行实际渲染,将结果写入文件,并生成一个\includegraphics读取文件的 LaTeX 命令。

于 2013-01-30T18:05:46.743 回答
3

如果您不是绝对必须拥有 Haskell,则可以使用SweaveR获得其余部分。您基本上编写了一个带有嵌入式 R 代码的 LaTeX 文档。您可以选择在最终的 PDF 输出中包含代码、结果(包括绘图)或两者。Knitr是 Sweave 的最新扩展(或简化?)。

于 2013-01-30T17:58:15.623 回答
2

如果您想使用图表而不是图表,那么本文中描述的图表构建器是您的朋友。适用于 markdown 和 LaTeX。

于 2013-01-31T08:35:52.750 回答
0

很抱歉参加晚会(非常)迟到。答案仅供将来访问此问题的访问者参考。

Org-mode确实提供了一个很好的读写编程环境。尽管它本身就是一个宇宙,但它非常值得研究!可以在以下链接中找到有关其处理代码方式的更多信息:

也有对 Haskell 的支持,否则此评论将是多余的。虽然格式不是 Markdown,但 Org-mode 有一种非常简单的标记方式。

于 2013-08-26T16:29:58.400 回答
0

你可以试试http://code.google.com/p/nano-lp/,它支持 Markdown/Multimarkdown 和其他轻量级标记(还有 OpenOffice),并且很容易将多个文件包含在一个文件中。例如,使用 OpenOffice,您可以将生成的文件导出为 PDF。还支持 Asciidoc 和 TeX/LaTeX,因此您也可以使用它们来生成 PDF

于 2013-02-14T15:31:44.227 回答