有哪些文学编程环境支持即时结果?

6

我现在正在写很多小报告,大部分都是一些带有图表和说明性评论的数值转储

是否有一种文学编程环境,可以让我用简单的格式(最好是Markdown / Latex和Haskell)编写报告,然后将其转换为某种输出格式(最好是PDF),其中包含原始文件中完成的计算结果?

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


其他编程语言和工具如何用于创建TeX文档的内容?这可能会引起兴趣。 - N.N.
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中,然后在该上下文中评估表达式来工作。

还有\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 命令来读取该文件。


很好 :) 现在唯一缺少的就是能够动态创建和添加图片的功能。 - fho
啊...所以如果我能从Charts找到一种输出LaTeX兼容的方法,那就完成了。耶! - fho
1
@Florian 是的。我已经编辑了答案,包括如何实现这一点的更多信息。 - kosmikus
2
@Florian,除非您为TikZ或类似的LaTeX包生成输出,否则无法直接嵌入图像到LaTeX文件中。我不认为Chart可以做到这一点。 - kosmikus
这并不妨碍我尝试...也许我会在周末尝试一下LaTeX后端 :) - fho
显示剩余2条评论

3
如果您非常需要Haskell,您可以使用SweaveR获得其余部分。您基本上编写一个LaTeX文档,并嵌入R代码。您可以选择在最终的PDF输出中包含代码、结果(包括图形)或两者都包括。Knitr是Sweave的一个较新扩展(或简化?)。

我以前用过R,不能说我喜欢它。但是我不知道它支持这种输出方式。 - fho
@Florian 或许这篇文章可以改变你对于 R 语言的印象:http://glimmer.rstudio.com/yihui/knitr/ 它是实时的,如果你在浏览器中打开它,就会有一个 R 会话在后台运行。 - Yihui Xie

2
如果你想使用图表而不是图表,那么 diagrams-builder,如 这篇博客文章 中所述,会是你的好帮手。它可以与 markdown 和 LaTeX 一样使用。

0

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


0

非常抱歉来晚了。这个答案仅供日后访问此问题的人参考。

Org-mode 提供了一个很好的文学编程环境。虽然它是一个独立的世界,但它值得深入研究!有关它如何处理代码的更多信息可以在以下链接中找到:

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


遗憾的是这需要使用Emacs :) (而我是个Vi用户) - fho
事实上,对于一个 VI 粉来说,我的建议并不是最好的(除非你愿意使用 Evil!)。 - Whil
我一直在使用vrapper,但是我发现它的实用性有限,我只能忍受这么多。 - fho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接