Markdown学习笔记(1)- Markdown快速入门

Markdown学习笔记(1)- Markdown快速入门


缘起

Markdown作为一种用于编写结构化文档的纯文本格式,它易读易写的纯文本特性和宽泛简单的语法十分适用于格式化的笔记和说明中。正因为这种书写和表达上的便利性,它已经成为了知乎、GitHub、 Bitbucket,、Reddit等知名社区的主流文本语言。因此,如果你作为贡献者经常活跃于这些社区,你应该更深入地了解一下这种文本格式。本文档就是使用Markdown格式进行书写的。

其实,Html的文本已经很容易书写了,而且它功能强大,能展现出很多样式。但很显然地,Html文档并没有那么适合阅读。2004年,Markdown的作者John Gruber,使用Perl语言写出了一个markdown文档到Html文档的转换器,即Markdown.pl。Markdown语言就随着这个转换器,在BSD协议下被发布出来了。

但John Gruber显然不怎么喜欢“语法律师”,他并没有规定Markdown的一些语法细节,只给出了大概的语法。对于那些没有具体规定的书写规则,Markdown文本将被如何转换为Html文本,以及将以什么样子在视觉上呈现出来,这完全取决于Markdown.pl的实现。John Gruber在推特中表示,正是因为没有对Markdown进行标准化,Markdown这种文档书写格式才具有很强的生命力。

John Gruber在推特中的回应

一般来说,没有语法标准的语言会对学习者以及使用者造成很大的困扰。但Markdown语法体系的构建只依赖几个符号,书写特别简单,而且任何格式的文本都是合法的,因此大家仍然没有太多疑惑地在用各自习惯的方式使用它。有很多不同的Markdown解析器给出了几种不同的实现。

当然,有些人不想要标准化的Markdown语法,就有人想要标准化的Markdown书写格式。一些人认为,在不同的地方要调整Markdown语法才能够让显示效果保持一致,这要求使用者记忆几套不同的语法细节,这是很麻烦的,于是,他们试图制定一套实用的Markdown语法标准,这就是CommonMark。我们不评价这种行为,只对这套语法标准本身进行讨论。CommonMark消除了很多原本语法中的未定义行为,这使它获得了一部分人的青睐,CommonMark在社区的一些用户眼中成为了事实上的Markdown语法标准。

这篇学习笔记主要围绕CommonMark定义的语法标准展开。但即使你是一个坚定的去标准化主义者,粗略地看一下Markdown的通用语法规则也是有益处的,这篇文章接下来的部分将介绍这些规则,它们十分简单,很切合易读易写的设计理念。


段落

前后都有空行的文本就是一个段落。

斜体

在文本前后加上_或者*符号,即可把文本样式变为斜体。

例子:_Italic_或者*Italic*

效果:Italic

加粗

在文本前后加上连续的两个_或者*符号,即可把文本样式变为粗体。

例子:__Bold__或者**Bold**

效果:Bold

分隔线

分隔线标识独占一行,这行文本可以由0~3个空格开始,包含3个及以上的_-或者*符号。符合上述描述的一行文本将被视为一个分隔线,这些符号之间可以包含任意数量的空格。

例子:---或者___或者***或者* ** * * * ** ***或者____ _____

效果:


引用

在行首、文本前加上>,代表这行的本文是一行引用内容。

例子:>这句话引用自《blahblah》

效果:

这句话引用自《blahblah》

无序列表

新起一行,在列表项前加*或者-,再加一个或多个空格,来构成无序列表项。

例子:

- 茄子
- 白菜
- 萝卜

效果:

  • 茄子
  • 白菜
  • 萝卜
有序列表

新起一行,在列表项前加数字和.,再加一个或多个空格,来构成有序列表项。
也可以用)来替代.。但无论是无序列表还是有序列表,一个列表项前的标识符只能为同一种。

例子:

1. 茄子
2. 白菜
3. 萝卜

效果:

  1. 茄子
  2. 白菜
  3. 萝卜

列表项前的数字无需有顺序,第一个数字将作为第一个序号被显示出来。无论如何书写剩下的数字标记,Markdown都会对序号自动进行顺序排列。

例子:

4. 茄子
2. 白菜
182. 萝卜

效果:

  1. 茄子
  2. 白菜
  3. 萝卜
内联代码

内联代码和其他本文可以在同一行中共存。只需在代码文本两侧使用`标记。

例子:
接下来是代码内容\`std::cout<<"Hello World!"\`

效果:
接下来是代码内容std::cout<<"Hello World!"

代码块

代码块单独占用一至多行。只需在代码文本两侧使用```标记。代码左侧的代码块标记之后还可以紧跟着代码语言类型的说明。

例子:

```cpp
int countNum = 1;
```

效果:

int countNum = 1;

也可以在一行前加一个Tab或者四个空格,则这行的内容被视为代码(这就是一行前一般不能加四个或四个以上空格的原因,加多了就成代码块了)。

例子:
    int countNum = 1;

效果:

int countNum = 1;
标题

标题有1~6个级别,1级标题文字前加一个#号,再紧跟着一个或者多个空格。以此类推。

例子:

# 这是一个一级标题
## 这是一个二级标题
### 这是一个三级标题
#### 这是一个四级标题
##### 这是一个五级标题
###### 这是一个六级标题

效果:

这是一个一级标题

这是一个二级标题

这是一个三级标题

这是一个四级标题

这是一个五级标题
这是一个六级标题

一级标题也可以通过在标题文本行的下一行写三个或以上的=符号来实现。
二级标题也可以通过在标题文本行的下一行写三个或以上的-符号来实现。

例子:

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

效果:

这是一个一级标题

这是一个二级标题

插入链接

Markdown中插入链接有两种方式,一种是内联式(inline links),一种是参考式(reference links)。

内联式的链接书写格式为:[链接的文字描述](链接URL)

参考式的链接书写格式为:[链接的文字描述][链接标签名字]

然后在任意空行定义链接标签(link label),定义链接标签的格式为:[连接标签名字]:URL文本 "链接描述"

其中,链接描述(双引号也是链接描述的一部分)是可选的。

例子:

[github首页](https://github.com/)

[我的github主页][R]

[R]:https://github.com/TiriSane "这个链接是我的github主页"

效果:
github首页
我的github主页

当然,在URL文本两侧使用<>标记,也可以让URL文本可以作为本身URL的链接。

例子:<https://www.zhihu.com>

效果:https://www.zhihu.com

插入图片

插入图片和格式和插入链接类似,只是前面多加了一个!

例子:

[我的一个头像](https://ws1.sinaimg.cn/large/005K80gply1foqkrf6lv2j30c40d4tag.jpg)
[我的另一个头像][T]
[T]:https://ws1.sinaimg.cn/large/005K80gply1foqkturaj6j30sg0sgkjl.jpg "这张图片是我的另一个头像"

效果:

我的一个头像
我的另一个头像

如你所见,这种插入图片的方法是无法指定大小的,所以使用它可能导致你的排版很糟糕。


Have A Break

以上几乎就是Markdown基本语法的所有内容了。尽管关于Markdown,不同网站都有一套自己的规矩,但上述语法在各种地方都可以使用。你甚至可以直接在Markdown文本里插入Html片段来精细地控制文本格式,既然Markdown转换器的原理是把Markdown翻译成Html代码,再展示出来,那么直接再Markdown里使用Html片段自然也是可以的,Markdown做到了这种兼容。

但是你有时仍会对Markdown的使用有所疑惑,比如:空行里的---是一个二级标题标记还是一个分隔线标记;如果列表项中出现*号和空格的组合,它们代表的是一个新的子列表项,还是列表项的一部分。不过这些问题你总能在不断尝试中得到你想要的样式作为答案。Markdown的语法标记很少,只知其然,不知其所以然也是够用的。

所以接下来的部分,是给一些想更深入了解Markdown并且不反对标准化的使用者准备的哦~
稍作休息,我们在下篇文章再见。

原文链接:,转发请注明来源!

发表评论

要发表评论,您必须先登录