任何有文化的编程环境是否支持即时结果?

时间:2013-01-30 17:35:08

标签: haskell latex markdown literate-programming

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

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

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

5 个答案:

答案 0 :(得分: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然后在该上下文中评估表达式来工作。

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

话虽如此,lhs2TeX中有很多关于此功能可以改进的东西,并且实现非常糟糕。

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

\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,它执行实际渲染,将结果写入文件,并生成一个读取文件的LaTeX \includegraphics命令。 / p>

答案 1 :(得分:3)

如果您不必使用Haskell,则可以使用SweaveR完成剩下的工作。你基本上写了一个带有嵌入式R代码的LaTeX文档。您可以选择在最终PDF输出中包含代码,结果(包括绘图)或两者。 Knitr是Sweave最近的扩展(或简化?)。

答案 2 :(得分:2)

如果您想使用图表而不是图表,那么diagrams-builder中描述的this blog post就是您的朋友。适用于markdown和LaTeX。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

对于参加聚会(非常)迟到感到抱歉。答案仅作为未来访问者对此问题的参考。

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

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