关于markdown,这里有需要知道的一切

来源:互联网 发布:最大公约数 方法 知乎 编辑:程序博客网 时间:2024/06/05 10:27

  Markdown is a text-to-HTML conversion tool for web writers. Markdown allows you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML).
—— John Gruber

markdown的历史

  Markdown是一个轻量级的标记语言,其目标是实现易读易写,且兼容HTML语言。Markdown的流行得益于Github和Stackoverflow,Stackoverflow的代码块和Github上的README.md都是通过Markdown表现的。最早的Markdown是于2004年John Gruber编写的markdown 1.0.1。由于markdown的标准语法十分简单,以致衍生出各种版本的Markdown。比如github使用Github Flavored Markdown(GFM)、Sublime里面支持的MultiMarkdown、以及pandoc版本的markdown。

标准版本的Markdown语法

原始版本的Markdown语法,可以参考这篇文章:Markdown语法[翻译]。
另外还有一份语法速查表
标准Markdown的语法手册如下图:Markdown Cheat Sheet

Markdown的各种扩展

PHP Markdown Extra

PHP Markdown ExtraMarkdown的PHP版本,增加了许多有用的扩展。

  • 支持html块级元素中插入Markdown语法
  • 支持为一些元素添加id或class,比如为标题添加id属性,用带锚点的链接导航。支持的元素包括:header、code block、link、image.
  • 支持将代码用”`”或”~”包起来。
  • 支持手写的表格
  • 支持dl和dt在Markdown中的对应的语法
  • 支持脚注引用
  • 支持专有名词abbr
  • 避免下划线出现在单词中间,导致斜体输出

Maruku

继PHP Markdown Extra后,很多机遇Ruby的Markdown解释器开始出现。如Maruku。Maruku的语法详见这里

  • 支持原生Markdown
  • 支持所有PHP Markdown Extra的特性
  • 支持新的元数据语法,实际上是给元素添加属性的能力
  • 支持公式格式输出
  • 支持自动生成Table of Contents

Maruku的语法详见这里,不过该项目已经停止维护了。

Kramdown

同样也是Ruby开发的解释器,Kramdown吸取了Maruku几乎所有的特点,功能更为强大。

  • 引进了一些二义语法
  • 引入EOB标记”^”作为块元素的分隔符
  • 手写table的语法更加强大,支持table的header和footer
  • 同样支持ALD(Attribute List Definitions属性列表定义)
  • 同样支持LaTeX编辑显示支持
  • 还支持注释,以及在转换时配置一些转换选项

RDiscount

RDiscount也是基于Ruby开发的解释器。不过它是基于Discount的语法移植的,所有语法规则需要参考Discount,其语法支持几种上面没有提到过的特性:

  • 文本居中,即输出<center>
  • 图片大小定义![dust mite](http://dust.mite =150x150)
  • 输出alpha列表<ol type='a'></ol>

Redcarpet

Redcarpet是一个转化库,可以在标准的Markdown基础上,配置一些额外的功能:

  • 单词中间的”_”不处理
  • 转化PHP-Markdown风格的手写表格
  • 转化PHP-Markdown风格的带包含的代码块,也可以禁用标准Markdown的代码块语法
  • 自动link生成
  • 删除线支持: good
  • 高亮标签<mark></mark>通过==highlighted==输出
  • 引用标签<q></q>通过”quote”输出
  • 转化PHP-Markdown风格注脚
  • 一些二义的约束支持

GitHub Flavored Markdown

GFM的语法基本上实现了上述基于Ruby的Markdown。除此之外,GFM还支持一些额外的特性:

  • 支持把列表编程带勾选框的任务列表
- [x] @mentions, #refs, [links](), **formatting**, and <del>tags</del> are supported - [x] list syntax is required (any unordered or ordered list supported) - [x] this is a complete item - [ ] this is an incomplete item
  • 站内对分支、问题、用户等对象的直接引用
* SHA: a5c3785ed8d6a35868bc169f07e40e889087fd2e* User@SHA: jlord@a5c3785ed8d6a35868bc169f07e40e889087fd2e* User/Repository@SHA: jlord/sheetsee.js@a5c3785ed8d6a35868bc169f07e40e889087fd2e* #Num: #26* GH-Num: GH-26* User#Num: jlord#26* User/Repository#Num: jlord/sheetsee.js#26
  • 表情Emoji
  • 支持部分HTML标签

MultiMarkdown

MMD(MultiMarkdown)是C实现的Markdown解析器,支持几乎任何平台。不仅加强了PHP Markdown Extra一些功能,如果对表格、注脚、引用、公式的支持,而且能转换输出更多类型的文档:HTML、LaTeX、PDF、ODF、RTF甚至是MS Word。

Pandoc’s Markdown

开源界传说中的高富帅社区-Haskell社区,其作品Pandoc给了我们更好的选择,在多个方面完败MMD,参考:Pandoc vs Multimarkdown。
Pandoc是一个Haskell库,一个标记语言转换工具,可实现不同标记语言间的格式转换,堪称该领域的”瑞士军刀”。Pandoc以命令行的形式与用户交互,可支持多种操作系统,支持大量文本类型的输入输出。
Pandoc的官方地址在这里。
中文的语法说明如下:Pandoc 版本 Markdown 語法
关于Pandoc的安装使用,可以参考下面的链接:Markdown写作进阶:Pandoc入门浅谈
使用Pandoc进行写作是,可以参考如下的规范:Pandoc Markdown写作规范

markdown语法进阶

markdown的TOC(Table of Content)

在markdown中使用[TOC]可以自动生成目录。另外还可以通过一种添加锚点的方式。
如下例子:
在目录中书写:

[目录1](#目录1的锚点)

在段落中书写

<span id="目录1的锚点">标题1</span>

总结

目前,我的笔记大量采用Markdown进行书写。但是由于Markdown的版本众多,也导致我对一些高级用法的模糊与混淆。希望通过这篇文章,理清Markdown的过去和未来。大概了解各个扩展版本的特点。选择哪个版本进行书写当然是因人而异了,只要用的顺手,可以有效帮助自己提高书写效率就是最好的。

最后,这篇文章大量参考了:讲解 Markdown,感谢这篇文章的作者对Markdown全面而细致的讲解。

另外本文在细节之处,还需完善,希望可以更加详细的阐述Markdown。因此,后续还会继续更新文章。
贴出可能会参考的链接,以供后续学习:
1. 利用markdown制作电子书
2. 输出一本电子书
3. pandoc用户手册
4. 我用 Markdown,所以显得很酷吗?

0 0
原创粉丝点击