用标记语言来书写各种文章、笔记的管理非常方便。因为标记语言:
- 以纯文本格式书写,任何地方都可以打开、阅读、编辑
- 适合用 Git 等版本管理工具管理,并显示 diff
- 内容与格式分离,通过使用不同的 css 就可以有不同的显示效果
在标记语言中,markdown 借助 GitHub 的使用而愈发流行。Markdown 本身的语法也设计得非常简洁、直观,所以适合个人的日常使用。由于 markdown 书写文章如此便捷,现在已经有很多的工具和框架,让我们能使用 markdown 格式书写并发布文章,例如:
- Hexo 可以将 markdown 文档渲染为静态博客,直接部署即可发布
- Markdown Nice 可以将 markdown 文章转换为微信公众号的排版样式,粘贴到微信公众平台上即可发布
- GitBook 可以将一系列的 markdown 文档组织成书的格式,本地预览或者在线发布
这些工具和框架都大大扩展了 markdown 的可能性。似乎只需要一个 markdown 文档,我们就可以发布为各种格式。
然而看似大一统的世界实际上也存在着细小的裂痕。各个工具和框架由于所针对的平台的特性,往往都会在标准 markdown 的基础上定制一些格式用于保存元数据,这些元数据之间并不兼容。
例如,Hexo 要求在文档的前三行写上文章标题、日期、标签等元数据:
title: 可扩展的Web架构和分布式系统
date: 2016-04-20 20:31:51
tags: [Architecture, 翻译]
---
而 Markdown Nice 需要考虑微信公众平台对外部链接的限制,将 markdown 链接转为脚注形式显示。这让它扩展了 markdown 链接的格式,以支持脚注:
链接:[文字](链接)
脚注:[文字](脚注解释 "脚注名字")
至于 GitBook,它考虑书籍的章节目录,需要用户提供特定格式的 SUMMARY.md
来定义章节顺序,以此生成章节链接。
由此可见,要满足不同平台的发布需求,都需要或多或少地进行一些定制化修改。这就造成了一些问题:
- 在不同平台上发布文章还需要做一些 markdown 格式的微调,经常忘记不同平台定义的格式,还需要现查文档。
- 当需要将文章在不同平台间迁移时,markdown 格式的细微不同会造成混乱,还需要做一次格式转换。
- 在一文多发时,会保存不同平台的格式不太相同的文档,当文章需要更新时,几处文档可能会出现不一致。
让我们回想我们用 markdown 写作的初心是什么。我们在任何博客平台上发布文章时,都会在本地保留一个备份,因为我们都知道博客平台不一定长久,它更不会帮助你管理文章。我们在选择笔记应用的时候,会关心应用是否提供导出功能,我记的笔记能否导出为一个通用的格式,即使我以后不想用这个笔记应用了,我的笔记还可以继续存在。
Markdown 以及相关的工具正是在帮我们解决这个痛点。我们可以把 markdown 文档在本地进行管理,发布到不同的平台。原本需要在笔记应用中不停点“插入”放进去的图片,需要在博客平台上不断调整的加粗和斜体,需要在微信公众平台上的各种排版,现在都可以带走,只需要在 markdown 中标记文章的结构,用 css 定义所需的格式。
而现在 markdown 的各个工具都已经成熟,只是元数据的编码上稍有不同,我们是不是可以统一管理这些元数据,然后针对不同的工具和框架生成相应格式的定制 markdown 文档呢?Bloom 项目正是要做这件事。
TODO