您的位置:首页 > 其它

CSDN-MarkDown编辑器使用手册(2)---MarkDown语法详解

2015-03-17 13:38 609 查看

CSDN-MarkDown 之markdown语法详解

1 MarkDown概述

设计哲学

MarkDown当初就是为了方便以纯文本写作而发明的,其设计宗旨是尽可能的易读、易写。其中易读的重要性高于其他,要达到的目的就是让读者意识不到标记符号的存在。MarkDown并没有设置最终显示样式的功能,只是规定了一篇文章的基本结构。所以同样一篇使用MarkDown写成的文章,在不同的网站上显示效果可以完全不同。这也算是内容和样式的分离,MarkDown只关注内容和结构,不关心最终显示样式。

与html的关系

MarkDown设计之初就是为了在Web上写文章。但MarkDown绝不是为了取代html,也不是为了模仿html。实际上MarkDown的标签功能只是HTML标签功能的小小子集,这些标签都是经过精挑细选出来的,只为了易读易写。

MarkDown最终要在Web上发布,发布之前必须转换为html标签,这个过程是有软件完成的。从这个概念上说,MarkDown是书写语言,而HTML是发布语言。

在MarkDown文件中,所有html标签都可以直接使用,无需任何特殊处理,唯一限制是,html块元素前后要空出一行,如:

这里是一个段落。

<div>
    这里的代码不会被MarkDown解析。如*好人*,并不会斜体显示。
</div>

这里是后续段落


与bbcode等的区别

除了MarkDown之外,还有很多用于Web书写的标记语言,国内Discuzz论坛用户都还记得其使用的BBcode吧。过去BBS、论坛、Blog也曾经设计开放HTML语法让用户使用,但却衍生出语法输入错误时造成整页排版错乱、有心人利用HTML语法进行XSS式的攻击与破坏等问题。由于BBcode的转换为系统机械式的行为,所以可以有效避免人为输入错误的问题,而BBcode为预先设计好的语法,也就是说意图以BBcode达成所有的HTML语法效果是不可能的,相当于一种语法过滤,如此便可避免所有可能发生的恶意破坏。

可见,BBCODE和MarkDown当初设计的出发点就是不同的。BBCODE更多是为了安全,而MarkDown是为了书写创作,两者可比性不强。

2 基本MarkDown语法

MarkDown是一种标准,所有实现都应该遵循一些基本的规范。

2.1 块元素

段落和换行

什么是段落,如何定界段落,是任何一个编辑器必须解决的问题。在微乳Word里回车表示一个段落的开始,在HTML里,
<p></p>
内封装的文本是一个段落。在MarkDown里,段落的分界标记是一个或者多个连续的空行。空行在这里的含义是:看起来是空白的行,也就是说空行可以包含空格和Tab等看不见的字符。

换行,是另一个重要的概念。在Word里,一个段落内的换行是根据样式和纸张大小自动调整的;在HTML里,除非使用
<br />
强制换行,否则一个
<p>
标记的段落内换行也是根据样式自动调整的;而在纯文本编辑器中,换行就是插入一个换行符。 MarkDown采用 【空格】【空格】【回车】 三个字符表示强制换行。

标题

MarkDown支持两种标题语法形式。第一种如下所示。

这是一级标题
===========

这是二级标题
--------------


对于这种语法,很多的开源软件Readme文件在使用。= 和 - 的个数多少无所谓,至少有一个就行。如

这里一级标题
=
这里是二级标题
---------------------------------------------


需要注意的是,=和-必须从行首开始,前面不能有任何字符;后面也不能有其他字符。

这张语法格式,只能产生两级标题,所以才引入了第二种语法格式。如下:

# 这是一级标题
## 这是二级标题
## 这是三级标题
#### 这是四级标题
##### 这是五级标题
###### 这是六级标题
####### 这还是六级标题,呵呵


前面有几个连续的#就表示该行是第几级标题,最多可以达到6级标题,分别与html的h1,h2,h3,h4,h5,h6相对应。

注意

(1)这两种语法不能混用,请坚持使用其中第一种。如下面的情况:

# 这是标题一

==========================

(2)# 必须位于实际行首(之前不能有内容文本,但可以有MarkDown标签),它和标题文字之间建议加【空格】。

引用

这种语法格式来自于Email。如下所示:

> 这里是被引用文本的第一行  
> 这里是被引用文本的第二行


其效果如下:

这里是被引用文本的第一行

这里是被引用文本的第二行

引用还可以嵌套。

> 这里是第一级引用
> 
> > 这里是第二级别引用
> 
> 又回到第一级别


引用里面还可以使用其他MarkDown标签,如:

> # 这里是标题1
> 
> * 这里是列表项
> * 这里是列表项


列表

MarkDown与HTML一样,同时支持有序列表和无序列表。无序列表如下所示:

中华人民共和国成立于哪一年?

* A 1949
* B 1921
* C 1804
* D 1956


使用非常简单,这里的*还可以换成-或者+号。 注意标签符号和内容文本之间要有一个空格。

