Haskell 任何有文化的编程环境都支持即时结果吗?

Haskell 任何有文化的编程环境都支持即时结果吗?,haskell,latex,markdown,literate-programming,Haskell,Latex,Markdown,Literate Programming,我目前正在写很多小报告。其中大多数只是一些图表和说明性注释的值转储 是否有一个识字的编程环境,让我以一种简单的格式(最好是markdown/latex和haskell)编写报告,然后转换成某种输出格式(最好是pdf),其中包含在原始文件中完成的计算结果 我知道Haskell支持读写编程,但我不认为输出(可能还有整个图像)可以被捕获。如果你不一定非得拥有Haskell,你可以通过和获得其余的。您基本上编写了一个带有嵌入式R代码的LaTeX文档。您可以选择在最终PDF输出中包含代码、结果(包括绘图)

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

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


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

如果你不一定非得拥有Haskell,你可以通过和获得其余的。您基本上编写了一个带有嵌入式R代码的LaTeX文档。您可以选择在最终PDF输出中包含代码、结果(包括绘图)或两者。是Swave的最新扩展(或简化?)。

预处理器支持通过GHCi计算Haskell表达式。下面是一个简单的例子:

\documentclass{article}

%include polycode.fmt
%options ghci

\begin{document}

Running

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

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

\end{document}
这将在输入中的
\eval
命令处生成包含列表
[2,3,4,5,6,7,8,9,10,11]
的输出

可以引用当前文件中的定义。也就是说,
\eval
函数的工作原理是将当前文件加载到
ghci
中,然后在该上下文中计算表达式

还有与
\eval
相同的
\perform
,但输出不会被视为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}
\documentclass{article}
\usepackage{graphicx}
%包括polycode.fmt
%选项ghci
%如果style==newcode
(这里的内容不是LaTeX排版,而是Haskell看到的。)
>导入数据访问器
>导入Graphics.Rendering.Chart
>
>renderAndInclude::Renderable a->FilePath->IO()
>renderAndInclude r filename=do
>renderableToPDFFile r 200 200文件名
>putStrLn$“\\includegraphics{”++filename++“}”
%恩迪夫
%格式^=“\mathbin{{}^\wedge\!\!=}”
\开始{document}
图像描述
>图像::可渲染()
>图像=可理解
>$layout1_title^=“测试”
>$layout1_plots^=[左(顶部地块)]
>$defaultLayout1
>在哪里
>plot=plot_line_value^=[(x,sinx)| x$defaultPlotLines
产生以下输出:
\执行{renderAndInclude image“image.pdf”}。
\结束{document}

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

如果您想使用图表而不是图表,则如中所述的是您的朋友.Works与markdown和LaTeX类似。

您可以尝试,它支持markdown/Multimarkdown和其他轻量级标记(但也支持OpenOffice)而且很容易将多个文件合并到一个文件中。例如,使用OpenOffice,您可以将生成的文件导出为PDF。此外,支持Ascidoc和TeX/LaTeX,因此您也可以使用它们生成PDF。很抱歉(非常)晚才参加聚会。答案仅供将来的访问者参考

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


ofc也支持Haskell,否则此评论将是多余的。虽然格式不是标记,但组织模式有一种非常简单的标记方式。

我以前使用过R,不能说我喜欢它。但后来我不知道它支持这种输出。@Florian也许这可以改变你对R的印象:它是l我的意思是,如果你在浏览器中打开它,它后面会运行一个R会话。这很好:)现在唯一缺少的是动态创建和添加图像的能力。@Florian如果你有Haskell代码可以生成图像,那么可以使用
\perform
来完成。啊……如果我找到一种方法来输出图像latex兼容我会完成的。耶!@Florian是的。我编辑了答案,以包含有关如何实现这一点的更多信息。@Florian不可能直接将图像嵌入latex文件中,除非您为TikZ或类似latex包生成输出。我认为Chart无法做到这一点。可能有兴趣。遗憾的是,这需要Emacs:)(我是一个Vi族)事实上,对于一个Vi族来说,我的建议并不是最好的:P(除非你愿意去!)Naa…我一直在与…接触有用的边界,我可以接受这么多;)