GitHub 前不久发布了 New Features 公告,GitHub Pages now faster and simpler with Jekyll 3.0,宣布从 2016 年 5 月 1 日起,GitHub Pages 将只支持 kramdown 作为唯一的 Markdown 引擎。
这其实也算得一件好事,之前支持 Rediscount、Redcarpet 和 kramdown 等多种引擎,而它们相互之间和与标准 Markdown 之间又有一些细微却也无法忽视的差异,这让需要在多个平台使用 Markdown 的我头疼不已,早就希望 GitHub Pages 能与 GitHub 的 Issues 和 comments 等地方统一语法,本次更新虽然做不到这一点,但也算是迈出了不小的一步。
我在此前是使用 Redcarpet,配置如下:
代码语言:javascript复制markdown: redcarpet
redcarpet:
extensions:
- no_intra_emphasis
- fenced_code_blocks
- autolink
- tables
- with_toc_data
- strikethrough
pygments: true
切换到 kramdown 之后的配置如下:
代码语言:javascript复制markdown: kramdown
kramdown:
input: GFM
highlighter: rouge
切换过程中有若干需要处理的差异问题,现将它们及解决方法记录如下。
列表项里嵌套的代码块
嵌套在列表项中的代码块在 Redcarpet 中使用 Tab 进行缩进即可,而在 kramdown 中需要根据列表项的内容开始位置决定缩进的字符数。
关于此问题的讨论见 Embedding codeblocks in lists。
in Redcarpet:
代码语言:javascript复制1. list item one
```python
print 'hello, world'
- list item two
unordered list item one
unordered list item two
- list item two
unordered list item one
unordered list item two
删除线
在 Redcarpet 中使用如下语法能自动为文字加上删除线:
代码语言:javascript复制~~hello world~~
但切换到 kramdown 后这种写法失效了,浏览了一下文档之后并没有找到 kramdown 对应的语法,这个用得也少,遂直接用 HTML 元素解决问题:
代码语言:javascript复制<del>hello world</del>
hello world
update 2016/03/02: kramdown 主分支已经解决了这个问题,见 gettalong/kramdown#304,坐等 Release 后 GitHub Pages 更新就能用了。
update 2016/03/29: pages-gem 当前使用的 1.10.0 版本的 kramdown 已经包含了主分支对此的修复,已经可以愉快地使用 ~~hello world~~
来表示 hello world 了。
表格
在 Redcarpet 中如下写法能直接显示你写的内容:
代码语言:javascript复制READ|WRITE|SHARE
但在 kramdown 中会解析成表格:
READ|WRITE|SHARE
所以需要将 |
转义。
READ|WRITE|SHARE
相关讨论见:gettalong/kramdown#151
高亮的语言名称
使用 Redcarpet pygments 的组合时,cpp
、C
和 c
都能对 C 代码片断进行语法高亮。
而改为 kramdown rouge 的组合后,只能使用 cpp
。
rouge 支持的语言列表可以参考如下链接:
- List of supported languages and lexers
图片上面空行
在 Redcarpet 中,如下写法的图片和文字之间会换行:
代码语言:javascript复制Hello, world!
![](/img.png)
而 kramdown 中这种写法图片会直接接在文字后面显示,不换行。如果需要换行则应在图片上面空一行:
代码语言:javascript复制Hello, world!
![](/img.png)