有序列表如下所示:

ToDo List:

1. 学习
2. 吃饭
3. 喝酒
4. 睡觉


语法格式为【数字】【点】【空格】, 注意这里的数字是多少并不重要,转换成html的时候,会自动重新赋值。但还是建议按标准的来写。 每一个列表项可以包含多个段落,但是后续段落必须以4个空格或者一个Tab开头

1.  This is a list item with two paragraphs. Lorem ipsum dolor
    sit amet, consectetuer adipiscing elit. Aliquam hendrerit
    mi posuere lectus.

     Vestibulum enim wisi, viverra nec, fringilla in, laoreet
    vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
    sit amet velit.

2.  Suspendisse id sem consectetuer libero luctus adipiscing.


列表项中要包含引用,则引用的>必须被缩进。如下。

* 一个包含引用的列表项

    > 列表项目里的引用


列表乡里要包含代码块,则必须以8个空格或者两个Tab开始。如下。

* 一个包含代码块的列表项

        这里是列表内的代码块


可见列表项里的语法格式与普通语法格式是有所区别的。

代码块

这个功能是为程序员特别设计的,用于在文章中嵌入程序源码。格式也很简单,以至少4个空格或1个Tab开头的文本就被认为是代码了。如下

代码以至少4个空格或者1个Tab开头
    这里也是代码
这里不是了


处于代码区域的html特殊字符会被自动转义,Markdown语法在代码段里不被解析。所以代码段可以用来直接输出MarkDown自身源码。下面是一个C语言例子:

int main()
    {
        printf("Hello C\n");
    }


水平线

水平线这样表示。

* * *
***
---
--------------------------------------


不再解释。

2.2 区间元素

超级链接

MarkDown支持两种超级链接方式分别示意如下:

[百度](http://www.baidu.com)

[百度][1]
[1]: http://ww.baidu.com


强调

*斜体*, **粗体**, ***粗斜体***


注意的事,*对称分布,且和内容文本之间不能有空格。

代码片段

这与块元素的代码块不同,代码片段允许加载在一个段落内。如:

使用`printf`函数打印结果。


使用
printf
函数打印结果。

如果要想在代码片段里包含`,则需要使用多个`进行包围。如。

``这里面需要字面的反引号`,所以需要以多个反引号开始和结束。``


这是必要的,因为在代码段面,不能使用MarkDown语法,也就不能使用转义了,只能通过这种特殊方式才能包含反引号。如果要想在开头或者结尾使用字面的反引号呢?这需要把它和定界符的反引号组以空格分开。如。

`` `内容开头是反引号的情况和内容结尾是反引号的情况。` ``


另外,代码片段可以跨越多行。如下。

`
这是第一行  
这是第二行
这里还是代码片段
`


图片

图片语法就一句话: 在超级链接前面加上感叹号。下面是例子:

![图片](http://somewebsite/picname.png)

![图片][tag]
[tag]: http://somewebsite/picname.png


2.3 杂项

自动生成链接

<http://example.com>
会被自动转转换成
<a href="http://example.com/">http://example.com/</a>


address@example.com会被自动转换成

<a href="mailto:addre 

ss@example.co 

m">address@exa 

mple.com</a>


转义

与任何标记语言一样,必须对具有特殊意义的元字符进行转义,才能得到其字面值。转义标志位反斜线。如

\*星号字面值\*


在有需要的地方尽情的转义吧!

3 CSDN-MarkDown 扩展语法

CSDN-MarkDown在MarkDown基本语法的基础上,扩展了很多实用的功能。

删除线

~~这里的内容有删除线~~后续内容


这是个行内元素,以两个连续的波浪线标志开始和结束。

表格

|学号|姓名|年龄|  
    |:---:|:---|---:|  
    |204|奥巴马|18|


第一行是列标题,第二行定义各列对齐方式,第三列及其以后是各列的值。 上述代码得到的效果是:

[thead]
[/thead]
学号姓名年龄
204奥巴马18

代码栅栏

我个人觉得这是CSDN-MarkDown的特色所在,也是程序员博客必备之物。

``` php
$name = $_GET['name'];
echo $name;
```


以【连续三个反引号】【可选空格】【可选语言类型】作为开始标记,以【连续三个反引号】作为结束标记,被包围的内容会被特殊处理,使其显示为语法高亮的html代码。上述代码显示为:

$name = $_GET['name'];
echo $name;


4 几个需要注意的问题

代码块、列表、引用等块元素,可以相互嵌套,语法格式与嵌套的顺序有关。例如下面规则:

*   代码块作为列表项的子元素

    此时代码块必须以至少2个Tab或8个空格开始。

        这是代码块


代码块里的东西只做html安全码,不能识别处理MarkDown语法。所以代码块里也不可能出现列表。

这里是代码块。
* 这里的MarkDown语法不被解释。


列表项里的后续段落需要以一个Tab或4个空格开始,其后面的语法规则就与正常无异了。

如果得不到想要的结果,加个空行或者空格试试,多动手,不要背诵语法规则。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: