--- title: 基础 icon: fluent:markdown-20-filled createTime: 2024/03/05 11:10:39 permalink: /guide/markdown/basic/ tags: - 指南 - markdown --- ::: note 此文档 Fork 自 [vuepress-theme-hope](https://theme-hope.vuejs.press/zh/cookbook/markdown/), 遵循 [MIT](https://github.com/vuepress-theme-hope/vuepress-theme-hope/blob/main/LICENSE) 许可证。 ::: Markdown 是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。 Markdown 的目标是实现「易读易写」。 ## 概述 不过最需要强调的便是它的可读性。一份使用 Markdown 格式撰写的文件应该可以直接以纯文字发佈, 并且看起来不会像是由许多标签或是格式指令所构成。Markdown 语法受到一些既有 text-to-HTML 格式的影响, 包括 [Setext][1]、[atx][2]、[Textile][3]、[reStructuredText][4]、[Grutatext][5] 和 [EtText][6], 然而最大灵感来源其实是纯文字的电子邮件格式。 因此 Markdown 的语法全由标点符号所组成,并经过严谨慎选,是为了让它们看起来就像所要表达的意思。 像是在文字两旁加上星号,看起来就像\*强调\*。Markdown 的列表看起来,嗯,就是列表。 假如你有使用过电子邮件,引言写法看起来就真的像是引用一段文字。 Markdown 具有一系列衍生版本,用于扩展 Markdown 的功能 (如表格、脚注、内嵌 HTML 等等) , 这些功能原初的 Markdown 尚不具备,它们能让 Markdown 转换成更多的格式,例如 LaTeX,Docbook。 Markdown 增强版中比较有名的有 Markdown Extra、MultiMarkdown、 Maruku 等。这些衍生版本要么基于工具, 如 Pandoc;要么基于网站,如 GitHub 和 Wikipedia,在语法上基本兼容,但在一些语法和渲染效果上有改动。 ## 用途 Markdown 的语法有个主要的目的: 用来作为一种网络内容的*写作*用语言。Markdown 的重点在于,它能让文件更容易阅读、编写。因此,Markdown 的格式语法只涵盖纯文字可以涵盖的范围。 Markdown 的语法简洁明了、学习容易,而且功能比纯文本更强,因此有很多人用它写博客。世界上最流行的博客平台 WordPress 能很好的支持 Markdown。 用于编写说明文档,并且以 `README.md` 的文件名保存在软件的目录下面。 除此之外,我们还可以快速将 Markdown 转化为演讲 PPT、Word 产品文档、LaTex 论文甚至是用非常少量的代码完成最小可用原型。在数据科学领域,Markdown 已经广泛使用,极大地推进了动态可重复性研究的历史进程。 ### 行内 HTML 不在 Markdown 涵盖范围之外的标签,都可以直接在文件里面用 HTML 撰写。不需要额外标注这是 HTML 或是 Markdown;只要直接加标签就可以了。 只有块元素 ── 比如 `
| Foo |
` 标签包起来,举例来说: ```md - Bird - Magic ``` 会被转换为: ```html
Bird
Magic
` 和 `` 标签来把代码块包起来。
要在 Markdown 中建立代码块很简单,只要简单地缩进 4 个空白或是 1 个 tab 就可以,例如,下面的输入:
```md
This is a normal paragraph:
This is a code block.
```
Markdown 会转换成:
```html
This is a normal paragraph:
This is a code block.
```
这里的缩进 (4 个空白或是 1 个 tab) ,都会被移除,例如:
```md
Here is an example of AppleScript:
tell application "Foo"
beep
end tell
```
会被转换为:
```html
Here is an example of AppleScript:
tell application "Foo"
beep
end tell
```
一个代码块会一直持续到没有缩进的那一行 (或是文件结尾) 。
在代码块里面, `&` 、 `<` 和 `>` 会自动转成 HTML 实体,这样的方式让你非常容易使用 Markdown 插入范例用的 HTML 原始码,只需要复制粘贴,再加上缩进就可以了,剩下的 Markdown 都会帮你处理,例如:
````md
```html
```
````
会被转换为:
```html
<div class="footer">
© 2004 Foo Corporation
</div>
```
代码块中,一般的 Markdown 语法不会被转换,像是星号便只是星号,这表示你可以很容易地以 Markdown 语法撰写 Markdown 语法相关的文件。
如果你想要在代码块里输入用 Markdown 表示的代码库,你可以进行嵌套。
`````md
````md
```js
const a = 1
```
````
`````
会渲染为
````md
```js
const a = 1
```
````
### 分隔线
你可以在一行中用三个或以上的星号、减号、底线来建立一个分隔线,行内不能有其他东西。你也可以在星号中间插入空白。下面每种写法都可以建立分隔线:
```html
---(建议) * * * *** ***** - - - ---------------------------------------
```
## 行内元素
### 链接
Markdown 支持两种形式的链接语法: *行内*和*参考*两种形式。
不管是哪一种,链接的文字都是用 `[方括号]` 来标记。
要建立一个行内形式的链接,只要在方块括号后面马上接着括号并插入网址链接即可,如果你还想要加上链接的 title 文字,只要在网址后面,用双引号把 title 文字包起来即可,例如:
```html
This is [an example](http://example.com/ "Title") inline link. [This
link](http://example.net/) has no title attribute.
```
会产生:
```html
This is an example inline
link.
This link has no title attribute.
```
如果你是要链接到同样主机的资源,你可以使用相对路径:
```md
See my [About](/about/) page for details.
```
参考形式的链接使用另外一个方括号接在链接文字的括号后面,而在第二个方括号里面要填入用以辨识链接的标签:
```md
This is [an example][id] reference-style link.
```
接着,在文件的任意处,你可以把这个标签的链接内容定义出来:
```md
[id]: http://example.com/ "Optional Title Here"
```
链接定义的形式为:
- 方括号,输入链接的标识 ID
- 冒号
- 一个以上的空白或 tab
- 链接的网址
- 选择性地添加 title 内容,可以用单引号、双引号或是括号包括
下面这三种链接的定义相同:
```md
[foo]: http://example.com/ "Optional Title Here"
[foo]: http://example.com/ "Optional Title Here"
[foo]: http://example.com/ "Optional Title Here"
```
**请注意:** 有一个已知的问题是 Markdown.pl 1.0.1 会忽略单引号包起来的链接 title。
链接网址也可以用方括号包起来:
```md
[id]: http://example.com/ "Optional Title Here"
```
你也可以把 title 属性放到下一行,也可以加一些缩进,网址太长的话,这样会比较好看:
```md
[id]: http://example.com/longish/path/to/resource/here "Optional Title Here"
```
网址定义只有在产生链接的时候用到,并不会直接出现在文件之中。
链接辨识标签可以有字母、数字、空白和标点符号,但是并**不**区分大小写,因此下面两个链接是一样的:
```md
[link text][a]
[link text][a]
```
*预设的链接标签*功能让你可以省略指定链接标签,这种情形下,链接标签和链接文字会视为相同,要用预设链接标签只要在链接文字后面加上一个空的方括号,如果你要让 "Google" 链接到 google.com,你可以简化成:
```md
[Google][]
```
然后定义链接内容:
```md
[google]: http://google.com/
```
由于链接文字可能包含空白,所以这种简化的标签内也可以包含多个文字:
```md
Visit [Daring Fireball][] for more information.
```
然后接着定义链接:
```md
[daring fireball]: http://daringfireball.net/
```
链接的定义可以放在文件中的任何一个地方,我比较偏好直接放在链接出现段落的后面,你也可以把它放在文件最后面,就像是注解一样。
下面是一个参考式链接的范例:
```md
I get 10 times more traffic from [Google][1] than from
[Yahoo][2] or [MSN][3].
[1]: http://google.com/ "Google"
[2]: http://search.yahoo.com/ "Yahoo Search"
[3]: http://search.msn.com/ "MSN Search"
```
如果改成用链接名称的方式写:
```md
I get 10 times more traffic from [Google][] than from
[Yahoo][] or [MSN][].
[google]: http://google.com/ "Google"
[yahoo]: http://search.yahoo.com/ "Yahoo Search"
[msn]: http://search.msn.com/ "MSN Search"
```
上面两种写法都会产生下面的 HTML。
```html
I get 10 times more traffic from
Google than from
Yahoo
or MSN.
```
下面是用行内形式写的同样一段内容的 Markdown 文件,提供作为比较之用:
```md
I get 10 times more traffic from [Google](http://google.com/ "Google")
than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
[MSN](http://search.msn.com/ "MSN Search").
```
参考式的链接其实重点不在于它比较好写,而是它比较好读,比较一下上面的范例,使用参考式的文章本身只有 81 个字元,但是用行内形式的链接却会增加到 176 个字元,如果是用纯 HTML 格式来写,会有 234 个字元,在 HTML 格式中,标签比文字还要多。
使用 Markdown 的参考式链接,可以让文件更像是浏览器最后产生的结果,让你可以把一些标记相关的资讯移到段落文字之外,你就可以增加链接而不让文章的阅读感觉被打断。
### 强调
Markdown 使用星号 (`*`) 和底线 (`_`) 作为标记强调字词的符号,被 `*` 或 `_` 包围的字词会被转成用 `` 标签包围,用两个 `*` 或 `_` 包起来的话,则会被转成 ``,例如:
```md
**double asterisks** (建议)
**double underscores** (建议)
_single asterisks_
_single underscores_
```
会转成:
```html
single asterisks
single underscores
double asterisks
double underscores
```
你可以随便用你喜欢的样式,唯一的限制是,你用什么符号开启标签,就要用什么符号结束。
强调也可以直接插在文字中间:
```md
un*frigging*believable
```
但是如果你的 `*` 和 `_` 两边都有空白的话,它们就只会被当成普通的符号。
如果要在文字前后直接插入普通的星号或底线,你可以用反斜线:
```md
\*this text is surrounded by literal asterisks\*
```
### 代码
如果要标记一小段行内代码,你可以用反引号把它包起来 (`` ` ``) ,例如:
```md
Use the `printf()` function.
```
会产生:
```md
Use the printf() function.
```
如果要在代码内插入反引号,你可以用多个反引号来开启和结束行内代码:
```md
``There is a literal backtick (`) here.``
```
这段语法会产生:
```html
There is a literal backtick (`) here.
```
代码码区段的起始和结束端都可以放入一个空白,起始端后面一个,结束端前面一个,这样你就可以在区段的一开始就插入反引号:
```md
A single backtick in a code span: `` ` ``
A backtick-delimited string in a code span: `` `foo` ``
```
会产生:
```html
A single backtick in a code span: `
A backtick-delimited string in a code span: `foo`
```
在代码码区段内,`&` 和方括号都会被转成 HTML 实体,这样会比较容易插入 HTML 原始码,Markdown 会把下面这段:
```md
Please don't use any `