Markdown 代码块

1. 前言

关于代码块,Markdown 作者给出的定义如下:

预格式化代码块主要用于在 Markdown 文档中显示源代码风格的内容。相比普通的文本段落,代码块可以保留文字内容的多行换行、缩进等格式。

在 Markdown 文档中生成代码块,需要在每行的开头输入不少于 4 个空格符号或者 1 个 tab 符号。

原文出处daringfireball.net

Markdown 作为一种排版工具语言,其作用是为了帮助我们处理一些常见的排版问题。但是我们仍有一些场景需要保留文字的原格式,例如不同的缩进、中间空格数量等。Markdown 通过代码块的方式处理需要保存格式的多行文字内容。

环境说明
考虑到 Markdown 工具之间的不兼容,有的内容直接从页面复制粘贴到本地不会正常显示,大家学习时自己动手写是肯定没问题的。本节所有实例代码及演示效果均使用 Typora 工具完成。

2. 语法详解

2.1 代码块

在 Markdown 文件中,在行首添加 4 个连续的空格,可将行内容定义为代码块。

实例 1

#### 使用空格定义代码块

    pubic static void main(String[] args) {
      System.out.println("Hello world");
    }

其渲染结果如下:

图片描述

注意:Typora 编辑器在默认模式(实时渲染模式)下无法通过此方法生成代码块,需要先切换到源代码模式(「显示」->「源代码模式」)后添加空格。

该源码渲染输出 html 的内容如下:

<pre>
<div><span><span>pubic static void main(String[] args) {</span></span></div>
<div><span><span>  </span><span>System.out.println("Hello world");</span></span></div>
<div><span><span>}</span></span></div>
</pre>

代码块的另一种定义方式是以三个连续的 「反引号 “`”」 作为开始行和结束行。

实例 2

#### 使用反引号定义代码块

​```
pubic static void main(String[] args) {
  System.out.println("Hello world");
}
​```

其渲染结果如下:

图片描述

在这种方式下,我们还可以声明代码的高亮样式,方法是在首行的连续的三个 「反引号 “`”」 后面加入源代码语言的标记,比如:javascript、Markdown、json、java、c++、sql 等,具体支持的种类和使用的 Markdown 编辑器或渲染程序配置有关。

实例 3

#### 使用反引号定义代码块,并定义高亮

​```java
pubic static void main(String[] args) {
  System.out.println("Hello world");
}
​```

其渲染结果如下:

图片描述

3. 使用场景及应用实例

行内代码功能可以让我们很轻松的在文章文字内容中间增加诸如 <html> 标签的内容,而不需要手动转义。当我们编写程序说明文档时,或者其他需要在文档中插入特殊字符时,这个功能的作用会非常明显。

实例 4

画一张字符画。

#### 一张字符画

​```
.__           .__  .__                               .__       .___
|  |__   ____ |  | |  |   ____   __  _  _____________|  |    __| _/
|  |  _/ __ |  | |  |  /  _    / / /  _ _  __   |   / __ |
|   Y    ___/|  |_|  |_(  <_> )       (  <_> )  | /  |__/ /_/ |
|___|  /___  >____/____/____/    /_/ ____/|__|  |____/____ |
     /     /                                                  /
​```

渲染结果如下:

图片描述

4. 小结

  1. 当使用 4 个空格声明代码块时,转换后的代码文本会自动删除掉缩进的距离,也就是会从行首自动删掉 4 个空格,以保持格式;
  2. 当使用 4 个空格声明代码块时,代码块的结束声明在后面首个缩进不足 4 个空格的行;
  3. 常规的 Markdown 语义,比如「星号 *」在代码块中的转义作用失效。

「代码块」和「行内代码」都是方便于显示特殊字符,相比「行内代码」,「代码块」更有利于显示段落文本,表现出原文本的换行及缩进效果。