Markdown 是一种轻量级的 标记语言,相对于复杂的 HTML 标记语言来说,Markdown 易读易写,非常容易学习掌握。不过,随着 Markdown 的不断发展,其语法格式出现了各种标准,本文以博客园的「Markdown 编辑器」的语法规则为准。
在博客园使用 Markdown 与 (LaTeX) 撰写博文的方法:
- 选择 Markdown 撰写博文:在博客园「设置」-「选项」中,将「默认编辑器」修改为 Markdown;
- 使用 MathJax 书写 LaTeX 数学公式:在博客园「设置」-「选项」中,勾选「启用数学公式支持」。
HTML 与 Markdown 的关系
HTML 是一种发布的格式,Markdown 是一种书写的格式。Markdown 的语法种类很少,只对应 HTML 标记的一小部分。不在 Markdown 涵盖范围之内的标签,都可以直接在文档里面用 HTML 撰写。比如:
<!-- 在文档顶部自定义样式 -->
<style type="text/css">
cg {color:gray}
fr {float:right;padding-left: 2em;}
.icg {text-indent:2em;color:green}
.acb {text-align:right;color:blue}
</style>
特殊字符的自动转换
Markdown 让你可以自然地书写字符。譬如:如果你使用的 &
字符是 HTML 字符实体 的一部分,它会保留原状,否则它会被转换成 &
,即 © AT&T
会被转化为 © AT&T
,最后得到 © AT&T。
在线 Markdown 编辑器
一、标题与 HTML 标签
<div class="acb">2 级标题</div>
---
<div class="icg">~~1 级标题~~</div>
===
### <cg>3 级标题</cg>
2 级标题
1 级标题
3 级标题
特别说明几点:
- HTML 的区段标签可以在 Markdown 的段落、列表或是标题里随意使用;
- 但在 HTML 区块标签间的 Markdown 格式语法可能不被支持,详见于此;
#
的数目对应标题的级数,最多支持五级。因此,一级标题也可用# 一级标题
;- 一级标题与二级标题对记号
=
或-
的数目没有要求。
二、段落、缩进与强制换行
一个 Markdown 段落是由一个或多个连续的文本行组成组成,它的前后要有一个以上的空行。Markdown 允许段落内的强制换行——在行尾插入至少两个空格。
普通段落
不该用空格
 或制表符来缩进。
