第 6 章 代码(行内与代码块、语法高亮)
本章覆盖:
| 语法 | 形式 | 说明 |
|---|---|---|
| 行内代码 | `code` |
单反引号 |
| 含反引号的行内代码 | `` ` `` |
双反引号包裹 |
| 缩进式代码块 | 行首 4 空格 | CommonMark |
| 围栏代码块 | ``` 或 ~~~ |
CommonMark |
| 带语言代码块 | ```python |
GFM / CommonMark |
| 代码高亮 | Chroma / Prism 等 | 站点渲染时上色 |
| 转义反引号 | ` 在代码块外用反斜杠 |
CommonMark |
6.1 行内代码
源码:
函数 `print()` 输出到标准输出。渲染效果:句中 print() 渲染为等宽字体。
6.2 含反引号的行内代码
用两个反引号包裹含单反引号的内容:
源码:
在终端输入 `` `echo $0` `` 查看当前 shell。渲染效果:句中 echo $0 含反引号字符渲染为代码。
6.3 围栏代码块
源码(三反引号):
```
plain text
no syntax
```源码(波浪号等价):
~~~
plain text
no syntax
~~~渲染效果:代码块保留缩进与换行,无语法高亮。
6.4 带语言代码块
源码:
```python
def greet(name):
return f"Hello, {name}!"
print(greet("Markdown"))
```渲染效果:代码块按 Python 语法高亮上色。
常用语言标识:python go javascript bash json yaml html css sql rust java c cpp csharp markdown。
6.5 缩进式代码块
行首 4 个空格(或 1 个 Tab)即视为代码块:
源码:
def hello():
print("hi")渲染效果:等价于无语言标识的代码块。
此写法易与列表嵌套混淆,推荐使用围栏代码块。
6.6 代码块中的代码块(嵌套反引号)
要展示包含三反引号的代码,外层用四反引号或波浪号:
源码:
````markdown
```python
print("nested")
```
````渲染效果:外层代码块完整展示内层三反引号代码块。
6.7 代码块内的转义
代码块内无需转义任何字符:
源码:
```
*not italic*
**not bold**
<a href="x">link</a>
```渲染效果:代码块内字符按字面显示,不渲染强调、不渲染 HTML。
6.8 行内代码中的转义
行内代码内亦无需转义反斜杠:
源码:
函数 `` `\n` `` 与 `` `\t` `` 是字面字符。渲染效果:行内代码内反斜杠按字面显示。
6.9 语法高亮(Hugo / 主题层)
Hugo 使用 Chroma 高亮器,主题在 hugo.toml 中配置:
[markup.highlight]
style = "base16-snazzy"
lineNos = false源码示例:
```go
package main
import "fmt"
func main() {
fmt.Println("Hello, Markdown!")
}
```渲染效果:Go 代码块按 base16-snazzy 主题上色。
6.10 行号显示
部分实现支持 linenos 选项:
```python {linenos=true}
print("with line numbers")
```渲染效果:代码块每行前显示行号。
6.11 高亮指定行
GFM / Hugo 等支持行高亮:
```python {linenos=true, hl_lines=[2,4]}
def add(a, b):
return a + b # 高亮此行
print(add(1, 2)) # 高亮此行
print("done")
```渲染效果:第 2、4 行带高亮背景色。
6.12 综合实例
源码:
## 代码示例
调用 `print()` 函数:
```python
def greet(name):
return f"Hello, {name}!"
print(greet("Markdown"))
```
含反引号行内:`` `cat` `` 命令。
四反引号嵌套:
````markdown
```python
print("nested")
```
````渲染效果:标题、一段含行内代码的正文、Python 高亮代码块、含反引号行内代码、四反引号嵌套块。
6.13 小结
- 行内代码用单反引号;含反引号用双反引号
- 代码块用 ``` 或 ~~~ 围栏
- 围栏后写语言名启用语法高亮
- 嵌套代码块用更多反引号或波浪号
- 代码块内字符无需转义