Markdown 语法的超快速上手
本文支持WTFPL协议,因此你想往哪转就往哪转。
Why markdown?
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。
Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表格、脚注、内嵌HTML等等),这些功能原初的Markdown尚不具备,它们能让Markdown转换成更多的格式,例如LaTeX,Docbook。Markdown增强版中比较有名的有Markdown Extra、
MultiMarkdown、 Maruku等。这些衍生版本要么基于工具,如Pandoc;要么基于网站,如GitHub和Wikipedia,在语法上基本兼容,但在一些语法和渲染效果上有改动。
- Baidu Baike
上述内容告诉你,Markdown是一种标记语言,再粗暴一点说,就是排版用的,再再粗暴一点,就是如何让你看起来如同记事本一般平淡的文本能够变得花里胡哨。
偷偷告诉你:这篇文章就是用Markdown写的。
标记语言??我知道HTML啊,有什么区别么??
他俩啥关系
Markdown是基于HTML所开发的,与HTML不同的是,Markdown(以下简称MD)并不受W3C基金会管理,但本身也是开放的。
Markdown允许内嵌HTML代码(尽管不完全支持HTML标准下的所有标签,这是出于安全考虑,而且这也不是倡用的行为),而在网页显示的时候这些Markdown语法也会被转换成对应的HTML标记文本显示在你的面前。
但是现在的Markdown并不只限于可以转换为HTML,新的技术(Pandoc)标明他们实际上还可以转换成doc或者pdf之类的……
他俩谁好用
这不是一个可以很快下定论的东西,无所谓谁更好或者更糟,如果Markdown和HTML真能像这样一较高下的话恐怕另一个也就不复存在了不是。
他们两个的面向是不同的,HTML专注于一种通用的,能够在各个设备上在一定的文本协议(HTTP/HTTPS)下正确的进行显示,所以论强大的话,HTML可以支持更加花哨强大的功能,但是相对应的,使用起来就要繁琐一些,并且具备一个相当庞大的语法标准和一些协议性的说明。
而Markdown则是面向于快速标记的,而且对程序员非常友好(因为本身针对代码的排版做了相关的处理,可比HTML的<code>
再配上一堆乱七八糟的CSS方便多了),因此广受IT行业的青睐,不仅如此,最近的Markdown甚至可以支持部分\(\mathrm{\LaTeX}\)语法(当然主要用于写数学公式用,而另一方面用于HTML的MathML似乎没能推广起来的样子)
所以简单来说,Markdown比HTML用起来快,但HTML具有Markdown无法替代的功能。
Markdown 用起来有多快??看看下面这段话就知道了:
万维网联盟创建于1994年,是Web技术领域最具权威和影响力的国际中立性技术标准机构。到目前为止,W3C已发布了200多项影响深远的Web技术标准及实施指南
Markdown:
> *万维网联盟*创建于**1994**年,是Web技术领域**最具权威**和**影响力**的国际中立性技术标准机构。到目前为止,W3C已发布了200多项影响深远的Web技术标准及实施指南
HTML:
<blockquote><p><i>万维网联盟</i>创建于<b>1994</b>年,是Web技术领域<b>最具权威</b>和<b>影响力</b>的国际中立性技术标准机构。到目前为止,W3C已发布了200多项影响深远的Web技术标准及实施指南<br /></p></blockquote>
据上述内容统计,当输入一个HTML标签的时候,你需要按下若干次的Shift+,+Shift+.+←[+/]+标签键位,而在Markdown里至多只需要若干次的Shift+8而已,根据时间复杂度o(n)的分析和人体工学的相关……
How?
本人的资历尚浅,即便如此自己还是能希望通过自己绵薄的力量帮助大家快速上手,自己从大二开始经常使用Markdown记录笔记,因此用的还算方便和熟练。因此这里针对一些非常非常常用的功能进行说明:。
标题文本(巧了,说的不就是我么??)
标题文本一般用#
开始,#
的数量决定标题的等级,这和HTML里面的<h1>
到<h6>
多少有些类似,尽管Markdown的最终渲染结果取决于各服务器提供的CSS文件但一般来说,层级越高(##...## Title
)的标题通常字会越小作为副标题使用。
比如,这段的标题实际上就是这么写的
## 标题文本
是的,根据井号的数量来看,这是个二级标题。
如没有特殊规定,一般标题最大支持到六级(正好对应HTML的<h6>
)
在有些Markdown系统下,#
可以(甚至会要求)成对出现
## 标题文本 ##
但是博客园里的没做这种要求
标题属于行级格式,因此标题只能出现于一行的行首,而不允许在行的中间或结尾出现,而且当某一行被标注为标题的时候,整个一行的文字都会变成标题的格式。位于行中间的井号会被真的处理为#
位于分割线上方的文本会被自动处理为标题
粗体、斜体、粗斜体、删除线
身正不怕影子 斜
正是这样,Markdown提供了一种非常快速方式进行这种文字版式的替换,使用若干个成对的*
完成:
一对*
是斜体(*斜体*
)(不知何种原因,博客园的MD编辑器似乎不支持斜体,自然,粗斜体也会同样变成粗体,好吧,跟皮肤有关系,有的皮肤样式对应的Markdown渲染样式就没有斜体,换个皮肤就好了)
两对*
是粗体(**粗体**
)
我想又粗又斜怎么办,很简单,1+2=3(***粗斜***
)
此外,Markdown还允许使用一堆双浪线~~
包围文本作为删除线使用,例如:
浪个里格浪
~~浪个里格浪~~
不幸的是,Markdown语法里并未提供下划线,尽管如此可以通过内嵌HTML的<u>
标签来实现。
引用
著名的作家鲁迅先生曾经在这里说了很多的东西,比如“我从来没说过这句话”……
引用在Markdown里由一个>
开始,值得注意的是,引用是一个块级结构,这意味着引用不会对文段的一部分进行修饰,而是直接作用于一整个文段
如果想要让后文内容脱离引用,根据上面的说法就是让后文内容脱离被引用的文段,也就是在引用文段的最后一行与非引用文段的第一行之间加个回车比如:
鲁迅说过:……
鲁迅没说过……
用Markdown写出来就是:
> 鲁迅说过:……
鲁迅没说过……
但如果是
> 鲁迅说过:……
鲁迅也说过……
就会变成:
鲁迅说过:……
鲁迅也说过……
和标题类似,引用也可以通过增加>
的数量进行嵌套引用:
鲁迅先生曾经说过
世界上本没有路,走的人多了,便成了路
> 鲁迅先生曾经说过
>> 世界上本没有路,走的人多了,便成了路
引用内的文段一样可以加上其他的格式标注,比如:
鲁迅先生强调过:真的勇士猛士,敢于直面惨淡的人生,敢于正视淋漓的鲜血。
> [鲁迅](https://baike.baidu.com/item/鲁迅/36231?fr=aladdin)先生**强调**过:**真的~~勇士~~猛士,敢于直面惨淡的人生,敢于正视淋漓的鲜血。**
表格
0 | VS | 0 |
---|---|---|
× | ○ | ○ |
○ | ○ | × |
× | × | ○ |
住手!!你们住手!!不要再下啦!!
这已经是你们下的第4294967295盘啦!!
Markdown提供了一个非常简单的关于表格的格式支持,尽管这原本并不存在于最初的Markdown语法集当中,Markdown对于表格功能上的支持是无法与HTML的<table>
标签抗衡的,因为它支持最完整的表格,也只有这种格式:
表头1 | 表头2 | 表头3 |
---|---|---|
左对齐的文本 | 居中的文本 | 右对齐的文本 |
左对齐 | 居中 | 右对齐 |
左对齐 | 居中 | 右对齐 |
只有表格的第一行可以作为表头使用,其他的项只能作为普通的元组使用,表格是向下排开的,所以想写横向表格的话也不是一个很好的选择,和引用类似,表格也是一个块级结构,而表格要求在其前后都要有一个回车,否则内容不被视为表格,表格的基本语法如下(这恐怕是Markdown里最麻烦的语法格式了):
上一段文本……
|表头1|表头2|表头3|
|:---|:---:|---:|
|左对齐的文本|居中的文本|右对齐的文本|
|左对齐|居中|右对齐|
|左对齐|居中|右对齐|
下一段文本
第一行作为表头使用表头的格式与表格其他项会略有不同,他的字更粗而且他所在的单元格与其他的单元格长得也略有不同。
第二行那个很像火星文的东西用于指定整列的对齐方式,横线的数量不限,冒号确定文本的对齐锚点位置,表示如下含义:
|:---|:---:|---:|
左 中 右
并不一定非要指定成这个样子,也可以全是左的,也可以全是右的……总之是这样。
后面的行就是普通的表格项了,以|
分割,不限于3列,可以更多,每列用|
分割,而且请注意,MD中一张表格的列数是固定的,因此,你不可以指定被合并的单元格,也不可以弄出那种像砖墙那样的锯齿表格,而且表格的列宽是自适应内容的,因此在原生MD中你无法指定列宽。
但如果真的需要这样怎么办呢,由于MD允许内嵌HTML代码,因此可以使用HTML的<table><tr><td>...
这些标签来实现(i.e.写成HTML表格),因为HTML的table功能足够强大,尽管如此内嵌HTML也不是倡用的做法。
代码块与行内代码
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World" << endl;
return 0;
}
这是Markdown最受IT从业者青睐的地方了,因为同样的功能如果让HTML来做会需要用各种各样的标签控制等宽文本然后还要用CSS或者JS脚本来控制高亮……
但是在Markdown里你完全不需要考虑这些(当然,高亮与否以及高亮的方式取决于服务器提供的CSS样式)。
这里先介绍代码块,它由一对三个反单引号包围```
,反单引号在哪呢??在键盘Tab键的上方你会找到一个标有~
的键,这个键用Shift打出来就是浪线,但是直接敲出来就是反单引号,在中文标点下,这个键会打出间隔符·
代码块是块级结构,被修饰的内容即使被写到某一段内,也会被另起一行作为新的段落,直至再出现三个反单引号结束,比如本节最开始的那个Hello World实际上是这样婶儿的:
(请无视反斜线`\`,我没找到好方法能够让代码块里显示代码块的写法)
\```cpp
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World" << endl;
return 0;
}
\```
其中,第一个三反单引号后面可以加入你的语言名称的缩写(cpp表示C++),这个有助于文档确认你这段代码基于何种语法进行高亮,你也可以指定JavaScript之类的
在有些Markdown系统中,允许通过另外一种方式定义代码块,将整个文段向内进行一次Tab(缩进)即可,这个文段整个就被当作代码块处理。这里不对此方法进行描述。
除了代码块以外,Markdown
还支持行内代码,对就是这样,行内代码和加粗类似,属于对文段内部的修饰,由一对反单引号包围,比如这段内容的Markdown语法就是这样的:
除了代码块以外,`Markdown`还支持**行内代码**,对就是这样,……
这种写法在有些时候是非常方便的,比如:
这里介绍关于
System.Collection.Generic
所包含的接口和类……
这样,在文本内排放代码是非常容易并且美观的
可比某课设里面往Word里面粘代码来的顺畅多了……
链接
链接在Markdown中的组织形式也非常简单,链接有两部分构成,一个是链接的显示文本,还有一个就是链接的符号地址:
比如沈阳航空航天大学官网
Markdown语法就是:
[沈阳航空航天大学官网](http://www.sau.edu.cn)
[显示文本](符号地址)
如果显示文本为空,则链接将直接取符号地址作为显示文本。
图片
(上图来自于百度搜索结果)
在Markdown中由于图片也是直接链接网络资源,因此她的格式多少与链接有些类似:


图片描述通常不会显示出来,有些页面允许图片描述作为鼠标悬停在图片上的提示文本出现,图片描述的另一个作用在于,当对服务器进行检索的时候,提供图片描述的关键字可以直接检索出该图片。
图片地址表示图片在网络上的位置(URI),如果图片存在,则直接显示图片,否则图森破!
列表
- 吃饭
- 早饭
- 午饭
- 晚饭
- 夜宵
- 睡觉
- 打豆豆
- 红豆
- 黄豆
- 绿豆
有序列表
有序列表就是带编号的列表,Markdown最基础的语法只支持这种格式的编号:
- 项目1
- 项目2
- 项目3
1. 项目1
2. 项目2
3. 项目3
是的!你没看错,就是这么写的!其中,如果手动编号顺序错误,有些Markdown编辑器会矫正过来(这种矫正可能不会在编辑期间完成,而是在最终显示的时候被修正),有些编辑器甚至会自动产生编号。
有些编辑器甚至支持下级的编号,以及其他的编号格式,如abc等,博客园的支持多级编号:
- 项目1
- 子项目1
- 孙子项目1.1
- 子项目2
- 子项目1
- 项目2
- 项目3
产生次级编号的方法是对次级编号进行缩进:
1. 项目1
1. 子项目1
1. 孙子项目1.1
2. 子项目2
2. 项目2
3. 项目3
无序列表
无序列表当然也就没有编号,他们用圆点作为项目符,在Markdown中可以使用加号+
,减号-
,星号*
引领一个无序项,使用哪个符号的最终结果是一样的,同样,无序列表也支持多级列表,例如:
- Who
- cares
- my
- order
- out
- of
- its
- own
- ORDER
写出来就是:
+ Who
+ cares
+ my
+ order
+ out
+ of
+ its
+ own
+ ORDER
数学公式(\(\mathrm{\LaTeX}\)扩展语法)
\]
\]
\]
\begin{bmatrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1 \\
\end{bmatrix}
\]
\begin{bmatrix}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23} \\
a_{31} & a_{32} & a_{33} \\
\end{bmatrix}
\begin{bmatrix}
x_1 \\ x_2 \\ x_3
\end{bmatrix}
=
\begin{bmatrix}
b_1 \\ b_2 \\ b_3
\end{bmatrix}
= \vec {b} \implies
\begin{equation}
\begin{cases}
a_{11}x_1+a_{12}x_2+a_{13}x_3 &= b_1 \\
a_{21}x_1+a_{22}x_2+a_{23}x_3 &= b_2 \\
a_{31}x_1+a_{32}x_2+a_{33}x_3 &= b_3 \\
\end{cases}
\end{equation}
\]
好吧,我估计错了,博客园的数学公式支持功能需要自己在设置里面打开。
这里不介绍关于如何开启该功能的方法,可自行查找其他博文。
这里也不介绍如何控制\(\mathrm{\LaTeX}\)文本的语法,这不属于标准Markdown语法而是\(\mathrm{\LaTeX}\)的语法
这里只说如何在Markdown中嵌入,类似于代码块,公式块也可以块级键入或者行内嵌入,块级嵌入的公式使用一对双美元号$$
,而行内则使用一对单美元号$
(这里只用块级的,有些系统不支持使用行内嵌入,当然,有的系统干脆不支持这个东西):
$$
E=mc^2
$$
$$
e^{i\pi}+1=0
$$
$$
\Phi (x)=\frac{1}{\sqrt{2\pi}}\int_{-\infty}^x e^{-\frac{t^2}{2}} \mathrm{d}t
$$
$$
\mathbf{E} =
\begin{bmatrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1 \\
\end{bmatrix}
$$
$$
\mathbf{A}\vec{x} =
\begin{bmatrix}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23} \\
a_{31} & a_{32} & a_{33} \\
\end{bmatrix}
\begin{bmatrix}
x_1 \\ x_2 \\ x_3
\end{bmatrix}
=
\begin{bmatrix}
b_1 \\ b_2 \\ b_3
\end{bmatrix}
= \vec {b} \implies
\begin{equation}
\begin{cases}
a_{11}x_1+a_{12}x_2+a_{13}x_3 &= b_1 \\
a_{21}x_1+a_{22}x_2+a_{23}x_3 &= b_2 \\
a_{31}x_1+a_{32}x_2+a_{33}x_3 &= b_3 \\
\end{cases}
\end{equation}
$$
Markdown 语法的超快速上手的更多相关文章
- 简明易懂,将细节隐藏,面向新手树立web开发概念——学完Java基础语法,超快速上手springboot+mybatiJavaWeb开发
简明易懂,将细节隐藏,面向新手树立web开发概念 --学完Java基础语法,超快速上手JavaWeb开发 Web本质(先忽视各种协议) Web应用可以理解为浏览器和服务器之间的交互. 我们可以看一个简 ...
- Markdown语法及编辑器
宗旨 Markdown 的目标是实现「易读易写」. 可读性,无论如何,都是最重要的.一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令所构成. ...
- 教你如何快速上手markdown语法,编写技术博客(史上最全最简,用MarkDown写博客)
首先,进行有道云笔记官网,新建一份markdown文档, 如下图 然后,在文档编辑区,左边,复制如下段落文字 加粗 斜线 标记颜色 下划线 废弃线 一级标题 二级标题 三级标题 四级标题 五级标题 六 ...
- Markdown快速上手指南
Markdown快速上手指南 1.Markdown介绍 markdown可以实现快速html文档编辑,格式优没,并且不需要使用html元素. markdown采用普通文本的形式,例如读书笔记等易于使用 ...
- 工作效率-十五分钟让你快速学习Markdown语法到精通排版实践备忘
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...
- Markdown 语法快速入门手册
Markdown 是一种轻量级标记语言,能将文本换成有效的XHTML(或者HTML)文档,它的目标是实现易读易写,成为一种适用于网络的书写语言. Markdown 语法简洁明了,易于掌握,所以用它来写 ...
- 【Python五篇慢慢弹】快速上手学python
快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...
- Objective-C快速上手
最近在开发iOS程序,这篇博文的内容是刚学习Objective-C时做的笔记,力图达到用最短的时间了解OC并使用OC.Objective-C是OS X 和 iOS平台上面的主要编程语言,它是C语言的超 ...
- Cmd Markdown语法参考
https://www.zybuluo.com/mdeditor markdown语法说明 Markdown中公式的写法 $$P(X=k)=C_n^kp^k(1-p)^{n-k}$$ 欢迎使用 Cmd ...
随机推荐
- [图论训练]1143: [CTSC2008]祭祀river 二分图匹配
Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在 水面上,奉龙王为神.每逢重大庆典, Y族都会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组 ...
- java面试题之spring aop中jdk和cglib哪个动态代理的性能更好?
在jdk6和jdk7的时候,jdk比cglib要慢: 在jdk8的时候,jdk性能得到提升比cglib要快很多: 结论出自:https://www.cnblogs.com/xuliugen/p/104 ...
- hdu 4400 离散化+二分+BFS(暴搜剪枝还超时的时候可以借鉴一下)
Mines Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- poj 3468 线段树成段更新
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 54012 ...
- Linux System Programming 学习笔记(一) 介绍
1. Linux系统编程的三大基石:系统调用.C语言库.C编译器 系统调用:内核向用户级程序提供服务的唯一接口.在i386中,用户级程序执行软件中断指令 INT n 之后切换至内核空间 用户程序通过寄 ...
- UVA - 10196:Check The Check
类型:简单模拟 大致题意:已知国际象棋行棋规则,给你一个局面,问是否将军?谁将谁的军?(保证不会同时将军) 思路:都以小写字母 测试 是否将 大写字母. 然后一个局面测两次(一次直接测,一次反转棋盘, ...
- GNOME 3.x下安装配置小企鹅输入法框架及SunPinYin插件
fcitx 小企鹅输入法框架已经越来越成熟,并且具备极高的性能,配合 Sun PinYin 智能输入法就和 Windows 下的搜狗百度等输入法几乎无二了.事实上,现在Linux版本的搜狗输入法正是基 ...
- 转---派遣例程与IRP结构
派遣例程与IRP结构 文章出处:http://www.cnblogs.com/zmlctt/p/3978124.html#commentform 提到派遣例程,必须理解IRP(I/O Requ ...
- POI2004
11th Polish Olympiad in Informatics(POI2004) <br > 填坑计划第二弹......把这个没填完的坑搬过来啦~ 上次勉强填完NEERC的坑... ...
- Java原子类及内部原理
一.引入 原子是世界上的最小单位,具有不可分割性.比如 a=0:(a非long和double类型) 这个操作是不可分割的,那么我们说这个操作是原子操作.再比如:a++: 这个操作实际是a = a + ...