写在前面
invites.fun/发邀快乐
是由Flarum
驱动的中文社区,发帖时支持Markdown和BBcode语法,本文介绍在本站点使用Markdown语法发帖,并对文章进行排版的操作。
Markdown语法
概述
Markdown 的目标是实现易读易写
。
可读性,无论如何,都是最重要的。一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令所构成。Markdown 语法受到一些既有 text-to-HTML 格式的影响,包括 Setext、atx、Textile、reStructuredText、Grutatext 和 EtText,而最大灵感来源其实是纯文本电子邮件的格式。
总之, Markdown 的语法全由一些符号所组成,这些符号经过精挑细选,其作用一目了然。比如:在文字两旁加上星号,看起来就像强调。Markdown 的列表看起来,嗯,就是列表。Markdown 的区块引用看起来就真的像是引用一段文字,就像你曾在电子邮件中见过的那样。
Markdown 本应兼容Html语法标签,但似乎在本站并不会将Html标签进行处理。
段落与换行
一个 Markdown 段落是由一个或多个连续的文本行组成,它的前后要有一个以上的空行(空行的定义是显示上看起来像是空的,便会被视为空行。比方说,若某一行只包含空格和制表符,则该行也会被视为空行)。普通段落不该用空格或制表符来缩进。
如下图展示,前面两段文字在编辑时没有留空行,因此发布后也会紧密连在一起,在大段落文章中,给读者的阅读将来带不变。后面两段文字在编辑时留有空行分隔。
文内标题
使用标题
语法,用来对文章章节段落进行划分,同时支持目录显示和快速跳转。
如本文的目录结构。
一般情况下不常用一级标题和二级标题,主要原因是字号太大了。
Markdown 支持两种标题的语法,类 Setext 和类 atx 形式。
- 类 Setext 形式是用底线的形式,利用 = (一级标题)和 - (二级标题)。
一级标题
=============
二级标题
-------------
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
注意=
和 -
与标题之间不能有空行,=
和 -
的数量可以是任意个
- 类 Atx 形式则是在行首插入 1 到 6 个 # ,对应到标题 1 到 6级。
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
注意行首的#
后需要空1格
你可以选择性地闭合
类 atx 样式的标题,这纯粹只是美(๐•ᴗ•๐)用的,若是觉得这样看起来比较舒适,你就可以在行尾加上 #,而行尾的 # 数量也不用和开头一样(行首的井字符数量决定标题的级数)。
# 一级标题 #
## 二级标题 ##
### 三级标题 ##
#### 四级标题 ###
##### 五级标题 #########
###### 六级标题 ####
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
加粗显示
用来突出重点,在编辑时支持快捷键设置加粗显示(Ctrl
+B
)。
如标题教程中的展示,加粗的文本看起来和五级标题字号、字重一样,但实际上不具有生成目录跳转链接的作用,不建议使用加粗文本作为文章目录。
**加粗的文本**
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
斜体显示(奇怪的选项)
顾名思义,在编辑时支持快捷键设置(Ctrl
+I
)。
_斜体的文本_
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
删除线
多用于卖萌。
~~划线的文字~~
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
区块引用
有时候也用作突出提醒,毕竟很醒目。
> 名人名言
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
Markdown 也允许你偷懒只在整个段落的第一行最前面加上 > 。
名人名言第一行
名人名言第二行,与前一行不空行,因此不分段,本行也会被包含进引用当中
> 名人名言第一行
**名人名言第二行,与前一行不空行,因此不分段,本行也会被包含进引用当中**
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
区块引用可以嵌(๐•ᴗ•๐)(例如:引用内的引用),只要根据层次加上不同数量的 > 。
> 鲁迅曾说,他没有说过这样的话。
> > 某句谣言。
——鲁迅
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
引用的区块内也可以使用其他的 Markdown 语法,包括标题、列表、加粗、倾斜等。
> 1. 这是第一行列表项。
> 2. 这是第二行列表项。
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
列表
Markdown 支持无序列表和有序列表。
- 列表1
- 列表2
- 列表3
无序列表使用星号、加号或是减号作为列表标记。
+ 列表1
- 列表2
* 列表3
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
有序列表则使用数字接着一个英文句点。很重要的一点是,你在后续列表标记上使用的数字并不会影响排序,只依赖于第一个列表的数字,并在此基础上递增。
1. 列表1
1. 列表2
1. 列表3
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
甚至
1. 列表1
65536. 列表2
0. 列表3
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
列表项目标记通常是放在最左边,但是其实也可以缩进,最多 3 个空格,项目标记后面则一定要接着至少一个空格或制表符。
要让列表看起来更漂亮,你可以把内容用固定的缩进整理好。
* 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 s(๐•ᴗ•๐)er ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing.
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
但是如果你懒,那也行。
* 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 s(๐•ᴗ•๐)er ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing.
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
列表项目可以包含多个段落,每个项目下的段落都必须缩进 4 个空格或是 1 个制表符。
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 s(๐•ᴗ•๐)er ipsum
sit amet velit.
2. Suspendisse id sem consectetuer libero luctus adipiscing.
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
如果你每行都有缩进,看起来会看好很多,当然,再次地,如果你很懒惰,Markdown 也允许。
* This is a list item with two paragraphs.
This is the second paragraph in the list item. You're
only required to indent the first line. Lorem ipsum dolor
sit amet, consectetuer adipiscing elit.
* Another item in the same list.
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
如果要在列表项目内放进引用,那 > 就需要缩进。
* A list item with a blockquote:
> This is a blockquote
> inside a list item.
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
如果要放代码区块的话,该区块就需要缩进两次,也就是 8 个空格或是 2 个制表符。
* 一列表项包含一个列表区块:
`代码写在这`
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
当然,项目列表很可能会不小心产生,像是下面这样的写法。
2023. invites.fun正式建站。
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
换句话说,也就是在行首出现数字-句点-空白,要避免这样的状况,你可以在句点前面加上反斜杠。
2023\. invites.fun正式建站。
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
黑幕
不想直接说的话,例如这样
>!这样!<
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
代码(预格式文本)
用作标记代码或者格式化的文本,避免网站对其重新排版。
在使用过程中,也被用作标记一些特有名词、操作、按钮、指令等。
例如,在文本中突然出现了一个print("Hello World !")
。
`print("Hello World !") `
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
或者突然出现一大段
import sys
sys.stdout.write('Hello World!'+'\n')
print('Hello World!')
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
其实现方法为
```
代码块
```
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
或
~~~
代码块
~~~
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
以及
正文中突然出现的`代码`
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
另外,在编辑时,段落前空4格(一个制表符),也会将该段落视为代码。
分割线
你可以在一行中用三个以上的星号、减号、底线来建立一个分隔线,注意和前后文各空一行。你也可以在星号或是减号中间插入空格。下面每种写法都可以建立分隔线。
* * *
***
*****
- - -
---------------------------------------
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
表格
| 表头 | 表头 |
| ------- | ----- |
| 单元格 | 单元格 |
| 单元格 | 单元格 |
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
表头和单元格中间的-----数量是任意的。