那 些 回 忆 丶 挥 之 不 去 Cnblogs Pandaman Dashboard

博客园「Markdown 编辑器」的语法规则

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 字符实体 的一部分,它会保留原状,否则它会被转换成 &amp;,即 &copy; AT&T 会被转化为 &copy; AT&amp;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 允许段落内的强制换行——在行尾插入至少两个空格。   
普通段落  
&nbsp;不该用空格  
&emsp;或制表符来缩进。

一个 Markdown 段落是由一个或多个连续的文本行组成组成,它的前后要有一个以上的空行。Markdown 允许段落内的强制换行——在行尾插入至少两个空格。
普通段落
 不该用空格
 或制表符来缩进。

三、列表与表格

- Markdown 支持有序列表和无序列表;
* 要使图表水平居中,又不想使用 HTML,可以参考 [本方法](http://www.cnblogs.com/Pandaman/p/skin.html#tips);
+ 务必在列表、表格、引用区块、代码区块等内容前后保留一空行。

| 默认对齐 |  右对齐   |   居中对齐  |
| -----  | -----:    |  :----:   |
| 斜体    | *斜体*    |   _斜体_   |
| 强调    |  **强调** |   __强调__ |
| 删除线  | ~~删除线~~ |     \-    |

1. 无序列表使用 `*`、`+` 或是 `-` 作为列表标记;
2. 有序列表则使用数字接着一个英文句点。
  • Markdown 支持有序列表和无序列表;
  • 要使图表水平居中,又不想使用 HTML,可以参考 本方法
  • 务必在列表、表格、引用区块、代码区块等内容前后保留一空行。
默认对齐 右对齐 居中对齐
斜体 斜体 斜体
强调 强调 强调
删除线 删除线 -
  1. 无序列表使用 *+ 或是 - 作为列表标记;
  2. 有序列表则使用数字接着一个英文句点。

四、图片、链接与分割线

<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 标记引用区块的方法:

  1. 每行的最前面加上 >
  2. 引用区块可以嵌套,只要根据层次加上不同数量的 >

引用区块内也可以使用其他的 *Markdown* 语法,包括标题、列表、代码区块等。

Markdown 可以利用反斜杠来插入一些在语法中有其它意义的符号,譬如 \ ` * { } # + - . ! * 与 _

六、代码区块与 \(\LaTeX\)

行内代码区块用反引号 <code>`</code> 包起来即可;行间代码区块用 <code>```</code> 包起来,并可指定语言的名称或者后缀(也可以每行缩进四个空格)。

    ```latex
    \begin{equation}
    F(x)=\int_0^t\sin(t)\mathrm{d}\,t+\left[\lim_{x\rightarrow0}g(x)\times\sum_{m=0}^\infty\frac{(-1)^m}{\Gamma(m+{\color{red}α}+1)}\right]
    \end{equation}
    ```
LaTeX 提供了对数学公式的支持。行内公式用 `$` 包起来即可;行间公式用 `$$` 包起来,或使用 `\begin{equation} 带编号的数学公式 \end{equation}` 等命令。除此之外,数学公式还支持 Unicode 写法,即不使用 LaTeX 命令,直接键入 Unicode 字符,如 α。

$$F(x)=\int_0^t\sin(t)\mathrm{d}\,t+\left[\lim_{x\rightarrow0}g(x)\times\sum_{m=0}^\infty\frac{(-1)^m}{\Gamma(m+{\color{red}α}+1)}\right]$$

如需引用公式,应该先用 `\label{公式名}` 标记被引用的公式,然后在正文中用 `\ref{公式名}` 引用该公式,如(\ref{name})。

行内代码区块用反引号 ` 包起来即可;行间代码区块用 ``` 包起来,并可指定语言的名称或者后缀(也可以每行缩进四个空格)。

```latex
\begin{equation}
F(x)=\int_0^t\sin(t)\mathrm{d}\,t+\left[\lim_{x\rightarrow0}g(x)\times\sum_{m=0}^\infty\frac{(-1)^m}{\Gamma(m+{\color{red}α}+1)}\right]
\end{equation}
```

LaTeX 提供了对数学公式的支持。行内公式用 $ 包起来即可;行间公式用 $$ 包起来,或使用 \begin{equation} 带编号的数学公式 \end{equation} 等命令。除此之外,数学公式还支持 Unicode 写法,即不使用 LaTeX 命令,直接键入 Unicode 字符,如 α。

\[F(x)=\int_0^t\sin(t)\mathrm{d}\,t+\left[\lim_{x\rightarrow0}g(x)\times\sum_{m=0}^\infty\frac{(-1)^m}{\Gamma(m+{\color{red}α}+1)}\right] \]

如需引用公式,应该先用 \label{公式名} 标记被引用的公式,然后在正文中用 \ref{公式名} 引用该公式,如(\ref{name})。

Markdown 编辑器在输入 LaTeX 公式时的 Bug

Markdown 与 LaTeX 的语法规则存在歧义:

  • 编辑器支持 Markdown 的语法,如 *斜体*_斜体_ 以及输入特殊符号的转义符号 \
  • 编辑器同时也支持 LaTeX 输入数学公式,数学公式用 * 表示乘法,用 _ 表示下标,用 \\ 表示(多行公式与矩阵等)换行;

原因分析与初步解决方法:

  • 在 Markdown 编辑器里输入 LaTex 的矩阵等无法换行,究其原因是由于 \\ 会被 Markdown 优先转化为 \
  • 根据上述猜想,发现如果使用 \\\\ 替代原 LaTex 命令 \\ 即可,同理 \*\_ 代替 *_
  • 但由于 特殊字符的自动转换,在公式存在多个 *_ 符号时,有时候也会出现问题。

因此,博客园的 Markdown 编辑器还存在很多不足之处,希望官方尽快推出解决方法(譬如:在 LaTex 环境中禁用 Markdown 语法格式),否则只能采用下面的方法凑合了。

\begin{align}\notag 
\dot{x}&=\mathbf{A}x+\mathbf{B}u\\\\ 
y&=\begin{bmatrix}1&0\\
0&1\end{bmatrix}x+\begin{bmatrix}1&0\\\\
0&1\end{bmatrix}u\label{name}
\end{align}   

\begin{align}\notag
\dot{x}&=\mathbf{A}x+\mathbf{B}u\\
y&=\begin{bmatrix}1&0\
0&1\end{bmatrix}x+\begin{bmatrix}1&0\\
0&1\end{bmatrix}u\label{name}
\end{align}

在向博客园官方反映这个 Bug 后,他们迅速给出一个不错的 解决方案

如果您在 Mardown 编辑器中不仅输入 Markdown,还想输入 LaTeX 数学公式,需要将 LaTeX 数学公式放在某个 HTML 标签之中,比如 <p> </p> ,这样可以避免数学公式中的一些字符被 Markdown 引擎处理。

其实这是利用 Markdown 不会处理位于 HTML 区块标签间内容这一特点。