搜索博客与维基

技术/写作

Markdown 能渲染成什么样

公式、代码高亮、流程图、提示框、表格、脚注、任务清单,全在这篇里跑一遍。

这篇是渲染能力的自检页。往后如果改了样式或加了插件,回来翻一遍就能看出哪里坏了。

正文与内联格式

普通段落、加粗、斜体、删除线、行内代码、站内链接,以及键盘按键 Ctrl + K。

需要强调的地方可以用标记:==这段是高亮==,虽然 GFM 里它不是标准语法,但样式已经接上了。

标题层级与目录

右侧目录是从正文里抓 h2 到 h4 生成的,所以你往上翻会看到「本页目录」这张卡。没有标题的短文章,这张卡会自己消失。

三级标题长这样

四级标题也支持

五级标题就有点小了

数学公式

行内公式用单个美元符号,比如欧拉恒等式 eiπ+1=0e^{i\pi} + 1 = 0,它会跟着行高走,不会把行撑开。

独占一行的公式用两个美元符号:

β^=arg⁡min⁡β∑i=1n(yi−xi⊤β)2+λ∥β∥1\hat{\beta} = \arg\min_{\beta} \sum_{i=1}^{n} \left( y_i - x_i^\top \beta \right)^2 + \lambda \lVert \beta \rVert_1

带编号的推导可以写成多行对齐:

IC=corr(ft,rt+1)t=ICn−21−IC2\begin{aligned} \mathrm{IC} &= \mathrm{corr}(f_t, r_{t+1}) \\ t &= \frac{\mathrm{IC}\sqrt{n-2}}{\sqrt{1-\mathrm{IC}^2}} \end{aligned}

为什么公式不用图片

公式在构建阶段就被渲染成 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[回测]
```

实际渲染出来是这样:

flowchart LR A[原始数据] --> B{缺失值?} B -- 有 --> C[插值补齐] B -- 没有 --> D[标准化] C --> D D --> E[计算因子] E --> F[回测]

顺序图也可以:

sequenceDiagram participant U as 用户 participant S as 站点 participant P as Pagefind U->>S: 按下 Ctrl+K S->>P: 懒加载索引 P-->>S: 返回命中结果 S-->>U: 弹出结果面板

任务清单

  • 搭好内容集合与 schema 校验
  • 接上公式、代码高亮、提示框
  • 接上流程图与静态检索
  • 补一批真正想写的内容
  • 部署到自己的域名

脚注

正文里可以插脚注1,也可以在别的地方再插一个2。

双链

维基词条之间用双方括号互相指:Astro、内容集合、Shiki。指向还不存在的词条时,链接会变成虚线,鼠标悬上去会告诉你是哪个词条缺失:这个词条还没写。

引用块与分割线

普通引用长这样,用来放别人的原话。


上面那行是分割线。

列表

无序列表:

  • 第一层
    • 第二层
      • 第三层

有序列表:

  1. 先做能跑通的最小版本
  2. 再补样式和边界
  3. 最后写文档

定义式的对照列表(用列表加粗实现):

  • 内容集合
    • 给 Markdown 加类型检查的机制,字段写错会在构建时报错。
  • 构建
    • 把 Markdown 一次性变成静态 HTML 的动作,产物可以直接托管。

到这里渲染能力就齐了。缺什么再加。

Footnotes

  1. 脚注在页面底部按序排列,点小箭头能跳回来。 ↩

  2. 这一条是第二个脚注,用来验证编号是否正常。 ↩