一个 Markdown 段落是由一个或多个连续的文本行组成组成,它的前后要有一个以上的空行。Markdown 允许段落内的强制换行——在行尾插入至少两个空格。
普通段落
不该用空格
或制表符来缩进。
三、列表与表格
- Markdown 支持有序列表和无序列表;
* 要使图表水平居中,又不想使用 HTML,可以参考 [本方法](http://www.cnblogs.com/Pandaman/p/skin.html#tips);
+ 务必在列表、表格、引用区块、代码区块等内容前后保留一空行。
| 默认对齐 | 右对齐 | 居中对齐 |
| ----- | -----: | :----: |
| 斜体 | *斜体* | _斜体_ |
| 强调 | **强调** | __强调__ |
| 删除线 | ~~删除线~~ | - |
1. 无序列表使用 `*`、`+` 或是 `-` 作为列表标记;
2. 有序列表则使用数字接着一个英文句点。
- Markdown 支持有序列表和无序列表;
- 要使图表水平居中,又不想使用 HTML,可以参考 本方法;
- 务必在列表、表格、引用区块、代码区块等内容前后保留一空行。
默认对齐 | 右对齐 | 居中对齐 |
---|---|---|
斜体 | 斜体 | 斜体 |
强调 | 强调 | 强调 |
删除线 | - |
- 无序列表使用
*
、+
或是-
作为列表标记; - 有序列表则使用数字接着一个英文句点。
四、图片、链接与分割线
<fr>![我的头像](http://pic.cnitblog.com/avatar/712172/20150109000843.png)</fr>
你可以在一行中用三个以上的 `*`、`-`、`_` 来建立一个分隔线。
---
[Pandaman](http://www.cnblogs.com/Pandaman/ "[可选] 描述信息") 的博客地址: <http://www.cnblogs.com/Pandaman/> 。
***
如果有图片的 URL 地址:http://pic.cnitblog.com/avatar/712172/20150109000843.png ,
___
就能用一种和链接很相似的语法来标记图片(右侧浮动)。
你可以在一行中用三个以上的 *
、-
、_
来建立一个分隔线。
Pandaman 的博客地址: http://www.cnblogs.com/Pandaman/ 。
如果有图片的 URL 地址:http://pic.cnitblog.com/avatar/712172/20150109000843.png ,
就能用一种和链接很相似的语法来标记图片(右侧浮动)。
五、引用区块与转义符号
>*Markdown* 标记引用区块的方法:
>
>1. 每行的最前面加上 `>` ;
>2. 引用区块可以嵌套,只要根据层次加上不同数量的 `>` 。
>
>>引用区块内也可以使用其他的 *Markdown* 语法,包括标题、列表、代码区块等。
>
> Markdown 可以利用反斜杠 `\` 来插入一些在语法中有其它意义的符号,譬如 \ \` * { } # + - . ! * 与 \_
Markdown 标记引用区块的方法:
- 每行的最前面加上
>
;- 引用区块可以嵌套,只要根据层次加上不同数量的
>
。引用区块内也可以使用其他的 *Markdown* 语法,包括标题、列表、代码区块等。
Markdown 可以利用反斜杠来插入一些在语法中有其它意义的符号,譬如 ` * { } # + - . ! * 与 _
六、代码区块与 (LaTeX)
行内代码区块用反引号 <code>`</code> 包起来即可;行间代码区块用 <code>```</code> 包起来,并可指定语言的名称或者后缀(也可以每行缩进四个空格)。
```latex
egin{equation}
F(x)=int_0^tsin(t)mathrm{d}\,t+left[lim_{x
ightarrow0}g(x) imessum_{m=0}^inftyfrac{(-1)^m}{Gamma(m+{color{red}α}+1)}
ight]
end{equation}
```
LaTeX 提供了对数学公式的支持。行内公式用 `$` 包起来即可;行间公式用 `$$` 包起来,或使用 `egin{equation} 带编号的数学公式 end{equation}` 等命令。除此之外,数学公式还支持 Unicode 写法,即不使用 LaTeX 命令,直接键入 Unicode 字符,如 α。
$$F(x)=int_0^tsin(t)mathrm{d}\,t+left[lim_{x
ightarrow0}g(x) imessum_{m=0}^inftyfrac{(-1)^m}{Gamma(m+{color{red}α}+1)}
ight]$$
如需引用公式,应该先用 `label{公式名}` 标记被引用的公式,然后在正文中用 `
ef{公式名}` 引用该公式,如(
ef{name})。
行内代码区块用反引号 `
包起来即可;行间代码区块用 ```
包起来,并可指定语言的名称或者后缀(也可以每行缩进四个空格)。
```latex
egin{equation}
F(x)=int_0^tsin(t)mathrm{d}\,t+left[lim_{x
ightarrow0}g(x) imessum_{m=0}^inftyfrac{(-1)^m}{Gamma(m+{color{red}α}+1)}
ight]
end{equation}
```
LaTeX 提供了对数学公式的支持。行内公式用 $
包起来即可;行间公式用 $$
包起来,或使用 egin{equation} 带编号的数学公式 end{equation}
等命令。除此之外,数学公式还支持 Unicode 写法,即不使用 LaTeX 命令,直接键入 Unicode 字符,如 α。
如需引用公式,应该先用 label{公式名}
标记被引用的公式,然后在正文中用
ef{公式名}
引用该公式,如(
ef{name})。
Markdown 编辑器在输入 LaTeX 公式时的 Bug
Markdown 与 LaTeX 的语法规则存在歧义:
- 编辑器支持 Markdown 的语法,如
*斜体*
、_斜体_
以及输入特殊符号的转义符号;
- 编辑器同时也支持 LaTeX 输入数学公式,数学公式用
*
表示乘法,用_
表示下标,用\
表示(多行公式与矩阵等)换行;
原因分析与初步解决方法:
- 在 Markdown 编辑器里输入 LaTex 的矩阵等无法换行,究其原因是由于
\
会被 Markdown 优先转化为;
- 根据上述猜想,发现如果使用
\\
替代原 LaTex 命令\
即可,同理*
与\_
代替*
与_
; - 但由于 特殊字符的自动转换,在公式存在多个
*
或_
符号时,有时候也会出现问题。
因此,博客园的 Markdown 编辑器还存在很多不足之处,希望官方尽快推出解决方法(譬如:在 LaTex 环境中禁用 Markdown 语法格式),否则只能采用下面的方法凑合了。
egin{align}
otag
dot{x}&=mathbf{A}x+mathbf{B}u\\
y&=egin{bmatrix}1&0\
0&1end{bmatrix}x+egin{bmatrix}1&0\\
0&1end{bmatrix}ulabel{name}
end{align}
egin{align}
otag
dot{x}&=mathbf{A}x+mathbf{B}u\
y&=egin{bmatrix}1&0
0&1end{bmatrix}x+egin{bmatrix}1&0\
0&1end{bmatrix}ulabel{name}
end{align}
在向博客园官方反映这个 Bug 后,他们迅速给出一个不错的 解决方案:
如果您在 Mardown 编辑器中不仅输入 Markdown,还想输入 LaTeX 数学公式,需要将 LaTeX 数学公式放在某个 HTML 标签之中,比如
<p> </p>
,这样可以避免数学公式中的一些字符被 Markdown 引擎处理。
其实这是利用 Markdown 不会处理位于 HTML 区块标签间内容这一特点。