我现在正在写很多小报告,大部分都是一些带有图表和说明性评论的数值转储。
是否有一种文学编程环境,可以让我用简单的格式(最好是Markdown / Latex和Haskell)编写报告,然后将其转换为某种输出格式(最好是PDF),其中包含原始文件中完成的计算结果?
我知道Haskell支持文学编程,但我不认为可以捕获输出(可能是整个图像)。
我现在正在写很多小报告,大部分都是一些带有图表和说明性评论的数值转储。
是否有一种文学编程环境,可以让我用简单的格式(最好是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中,这个功能还有很多需要改进的地方,而且实现也相当混乱。
编辑:根据评论,目标是包含由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
命令来读取该文件。
你可以尝试 http://code.google.com/p/nano-lp/,它支持Markdown/Multimarkdown和其他轻量级标记语言(也支持OpenOffice),而且容易将多个文件合并为一个。使用OpenOffice,你可以将生成的文件导出为PDF格式。另外,它还支持Asciidoc和TeX/LaTeX,因此你可以使用它们来生成PDF文件。
非常抱歉来晚了。这个答案仅供日后访问此问题的人参考。
Org-mode 提供了一个很好的文学编程环境。虽然它是一个独立的世界,但它值得深入研究!有关它如何处理代码的更多信息可以在以下链接中找到:
当然也支持 Haskell,否则这个评论就是多余的。虽然格式不是 Markdown,但 Org-mode 有一种非常简单的标记方式。