Markdown 能渲染成什么样
公式、代码高亮、流程图、提示框、表格、脚注、任务清单,全在这篇里跑一遍。
这篇是渲染能力的自检页。往后如果改了样式或加了插件,回来翻一遍就能看出哪里坏了。
正文与内联格式
普通段落、加粗、斜体、删除线、行内代码、站内链接,以及键盘按键 Ctrl + K。
需要强调的地方可以用标记:==这段是高亮==,虽然 GFM 里它不是标准语法,但样式已经接上了。
标题层级与目录
右侧目录是从正文里抓 h2 到 h4 生成的,所以你往上翻会看到「本页目录」这张卡。没有标题的短文章,这张卡会自己消失。
三级标题长这样
四级标题也支持
五级标题就有点小了
数学公式
行内公式用单个美元符号,比如欧拉恒等式 ,它会跟着行高走,不会把行撑开。
独占一行的公式用两个美元符号:
带编号的推导可以写成多行对齐:
为什么公式不用图片
公式在构建阶段就被渲染成 HTML 加内联字体,不依赖浏览器执行脚本。好处是复制出来还是真正的文本,搜索也能搜到。
代码块
最普通的一个:
def zscore(series, window=20):
"""滚动标准化:把量纲不同的信号拉到同一尺度。"""
mean = series.rolling(window).mean()
std = series.rolling(window).std()
return (series - mean) / std
带文件名和行号:
export function sortByDate<T extends { data: { pubDate: Date } }>(items: T[]): T[] {
return [...items].sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf());
}
只高亮某几行,用花括号指定行号:
const posts = await getCollection('blog');
const published = posts.filter((post) => !post.data.draft);
for (const post of published) {
const year = post.data.pubDate.getFullYear();
// 这三行是高亮的
console.log(post.data.title);
console.log(year);
}
提示框
用引用块加方括号标记,支持九种语义:
一般提示
不带情绪的中性补充。
技巧
这种框用来放「怎么做更好」。
注意
会造成后果,但还能救。
危险
会删数据、会赔钱的那种。
已知缺陷
记下当前版本的毛病,免得下次再查一遍。
示例
放一段可以直接抄的例子。
引用
别人的话放这里,和正文区分开。
折叠式提示框,点标题才展开:
点开看细节
里面藏了一堆不重要的推导过程。
可以有很多行。
表格
| 格式 | 写法 | 渲染结果 |
|---|---|---|
| 公式 | $x^2$ | 内联数学符号 |
| 代码 | 三个反引号 | 带配色的代码块 |
| 流程图 | ```mermaid | 浏览器里画的图 |
| 提示框 | > [!tip] | 带颜色的框 |
| 双链 | [[词条名]] | 指向维基的链接 |
宽表格在手机上会被包进一个可以横向拖动的容器,不会把整页撑破。
流程图
```mermaid
flowchart LR
A[原始数据] --> B{缺失值?}
B -- 有 --> C[插值补齐]
B -- 没有 --> D[标准化]
C --> D
D --> E[计算因子]
E --> F[回测]
```
实际渲染出来是这样:
顺序图也可以:
任务清单
- 搭好内容集合与 schema 校验
- 接上公式、代码高亮、提示框
- 接上流程图与静态检索
- 补一批真正想写的内容
- 部署到自己的域名
脚注
双链
维基词条之间用双方括号互相指:Astro、内容集合、Shiki。指向还不存在的词条时,链接会变成虚线,鼠标悬上去会告诉你是哪个词条缺失:这个词条还没写。
引用块与分割线
普通引用长这样,用来放别人的原话。
上面那行是分割线。
列表
无序列表:
- 第一层
- 第二层
- 第三层
- 第二层
有序列表:
- 先做能跑通的最小版本
- 再补样式和边界
- 最后写文档
定义式的对照列表(用列表加粗实现):
- 内容集合
- 给 Markdown 加类型检查的机制,字段写错会在构建时报错。
- 构建
- 把 Markdown 一次性变成静态 HTML 的动作,产物可以直接托管。
到这里渲染能力就齐了。缺什么再加。