这东西我已经用了半个月了吧,简单介绍一下使用体验。
我其实不大喜欢 Markdown 原生语言不能在内部定义 class 和 style 的,所以一直在寻找替代方案。
Madoko 这个东西相比与核心 Markdown 在各个方面都有很大的不同:
MD 从自身体量和定位上看都是个很简单的东西。 MD 的 reference 就半屏幕的篇幅, Madoko 的自己去看 (
http://research.microsoft.com/en-us/um/people/daan/madoko/doc/reference.html)。相比于 MD 的物尽其用,字字珠玑(貌似用词不是很准), Madoko 有一些东西实际上是我们几乎不会用到的(那个 reference 我只看了一半就放弃了),或者说按我的理解,和 C++ 或者 JS 之类的一样,用一个“子集”就好了。
这个主要是因为 Madoko 的定位是*写论文*,虽然作为没有相关经验的我对其是否堪当此任有点怀疑,但是我拿它弄个期末作业是没什么问题的。所以我认为 Madoko 和楼上诸位提到的各种“编辑器”不是一个量级的,编辑器一般是卖界面送语言, Madoko 是一套(目前只有一个 Apache 协议的 Koka 实现的)的语言附带一个编辑器。其语言本身和 MD 就不是一个量级的(和 GFM 不完全兼容)。
讽刺的是,虽然 Madoko 貌似从语法上实现了更高的可扩展性,但是我并不觉得这个软件本身是一个优秀的实践。其中有一个原因可能是 Madoko 的另外一个 intention ,就是他们的 Koka 编程语言的一次 show off 。这套轮子我个人目前兴趣不是很大,但是大概是他们研究工作的一部分。 Madoko 的在线编辑器*能用*,你用 npm 装到本地也能用,但是如果想把它当一个库,在 Node 里面写脚本转译就没那么容易了。
这方面作者还是做了一定工作的,也就是说直接 require('madoko') 的话,确实是可以成功的,然而它返回的接口和命令行直接调用 madoko 工具并不完全一样。直接 require 然后调函数的话会死的很惨——正常的 Madoko 输出依赖于一个类似于标准库一样的 prelude 文件,此外还有文本中的 include 之类的一系列依赖 fs 的问题,这个 Madoko 的核心是不会处理的。
另外,它默认使用了一个叫做 Monarch 的库做代码语法高亮(应该也是他们自家东西)。我 Google 了半天几乎找不到任何资料。其实如果给一个黑箱一样的东西,外面直接调(类似 highlight.js )也是可以的。但是这它要求你对文章中使用的每一个语言,单独注册语法定义数据,这个定义是分语言储存在 JSON 文件里面的, Madoko 的作者十分简单粗暴的把 Monarch 做了个 minify 放在 lib 里面(还没给 License ),定义文件(很偏心的给了一个 Koka 的,但是没有 Bash 的)和 prelude 一块扔在包里面。在 CLI 的入口里面正则匹配内容,一个个注册——要是想在脚本里面用语法高亮的话,这部分代码你得重写。
实际上楼上也提到作者和 VS 一些相关项目的关系,我在网上找到的有关 Monarch 的唯一一个有用信息就是这东西*貌似*也被用在了 VSCode 里面,代码在 GitHub 上直接能找到,但是好像接口不是完全相同,并且是 TypeScript 写的。顺带,我觉得 Madoko 如果也是用 TypeScript 写,大概会更切合微软近年的工程实践,奈何这东西是实验室里面出来的...
不发牢骚了。这东西一个很激进的地方在于,不同于 MD 直接转换成 HTML , Madoko 更偏向于 LaTeX 。我认为这意味着相比于 MD 和其他的 MD 扩展,其功能更完善。比如: Madoko 在导出 PDF 时,是*直接调用 LaTeX *输出的,也就是说你可以通过 LaTeX 语句*准确地控制输出页面的样式*。另外,各类 MD 扩展对数学公式的资词,我见过的一般都是依赖于 MathJax ,这东西缺点在于没有 LaTeX 那么灵活,并且有些还要求在线环境。 Madoko 基本没有这样的顾虑,就算是输出 HTML ,他也会把其中的公式部分提取出来单独用 LaTeX 渲染,然后转成图片贴进去。这些操作让整个转换过程显得不那么轻量。
Madoko 内部其实有两个输出模块,一个是 HTML ,一个是 TeX ,你可以同时产生两种格式的输出。当然我在网站上面用的话,就让他直接产生 MathJax ,然后打了个专门针对 LaTeX 输入的 MathJax 单文件包(我很讨厌 MathJax 的异步加载),然后客户端渲染。另外, Madoko 自身没有提供对中文的直接资词,所幸 HTML 根本没这个问题, PDF 的话加几个 LaTeX 的 Metadata ,效果和直接写 TeX 文档一样(另一种标记语言, asciidoc 就只有 HTML 能看了...)。在线编辑器上面比较喜感,中文段落全部语法错误... 并且,除了他自己的在线编辑器之外,目前没看到任何一个第三方的 Web/Native/Hybrid 编辑器对 Madoko 的语法提供资词。包括微软前面那帮人做的,我经常使用的 VSCode ,不过 VSCode 开放插件了,憋出一个来我感觉体验会比在线的要好。
@
Arthur2e5 Madoko 有两套 prelude ,一套是给 HTML 的(就一点 CSS ,貌似还有 JS ),还有一套是给 TeX 的,我觉得要真想修没有流程图的“硬伤”的话,也可以学着这么干 233