是否有任何识字的编程环境支持动态结果



我目前正在写很多小报告。它们中的大多数只是带有一些图表和说明性注释的值转储

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

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

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 中的此功能有很多可以改进的地方,并且实现是一个相当黑客。

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

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 命令来读回文件。

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

如果你想使用图表而不是图表,那么这篇博文中描述的图表生成器就是你的朋友。适用于降价和 LaTeX。

你可以

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

很抱歉(非常)迟到了。答案仅供未来访问者参考。

组织模式确实提供了一个很好的识字编程环境。尽管本身就是一个宇宙,但它非常值得研究!有关其处理代码方式的更多信息,请参阅以下链接:

  • 组织模式手册,第 14 章
  • Babel:组织模式下的活动代码
  • R 教程

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

最新更新