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