洛谷 Markdown 格式手册
Markdown 的目标是实现「易读易写」,成为一种适用于网络的书写语言。因此洛谷使用 Markdown 发布内容。
洛谷的 Markdown 解析器在基础语法上遵循 CommonMark 行内解析规则,并支持 GFM 与下文说明的洛谷扩展语法。为保证安全性,原始 HTML 标签不会被解析,请使用 Markdown 或本手册提供的扩展语法实现排版。
请仔细阅读下列文档,如果没有按照要求正确使用格式,将可能无法发出讨论,或者被删除。
- 本页面显示效果非洛谷主站实际效果,仅作为参考。部分语法的实际效果使用截图展示。
- 部分标注了新特性的功能在老页面不支持展示,可使用编辑器的预览模式确定是否可用。
段落和换行
一个 Markdown 段落是由一个或多个连续的文本行组成,它的前后要有一个以上的空行。普通的 Markdown 段落不可以用空格或制表符来缩进。
空行:一行之内只包含回车换行、空格、制表符。
例如:
这是第一段话
这是第二段话
显示的效果如下:
这是第一段话
这是第二段话
如果两段之间不空一行,则无法正确分段。反面例子:
这是第一段话
这是第二段话
显示的效果如下:
这是第一段话 这是第二段话
段落内部换行
在行末输入两个空格或一个反斜线(\),可以达到比分段更加紧凑的换行效果。
例如:
这是第一行
这是第二行
这是第三行\
这是第四行
(请注意“这是第一行”后的两个空格,可以用鼠标拖动选中它们。)
显示的效果如下:
这是第一行
这是第二行
这是第三行
这是第四行
标题
Markdown 的标题是在行首插入 1 到 6 个 #,# 和标题文字之间使用一个或多个空格,对应到标题 到 级。
例如:
# 这是 H1
## 这是 H2
### 这是 H3
这是正文
显示的效果如下:

不要全文使用标题,或者用标题强调特别多的文字。这会让读者觉得困扰。
强调
Markdown 使用星号(*)和底线(_)标记需要强调的文字:一对标记表示斜体,两个连续的标记表示粗体;两个波浪号(~~)可表示删除线。标记需要紧贴被修饰的内容,不能在标记与内容之间插入空白。
基本写法:
*单星号斜体*
_单下划线斜体_
**双星号加粗**
__双下划线加粗__
~~删除线~~
这是一段包含**加粗内容**的普通文本。
显示的效果如下:
单星号斜体
单下划线斜体
双星号加粗
双下划线加粗
删除线
这是一段包含加粗内容的普通文本。
星号和底线并非总会按最近的一对自动配对。由 *、_ 形成的斜体和粗体标记,都必须位于可识别的边界;例如结束标记前是标点、后面又紧接文字时,可能无法被识别为强调结束标记。
*某项状态(并非最终状态)*的说明
**某项状态(并非最终状态)**的说明
上例中的星号会按普通文本显示。可将结束标记移至合适的位置:
*某项状态(并非最终状态)的*说明
**某项状态(并非最终状态)的**说明
如果 * 或 _ 的两边都有空白,它们会被当作普通符号。若需要在文字前后直接显示星号或底线,可以用反斜线(\)转义(参见下面的“反斜杠”部分)。
转义示例:
\*使用反斜线开头的\*被当做是普通的字符\*
显示的效果如下:
*使用反斜线开头的*被当做是普通的字符*
代码块
如果要发送代码,但没有按照下面的方式进行格式化,将不能发送成功。
大段代码
Markdown 建立代码块的方法:在代码的首行和末行分别使用三个或更多的反引号(```)或波浪号(~~~),并独立成行。首行标记后可加语言名称,例如 cpp、c++、java、c、pascal 等;未指定语言时,代码会按 C++ 显示。
例如:
```
// 未指定语言,fallback 到 C++
#include<bits/stdc++.h>
using namespace std;
int main(){
int a, b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}
```
显示的效果如下:

显示行号【新特性】
如果要显示代码行号,在代码块的第一行加上 line-numbers 参数即可。
如下代码:
```cpp line-numbers
显示的效果如下:

指定范围高亮【新特性】
在代码块中首行使用 lines=<start>-<end> 参数来指定高亮范围。
如下代码:
```cpp lines=6-9
显示的效果如下:

行号显示与指定范围高亮的结合使用示例
如下代码:
```cpp line-numbers lines=5-6

这样代码块就会显示行号,并且第 5~6 行会被高亮显示。
小段代码
需要引用代码时,如果引用的语句只有一段,不分行,可以用 ` 将语句包起来。
例如:
前面的内容 `printf("Hello World!\n");` 后面的内容。