Markdown 渲染测试
一份渲染测试文档,后续将删除
标题层级展示
以下展示从 H2 到 H4 各级标题在正文中的视觉层次。
这是三级标题 H3
三级标题用于二级标题下的子章节划分,字号小于 H2,颜色带有主题色调。
这是四级标题 H4
四级标题用于更细的小节。正文段落紧跟其后,应可清晰区分标题与正文。
这是一段普通正文。正文行距应当宽松舒适,适合长文阅读。段落之间应有明显的间距,不会让读者感到文字堆叠在一起。
文本样式
这段文字包含 粗体、斜体、粗斜体、删除线,以及行内代码 const x = 42;。
这里有一个 超链接示例,鼠标悬停应有视觉反馈。
这是一段引用。引用块应当有明显的左侧边框和背景色,与正文区分开来。
引用可以包含多段文字,内部也可以有 粗体 和 斜体。
以下是一段嵌套引用:
外层引用
内层引用——应当有更深的缩进。
列表
无序列表
- 第一项
- 第二项,包含
行内代码 - 第三项,包含 粗体文本
- 嵌套子项 A
- 嵌套子项 B
- 更深层嵌套
有序列表
- 安装依赖
- 配置环境变量
- 运行开发服务器
- 执行
hugo server -D - 打开浏览器访问
localhost:1313
- 执行
- 开始写作
任务列表
- 创建 Hugo 站点
- 安装主题
- 自定义配色
- 撰写第一篇文章
代码
行内代码
在终端中运行 hugo server --buildDrafts 以启动本地预览。变量 $theme 的默认值为 "modern-archivist"。
代码块(Go)
package main
import "fmt"
func fibonacci(n int) []int {
seq := make([]int, n)
seq[0], seq[1] = 0, 1
for i := 2; i < n; i++ {
seq[i] = seq[i-1] + seq[i-2]
}
return seq
}
func main() {
result := fibonacci(10)
fmt.Println("Fibonacci:", result)
}
代码块(Python)
import numpy as np
from typing import List
def gradient_descent(
f, grad_f, x0: np.ndarray,
lr: float = 0.01,
epochs: int = 1000
) -> List[np.ndarray]:
"""简单的梯度下降实现。"""
path = [x0.copy()]
x = x0.copy()
for _ in range(epochs):
x -= lr * grad_f(x)
path.append(x.copy())
return path
代码块(JavaScript)
async function fetchPosts(page = 1) {
const res = await fetch(`/api/posts?page=${page}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const { data, total } = await res.json();
return { posts: data, hasMore: data.length * page < total };
}
代码块(Shell)
#!/bin/bash
echo "Building site..."
hugo --minify --gc
echo "Deploying to server..."
rsync -avz --delete public/ user@server:/var/www/blog/
echo "Done!"
数学公式
行内公式
质能方程 $E = mc^2$ 是物理学中最著名的公式之一。欧拉公式 $e^{i\pi} + 1 = 0$ 连接了五个基本数学常数。对于正态分布,概率密度函数为 $f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}}$。
块级公式
贝叶斯定理:
$$P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}$$梯度下降更新规则:
$$\theta_{t+1} = \theta_t - \eta \nabla_\theta \mathcal{L}(\theta_t)$$多元高斯分布的概率密度函数:
$$f(\mathbf{x}) = \frac{1}{(2\pi)^{k/2} |\Sigma|^{1/2}} \exp\left(-\frac{1}{2}(\mathbf{x}-\boldsymbol{\mu})^T \Sigma^{-1} (\mathbf{x}-\boldsymbol{\mu})\right)$$Softmax 函数:
$$\sigma(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} \quad \text{for } i = 1, \dots, K$$交叉熵损失:
$$\mathcal{L} = -\sum_{i=1}^{N} \left[ y_i \log(\hat{y}_i) + (1-y_i)\log(1-\hat{y}_i) \right]$$表格
简单表格
| 特性 | Hugo | Jekyll | Hexo |
|---|---|---|---|
| 语言 | Go | Ruby | Node.js |
| 构建速度 | 极快 | 慢 | 中等 |
| 模板引擎 | Go Template | Liquid | EJS / Pug |
| 学习曲线 | 中等 | 低 | 低 |
对齐表格
| 左对齐 | 居中对齐 | 右对齐 |
|---|---|---|
| 内容A | 内容B | 100 |
| 更长的内容 | 短 | 2,000 |
| 示例 | 数据 | 35,678 |
图片
以下是一张网络图片测试(如无法加载,说明环境无网络):
脚注
混合排版示例
下面模拟一段真实的技术博客段落,综合使用多种元素:
在训练 Transformer 模型时,注意力机制的核心公式为:
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$其中 $Q$、$K$、$V$ 分别是 Query、Key、Value 矩阵,$d_k$ 是 Key 的维度。实现代码如下:
import torch
import torch.nn.functional as F
def scaled_dot_product_attention(Q, K, V, mask=None):
d_k = Q.size(-1)
scores = torch.matmul(Q, K.transpose(-2, -1)) / d_k ** 0.5
if mask is not None:
scores = scores.masked_fill(mask == 0, float('-inf'))
weights = F.softmax(scores, dim=-1)
return torch.matmul(weights, V), weights
注意:在实际应用中,通常还会加入 Dropout 层以防止过拟合。详见 Attention Is All You Need。
训练过程中各阶段的损失值参考:
| 阶段 | Epoch | Loss | 备注 |
|---|---|---|---|
| 预热 | 1-5 | 4.21 → 2.87 | 学习率线性增长 |
| 稳定训练 | 6-50 | 2.87 → 0.43 | 余弦退火 |
| 微调 | 51-60 | 0.43 → 0.31 | 降低学习率 |