1227 字

kramdown 语法简介

偶然发现之前文章的markdown输出有问题,追根溯源发现是Github Pages的解释器有问题。当年建站是东拼西凑的代码,其实对jeklly没仔细学习,当时就觉得拿markdown语法写就没问题了,其实这货也是有方言的。不同的人按自己的需要对标准语法缝缝补补以适应新的要求,据说有些大牛开始着手markdown的标准化问题了。不过Github Pages目前只支持包括Maruku(默认),Redcarpet 和Kramdown在内为数不多的解释器。换言之,像我这种本地不装jeklly而纯依赖推送原始md文件的做法想要得到数学公式表格啥的支持就需要从这些解释器中找个最合适的用。如果你足够寂寞,装个jeklly然后使用pandoc的插件来本地生成html文档去推送也没关系。但我足够懒,所以我选择找一个最接近pandoc功能的解释器,也就是kramdown来凑合。本文旨在总结其与标准markdown的区别,方便以后写作。

Setext Style

setext 样式算得上轻量级标记语言的始祖,在kramdown中,这种样式可能与水平分割线冲突:

para A
---
para B

这种情况你不太好分辨para A是标题还是两段为水平线所分离,这样kramdown规定优先为标题,也就是setext 样式优先级高于水平分割线,但不允许内容与分割线间有空行,atx的井号模式也是如此,标准markdown对此没有要求,允许多个空行。

Header ID

扩展功能,使用ID为你的标题提供页面内引用地址,可以像超链接一样跳转,不信你点这里

# Hello      {#id}

Say [hello](#id)

代码块

扩展功能,可折叠代码块直接段落开头使用tab键就可以了,默认不折叠。

  a <- c(1:100) #宇宙最高司令教导我们说可以把一行代码写的尽量长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长一些
  b <- c(2:101)
^
  c <- b-a

相连代码块用^分割

围栏代码块

扩展功能,用~~~~~~围起来就可以了。

列表

不允许混合无序列表与数字列表,标准版两个不同列表容易产生一个无序列表:

* kram
+ down
- now

1. kram
2. down
3. now

同级别列表不允许有不同缩进。

定义列表

扩展功能。

kramdown
: A Markdown-superset converter

Maruku
:     Another Markdown-superset converter
kramdown
A Markdown-superset converter
Maruku
Another Markdown-superset converter

表格

扩展功能。

|-----------------+------------+-----------------+----------------|
| Default aligned |Left aligned| Center aligned  | Right aligned  |
|-----------------|:-----------|:---------------:|---------------:|
| First body part |Second cell | Third cell      | fourth cell    |
| Second line     |foo         | **strong**      | baz            |
| Third line      |quux        | baz             | bar            |
|-----------------+------------+-----------------+----------------|
| Second body     |            |                 |                |
| 2 line          |            |                 |                |
|=================+============+=================+================|
| Footer row      |            |                 |                |
|-----------------+------------+-----------------+----------------|

数学公式支持

扩展功能。

$$
\begin{align*}
  & \phi(x,y) = \phi \left(\sum_{i=1}^n x_ie_i, \sum_{j=1}^n y_je_j \right)
  = \sum_{i=1}^n \sum_{j=1}^n x_i y_j \phi(e_i, e_j) = \\
  & (x_1, \ldots, x_n) \left( \begin{array}{ccc}
      \phi(e_1, e_1) & \cdots & \phi(e_1, e_n) \\
      \vdots & \ddots & \vdots \\
      \phi(e_n, e_1) & \cdots & \phi(e_n, e_n)
    \end{array} \right)
  \left( \begin{array}{c}
      y_1 \\
      \vdots \\
      y_n
    \end{array} \right)
\end{align*}
$$

\[ \begin{align*} & \phi(x,y) = \phi \left(\sum_{i=1}^n x_ie_i, \sum_{j=1}^n y_je_j \right) = \sum_{i=1}^n \sum_{j=1}^n x_i y_j \phi(e_i, e_j) = \\ & (x_1, \ldots, x_n) \left( \begin{array}{ccc} \phi(e_1, e_1) & \cdots & \phi(e_1, e_n) \\ \vdots & \ddots & \vdots \\ \phi(e_n, e_1) & \cdots & \phi(e_n, e_n) \end{array} \right) \left( \begin{array}{c} y_1 \\ \vdots \\ y_n \end{array} \right) \end{align*} \]

HTML支持

比标准更宽泛,支持任意位置插入html代码并允许嵌套markdown语句

脚注

扩展功能,其实就是加了上标的链接。

That's some text with a footnote.[^1]

[^1]: And that's the footnote.

That's the second paragraph.

That’s some text with a footnote.1

That’s the second paragraph.

以上为常见功能的支持,有了这些写一篇带点公式代码的文章就不难了。


  1. And that’s the footnote.↩︎