Markdown 语法扩展
本页汇总主题通过 hexo-renderer-markdown-it 启用的 17 个 markdown-it 插件(emoji / attrs / link-attributes / abbr / footnote / ins / sub / sup / mark / task-checkbox / multimd-table / imsize / container / admon / deflist / mathjax3 / cjk-breaks,配置见根 _config.yml),外加综合示例与速查表。每个插件给出用途、语法、示例、效果,示例可直接复制到文章测试。
怎么读这页:每个语法都按「效果 → 对应源码」成对展示——先看页面真实渲染,再抄下面的 Markdown 源码。参数表与「边界与坑」全部取自
_config.yml的插件配置和node_modules里插件的实际源码,不是猜的。与「布局与页面」的行内加粗标签风格不同,本页因需容纳代码块与真实渲染示例,采用三级子标题(最小示例/常用变体/全部写法/参数与选项/边界与坑/小结)分隔。
注意:展示语法的代码块一律用 raw 标签包裹(raw与endraw成对),防止 nunjucks 预渲染时误处理或吞掉后续内容。
注意:本文含真实数学公式示例(第 16 项),因此 front-matter 已声明mathjax: true——文章正文出现$...$/$$...$$公式时都必须声明它,否则公式原样显示。
1. emoji 表情(markdown-it-emoji)
用途:在 Markdown 中直接使用 emoji 短代码,无需复制 Unicode 字符。
学习路径:最小示例 → 常用变体 → 全部写法 → 参数与选项 → 边界与坑 → 小结
1.1 最小示例
效果:
😄
对应源码:
:smile:冒号包住英文短代码即可,无需任何配置。
1.2 常用变体
效果:
😄 微笑 | ❤️ 爱心 | 🚀 火箭 | 👍 点赞 | 🎉 庆祝 | ⚠️ 警告
对应源码:
:smile: 微笑 | :heart: 爱心 | :rocket: 火箭 | :+1: 点赞 | :tada: 庆祝 | :warning: 警告短代码可以连续写多个,也可以夹在句子中间。
效果:
提交前记得 ✅ 跑测试,别 🙈 直接推。
对应源码:
提交前记得 :white_check_mark: 跑测试,别 :see_no_evil: 直接推。1.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
:smile: | 😄 | 标准短代码(emoji cheat sheet 里的名字) |
:smile::heart: | 😄❤️ | 连写多个,无需空格 |
:+1: | 👍 | 名字可含 +、-、数字 |
:not_a_real_emoji: | :not_a_real_emoji: | 未定义的短代码原样输出 |
1.4 参数与选项
_config.yml 里是裸加载(- markdown-it-emoji,没有 options),因此使用插件默认值:
| 选项 | 当前状态 | 说明 |
|---|---|---|
defs | 内置全量短代码表 | 未覆盖 → 支持官方 emoji 列表里的全部名字 |
enabled | 空 = 全部启用 | 未配置 |
shortcuts | 空 {} | 未启用 ASCII 快捷方式(如 :)) |
需要精简/自定义时,在 _config.yml 里改成对象形式:
- name: markdown-it-emoji
options:
enabled: [smile, heart]1.5 边界与坑
| 情况 | 行为 |
|---|---|
写在行内代码里(`:smile:`) | 不转换,原样显示——emoji 只处理正文文本 token |
| 写在围栏代码块里 | 同样不转换 |
短代码拼错(:smile_face:) | 原样输出,不报错 |
用 :) :D 这类 ASCII 表情 | 不渲染——shortcuts 未启用 |
短代码大小写写错(:Smile:) | 仓库里全小写,大小写不符即不匹配 |
1.6 小结
- 冒号包短代码,名字查 emoji cheat sheet
- 不启用 ASCII 表情,
:)不是 emoji - 想缩小可用范围就传
options.enabled
2. 行内属性 attrs(markdown-it-attrs)
用途:在元素后追加
{#id .class key=val}给元素加 id / class / 自定义属性,用于微调样式或锚点定位。学习路径:最小示例 → 常用变体 → 全部写法 → 参数与选项 → 边界与坑 → 小结
2.1 最小示例
给段落加内联样式——最直观能看到 attrs 在起作用:
效果:
这段文字的颜色由 {style=...} 控制,不是主题默认色。
对应源码:
这段文字的颜色由 `{style=...}` 控制,不是主题默认色。{style="color:#c2185b"}2.2 常用变体
给图片设宽高(不用 imsize 插件也能改尺寸):
效果:

对应源码:
{width=120}给链接加 id / class / 自定义属性:
效果:
对应源码:
[链接](https://example.com){.external #link1 data-x="1"}给围栏代码块加属性(属性写在 info 串末尾):
效果:
{.demo-block}console.log('这一块的 pre 元素带 class="demo-block"');
对应源码:
```js {.demo-block}
console.log('这一块的 pre 元素带 class="demo-block"');
```2.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
{#custom-id} | id="custom-id" | 锚点定位 |
{.class1 .class2} | class="class1 class2" | 多个 class 空格分隔 |
{key=val} | key="val" | 自定义属性,如 data-*、width |
{key="含 空格"} | key="含 空格" | 值含空格必须加双引号 |
段落文字{...} | 属性落在 <p> | 写在行尾 |
# 标题 {#id} | 属性落在标题元素 | 与 Hexo 的 heading 锚点各自独立 |
{width=120} | 属性落在 <img> | 值不写引号也可以 |
```js {.cls} | 属性落在 <pre> | 属性写在 info 串里 |
表格下方两空行处 {.cls} | 属性落在 <table> | 必须空两行,否则不生效 |
2.4 参数与选项
插件版本 4.5.0,_config.yml 裸加载 → 全部默认值:
| 选项 | 默认 | 说明 |
|---|---|---|
leftDelimiter | { | 左定界符 |
rightDelimiter | } | 右定界符 |
allowedAttributes | [](空 = 全部允许) | 白名单;空数组表示任意属性都放行 |
安全提示:
allowedAttributes: []意味着正文可以写onclick=、style=等任意属性。多作者站点建议收紧为[id, class, /^data-/]。
2.5 边界与坑
| 情况 | 行为 |
|---|---|
| 想给表格加属性 | 属性块必须写在表格下方空两行处,紧贴表格不生效 |
行内元素与块级元素都能匹配(如列表项末尾 {...}) | 行内优先——属性加给 <strong> 而不是 <li> |
用 _斜体_ 包住带属性的链接 | 解析冲突,{target=" 会破坏斜体解析,改用 * 强调 |
| 属性块和文字之间没有空格 | 通常仍能识别,但含引号的值易与正文粘连,建议留空格 |
| 值里有空格却没用双引号 | 只取第一段,剩余部分当正文 |
| 写在不支持的元素后(如空行单独一行) | 原样显示为文本 |
2.6 小结
{...}必须贴在元素行尾(表格是例外:下方空两行)#id/.class/key=val,值含空格加双引号- 默认放行所有属性,多作者站点要收紧白名单
3. 外链属性 link-attributes(markdown-it-link-attributes)
用途:给页面里的链接统一加
target="_blank"+rel="noopener noreferrer",新窗口打开且防反向 tabnabbing。学习路径:最小示例 → 站内链接的真实行为 → 全部写法 → 参数与选项 → 边界与坑 → 小结
3.1 最小示例
效果:
外部链接——点击会在新标签页打开。
对应源码:
[外部链接](https://example.com)3.2 站内链接也会新窗口(真实行为)
_config.yml 里写了 pattern: ^https?://,但 当前插件版本(4.0.1)根本不读取 pattern——源码里只认 matcher 函数和 attrs。配置无法用 YAML 表达函数,于是第一个配置项无条件命中所有 <a>:
效果:
站内链接 /about/ 和 锚点链接 同样会被加上 target="_blank"(右键「检查」可验证)。
对应源码:
[站内链接 /about/](/about/) 和 [锚点链接](<#1-emoji-表情(markdown-it-emoji)>)3.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
[文字](https://example.com) | <a target="_blank" rel="noopener noreferrer"> | 外链 |
[文字](/about/) | 同上 | 站内相对链接也会新窗口 |
裸 URL(linkify: true) | 自动 <a>,同样新窗口 | 例如 https://hexo.io |
[文字](#anchor) | 同上 | 页内锚点也新窗口 |
3.4 参数与选项
| 选项 | 当前值 | 是否生效 | 说明 |
|---|---|---|---|
attrs.target | _blank | ✅ | 写死的 target |
attrs.rel | noopener noreferrer | ✅ | 防反向 tabnabbing |
pattern | ^https?:// | ❌ 不生效 | 4.0.1 源码无 pattern 分支,只认 matcher 函数 |
想真正只处理外链,只能换成能在 _config.yml 里表达的形式(当前不支持),或在主题层用前端脚本/渲染后处理挑出 http(s) 链接——YAML 里改 pattern 不会有任何效果。
3.5 边界与坑
| 情况 | 行为 |
|---|---|
改 pattern 为 ^https:// | 无变化——参数被忽略,仍然全量加属性 |
站内链接被加 rel="noopener noreferrer" | 无功能危害,但语义冗余 |
| 同名属性已存在 | applyAttributes 直接覆盖 |
想给单个链接自定义 target | 用 attrs 写成 [x](url){target=_self};执行顺序上 attrs 先加,link-attributes 后覆盖 → 仍变 _blank |
| 图片外链 | <img> 不是 <a>,不受影响 |
3.6 小结
- 效果是「全站所有
<a>都新窗口」,不是「只外链」 pattern是装饰性配置,改它没用(4.0.1 无此分支)- 单链接想改回本窗口,靠配置做不到
4. 缩写 abbr(markdown-it-abbr)
用途:定义缩写词,悬停时显示全称(生成
<abbr>标签)。学习路径:最小示例 → 常用变体 → 全部写法 → 参数与选项 → 边界与坑 → 小结
4.1 最小示例
定义行 *[缩写]: 全称 独占一行,正文里出现该词即自动包 <abbr>:
效果:
W3C 制定 Web 标准。
对应源码:
*[W3C]: World Wide Web Consortium
W3C 制定 Web 标准。4.2 常用变体
多个缩写(一行一个定义):
效果:
HTML 负责结构,CSS 负责样式。
对应源码:
*[HTML]: Hyper Text Markup Language
*[CSS]: Cascading Style Sheets
HTML 负责结构,CSS 负责样式。定义写在文末也生效(实测:插件在整篇 block 解析完、inline 解析后才做替换,与使用位置无关):
效果:
先出现 API 这个词,定义在下面。
对应源码:
先出现 API 这个词,定义在下面。
*[API]: Application Programming Interface4.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
*[ABBR]: 全称 | 定义行不显示,仅登记 | 必须独占一行 |
正文出现 ABBR | <abbr title="全称">ABBR</abbr> | 悬停显示全称 |
多行 *[A]: ... | 多个缩写同时生效 | 一行一个 |
| 同一缩写重复定义 | 取第一次的定义 | 后者被忽略 |
4.4 参数与选项
裸加载,无可配选项。定义区由插件在 state.env.abbreviations 里维护,正文替换是整篇统一做的。
4.5 边界与坑
| 情况 | 行为 |
|---|---|
全称为空(*[X]:) | 定义无效,正文原样 |
| 缩写或全称为空 | 该定义被丢弃 |
大小写不一致(定义 API,正文写 api) | 不匹配,不替换 |
| 写在行内代码 / 代码块里 | 不替换(只处理文本 token) |
| 定义行前后夹在段落中间 | 会打断段落——定义行需独立成行 |
| 以为「定义必须在首次使用前」 | 不需要,位置任意(旧文档说法有误,已按源码修正) |
4.6 小结
- 定义行
*[缩写]: 全称独占一行 - 位置任意,全篇生效
- 大小写敏感,代码内不替换
5. 脚注 footnote(markdown-it-footnote)
用途:在文末集中展示注释/出处,正文以上标数字引用。
学习路径:最小示例 → 常用变体 → 全部写法 → 参数与选项 → 边界与坑 → 小结
5.1 最小示例
效果:
Hexo 是一个快速静态博客框架[1]。
对应源码:
Hexo 是一个快速静态博客框架[^hexo]。
[^hexo]: Hexo 官网:https://hexo.io5.2 常用变体
命名 id(比数字更好维护,不会因为增删顺序错位):
效果:
对应源码:
主题用 matery[^matery],评论用 Waline[^waline]。
[^matery]: 基于 blinkfox/hexo-theme-matery 深度魔改。
[^waline]: 部署在 waline.17lai.site。多行脚注(续行缩进 4 个空格):
效果:
多行脚注可以写两段内容[4]。
对应源码:
多行脚注可以写两段内容[^multi]。
[^multi]: 第一行。
第二行,缩进 4 空格仍属于同一条脚注。5.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
正文 [^id] | 上标 [1] | 引用点 |
[^id]: 内容 | 文末脚注区 | 定义行,位置任意 |
| 续行缩进 4 空格 | 并入同一条脚注 | 多行/多段 |
数字 id [^1] | 按出现顺序编号 | 编号由插件自动给 |
5.4 参数与选项
裸加载,无可配选项。渲染结构固定:sup.footnote-ref + hr.footnotes-sep + section.footnotes + 有序列表,回跳链接带 ↩︎。
5.5 边界与坑
| 情况 | 行为 |
|---|---|
| 两个引用用同一个 id | 都能引用,第二条自动加后缀标签 [1:1],共用同一条定义 |
| 写了定义但正文没引用 | 不显示(不会被渲染出来) |
| 引用了但没写定义 | 原样显示 [^id] 文本 |
| id 含空格/中文 | 能用但不建议,锚点可读性差 |
| 多行续行没缩进 | 第二行断成普通段落 |
5.6 小结
- 引用
[^id]、定义[^id]: 内容,位置随意 - 编号自动,命名 id 更好维护
- 未引用的定义不显示
6. 插入文本 ins(markdown-it-ins)
用途:
++文本++渲染为带下划线的插入文本(类似修订标记)。学习路径:最小示例 → 常用变体 → 全部写法 → 参数与选项 → 边界与坑 → 小结
6.1 最小示例
效果:
这是 插入的内容。
对应源码:
这是 ++插入的内容++。6.2 常用变体
修订场景(配合删除线表达「删了什么、加了什么」):
效果:
旧方案 轮询 WebSocket 推送。
对应源码:
旧方案 ~~轮询~~ ++WebSocket 推送++。与高亮并用:
效果:
新增暗色模式支持。
对应源码:
++新增==暗色模式==支持++。6.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
++文本++ | <ins> 下划线 | 插入内容 |
~~文本~~ | <s> 删除线 | 不是本插件,是 markdown-it 内置删除线 |
++多段文字++ | 整段下划线 | 可含空格 |
6.4 参数与选项
裸加载,无可配选项。
6.5 边界与坑
| 情况 | 行为 |
|---|---|
只写一个 + | 不识别,原样显示 |
标记内嵌 **粗体** | 支持嵌套,++**粗体**++ 正常加粗 |
| 想表达删除 | 用 ~~,不是 ++ |
| 代码块内 | 不转换 |
6.6 小结
++是「加」,~~是「删」- 里面别放复杂嵌套
7. 下标 sub(markdown-it-sub)
用途:
~文本~渲染为下标。学习路径:最小示例 → 常用变体 → 全部写法 → 参数与选项 → 边界与坑 → 小结
7.1 最小示例
效果:
H2O 是水的化学式。
对应源码:
H~2~O 是水的化学式。7.2 常用变体
化学式 / 变量下标:
效果:
CO2 是二氧化碳;数组元素记作 ai。
对应源码:
CO~2~ 是二氧化碳;数组元素记作 a~i~。与删除线区分(最容易混的地方):
效果:
H2O 是下标,H2O 是删除线。
对应源码:
H~2~O 是下标,~~H2O~~ 是删除线。7.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
~文本~ | <sub> 下标 | 单个 ~ |
~~文本~~ | <s> 删除线 | 双 ~,走内置删除线规则 |
H~2~O | H2O | 紧贴前后字符即可 |
7.4 参数与选项
裸加载,无可配选项。
7.5 边界与坑
| 情况 | 行为 |
|---|---|
用两个 ~ 想写下标 | 变成删除线 |
| 标记内有空格 | 不识别(按 pandoc 规则,内容不应含未转义空格) |
| 内嵌其它行内语法 | 不解析——H~**2**~ 显示字面 **2**(插件不支持嵌套) |
| 代码块内 | 不转换 |
7.6 小结
- 下标用单
~,删除线用双~~ - 不支持嵌套
8. 上标 sup(markdown-it-sup)
用途:
^文本^渲染为上标。学习路径:最小示例 → 常用变体 → 全部写法 → 参数与选项 → 边界与坑 → 小结
8.1 最小示例
效果:
210 = 1024。
对应源码:
2^10^ = 1024。8.2 常用变体
英文序数:
效果:
29th 、 1st 、 2nd 。
对应源码:
29^th^ 、 1^st^ 、 2^nd^ 。与数学公式区分:
效果:
行内上标 210 用插件;真正的公式
对应源码:
行内上标 2^10^ 用插件;真正的公式 $2^{10}$ 走 mathjax(第 16 节)。8.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
^文本^ | <sup> 上标 | 单个 ^ |
29^th^ | 29th | 紧贴前后字符 |
$2^{10}$ | 数学公式 | mathjax,不是本插件 |
8.4 参数与选项
裸加载,无可配选项。
8.5 边界与坑
| 情况 | 行为 |
|---|---|
| 标记内含空格 | 不识别 |
| 内嵌其它行内语法 | 不解析,显示字面量(插件不支持嵌套) |
用在表格单元格里连写 ^^ | 是 multimd-table 的行合并标记,不是上标 |
| 想写复杂幂次 | 用 mathjax $...$ |
8.6 小结
^是上标,~是下标- 复杂公式交给 mathjax
9. 高亮 mark(markdown-it-mark)
用途:
==文本==渲染为荧光笔高亮。学习路径:最小示例 → 常用变体 → 全部写法 → 参数与选项 → 边界与坑 → 小结
9.1 最小示例
效果:
请特别注意 密码安全。
对应源码:
请特别注意 ==密码安全==。9.2 常用变体
多处高亮:
效果:
备份 → 验证 → 再删原文件,顺序不能反。
对应源码:
==备份== → ==验证== → ==再删原文件==,顺序不能反。9.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
==文本== | <mark> 高亮背景 | 明暗模式自适应 |
==多 个 词== | 整段高亮 | 可含空格 |
9.4 参数与选项
裸加载,无可配选项;高亮色由主题 CSS 的 mark 规则决定。
9.5 边界与坑
| 情况 | 行为 |
|---|---|
用单个 = | 不识别 |
| 标记内嵌行内语法 | 支持嵌套,==**粗体**== 高亮+加粗都生效 |
| 大面积高亮整段 | 视觉噪音,建议只标关键词 |
9.6 小结
==双等号高亮- 少量使用,别整段涂
10. 任务列表 task-checkbox(markdown-it-task-checkbox)
用途:渲染带复选框的任务清单。
学习路径:最小示例 → 常用变体 → 全部写法 → 参数与选项 → 边界与坑 → 小结
10.1 最小示例
效果:
对应源码:
- [x] 已完成任务
- [ ] 未完成任务方括号内为 x 表示已完成,为空格表示未完成。
10.2 常用变体
真实清单:
效果:
对应源码:
- [x] 主题测试文章创建
- [x] 自动化测试脚本
- [ ] 视觉回归验证大写 X 与有序列表:
效果:
对应源码:
1. [X] 大写 X 同样算完成
2. [ ] 有序列表也能用10.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
- [x] 内容 | ☑ 已完成 | 小写 x |
- [X] 内容 | ☑ 已完成 | 大写 X 等价 |
- [ ] 内容 | ☐ 未完成 | 方括号内一个空格 |
1. [ ] 内容 | 有序任务项 | 有序列表同样支持 |
- [x]内容(无空格) | 普通文本 | 不渲染 |
10.4 参数与选项
插件裸加载 → 默认参数:
| 选项 | 默认 | 说明 |
|---|---|---|
disabled | true | 复选框不可点击,纯展示(渲染出 disabled="true") |
divWrap | false | 不用 div 包住复选框 |
divClass | checkbox | divWrap: true 时才用的类名 |
idPrefix | cbx_ | 复选框 id 前缀(cbx_0、cbx_1…) |
ulClass | task-list | 列表 ul 的 class |
liClass | task-list-item | 列表项 li 的 class |
10.5 边界与坑
| 情况 | 行为 |
|---|---|
- [x]内容(缺空格) | 不识别,整行变普通文本(含字面 [x]) |
| 想点击勾选 | 做不到——disabled: true,纯展示;要交互得自己写 JS 或换组件 |
| 缩进嵌套任务 | 支持,缩进决定层级 |
| 复选框 id 重复 | 每页从 cbx_0 递增,同页多组不冲突 |
| 任务项里的 Markdown | 内容照常渲染(加粗/链接可用) |
10.6 小结
- [x]/- [ ],方括号后必须有空格- 大写
X也可以 - 复选框是禁用的展示态,不能点
11. 表格增强 multimd-table(markdown-it-multimd-table)
用途:标准 GFM 表格 + 对齐控制 + 单元格合并(
_config.yml已开rowspan: true)。学习路径:最小示例 → 常用变体(对齐 / 合并) → 全部写法 → 参数与选项 → 边界与坑 → 小结
11.1 最小示例
效果:
| 功能 | 状态 | 优先级 |
|---|---|---|
| 基础 | ✅ | 高 |
| 高级 | ✅ | 中 |
| 实验 | ⚠️ | 低 |
对应源码:
| 功能 | 状态 | 优先级 |
| :---- | :--: | -----: |
| 基础 | ✅ | 高 |
| 高级 | ✅ | 中 |
| 实验 | ⚠️ | 低 |分隔行的冒号位置决定对齐::--- 左、:--: 中、---: 右。
11.2 常用变体
合并单元格(|| 横向合并、^^ 纵向合并):
效果:
| 组 | 项目 | 说明 |
|---|---|---|
| A | ||
| bar | 第二行 | |
| B | baz | 单独一行 |
对应源码:
| 组 | 项目 | 说明 |
| :-- | :--: | :-- |
| A | foo ||
| ^^ | bar | 第二行 |
| B | baz | 单独一行 |横合并:某行少写一个单元格、用 || 收尾,左侧单元格 colspan 增加。纵合并:写 ^^ 表示「与上一行同列合并」。
11.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
\| a \| b \| | 两列表格 | 基本语法 |
:--- / :--: / ---: | 左 / 中 / 右对齐 | 写在分隔行 |
行尾 \|\| | 横向合并(colspan) | 少写单元格 + 多一个 \| |
单元格写 ^^ | 纵向合并(rowspan) | 需 rowspan: true(已开) |
单元格内转义 \\\| | 字面竖线 | 不当作列分隔 |
11.4 参数与选项
_config.yml 当前只开了一个选项:
| 选项 | 当前值 | 说明 |
|---|---|---|
rowspan | true | 启用 ^^ 纵向合并 |
multiline | 默认 false | 未开:单元格内不能换行写多段 |
headerless | 默认 false | 未开:表格必须有表头行 |
inline | 默认 false | 未开 |
11.5 边界与坑
| 情况 | 行为 |
|---|---|
| 表格前没有空行 | 紧贴上面段落,可能不识别为表格 |
每行列数不一致(不用 \|\|/^^) | 缺的单元格直接不输出(不补空),多余的被丢弃 |
想用 ^^ 纵向合并但没开 rowspan | 单元格显示字面 ^^ |
| 单元格内要竖线 | 写 \|,否则被当列分隔 |
| 单元格内要换行 | 需开 multiline,当前未开 |
| 与 attrs 组合给表格加属性 | 属性块要写在表格下方空两行处 |
11.6 小结
- 对齐看分隔行冒号
- 跨列
||、跨行^^(rowspan已开) - 表格前留空行,单元格竖线要转义
12. 图片尺寸 imsize(markdown-it-imsize)
用途:在图片地址后追加
=宽x高控制显示尺寸,无需 CSS。学习路径:最小示例 → 常用变体 → 全部写法 → 参数与选项 → 边界与坑 → 小结
12.1 最小示例
效果:

对应源码:
12.2 常用变体
只定宽(高度按原图比例自动):
效果:

对应源码:
只定高:
效果:

对应源码:
12.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
 | width="300" height="200" | 宽高都定 |
 | width="300" | 只定宽 |
 | height="200" | 只定高 |
{width=300} | attrs 写法,同样有效 | 不用 imsize 也行(见第 2 节) |
12.4 参数与选项
裸加载,无可配选项。输出的是 HTML width / height 属性:只约束显示尺寸,不会裁剪原图。
12.5 边界与坑
| 情况 | 行为 |
|---|---|
= 前没有空格(url=300x200) | 被当成 URL 的一部分,尺寸不生效 |
写 =300X200(大写 X) | 整段不识别为图片,原样显示 Markdown 文本 |
| 想裁剪成指定比例 | 做不到,只改显示尺寸;裁切要用 CSS object-fit 或预处理图片 |
| 与 groupimage 组合 | 尺寸与网格列宽互相挤压,谨慎混用 |
| 原图很小却写大尺寸 | 放大后模糊 |
12.6 小结
- 语法是
url =宽x高,=前有空格 300x/x200表示只定一边- 只改显示尺寸,不改图片本身
13. 容器 container(markdown-it-container)
用途:
::: 类型渲染带色条 + 淡色背景的提示容器。主题已注册 7 种类型:warning/note/info/attention/error/tip/hint。学习路径:最小示例 → 七种类型 → 全部写法 → 参数与选项 → 边界与坑 → 小结
13.1 最小示例
效果:
这是一个 warning 容器——需要注意的内容!
对应源码:
::: warning
这是一个 warning 容器——需要注意的内容!
:::13.2 七种类型
效果:
note —— 补充说明。
info —— 信息提示。
attention —— 注意警示。
error —— 严重错误。
tip —— 小技巧。
hint —— 隐含提示。
对应源码:
::: note
note —— 补充说明。
:::
::: info
info —— 信息提示。
:::
::: attention
attention —— 注意警示。
:::
::: error
error —— 严重错误。
:::
::: tip
tip —— 小技巧。
:::
::: hint
hint —— 隐含提示。
:::13.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
::: warning … ::: | <div class="warning"> | 类型名即 class |
::: note | <div class="note"> | 与 note tag 同名不同产物 |
::: tip / ::: hint | info 蓝色提示 | 两个类型都映射到 info 语义色 |
结束行写 ::::(更长) | 同样能闭合 | 开闭标记只需同类型 |
13.4 参数与选项
_config.yml 里用 7 个对象形式分别注册(裸 use 不注册任何容器):
- name: markdown-it-container
options: warning
- name: markdown-it-container
options: note
# … info / attention / error / tip / hint 同理| 参数 | 必填 | 说明 |
|---|---|---|
| 开启行类型 | ✅ | 必须与注册值完全一致且小写 |
| 容器内容 | ❌ | 走 Markdown 渲染(列表/代码/表格都行) |
结束行 ::: | ✅ | 不需要重复类型名 |
13.5 边界与坑
| 情况 | 行为 |
|---|---|
类型写错(::: Warning 大写) | 不是已注册容器 → 原样输出为段落文本 |
| 开启行不在行首 | 不识别,退化为普通文本 |
| 想嵌套容器 | 能渲染出内层容器,但闭合标记容易被外层提前吃掉(页面出现多余 ::: 文本)——不建议嵌套 |
| 想加自定义标题 | 不支持(container 没有标题概念,需要标题用第 14 节 admon 或 note tag) |
| 内容为空 | 输出空容器,不报错 |
| 与 note tag 混用 | 都可用,但两种提示块风格同页出现会显得杂乱 |
13.6 小结
- 三行结构:
::: 类型+ 内容 +::: - 类型必须小写且已注册(7 种)
- 没有标题/折叠能力——需要时用 admon 或 note
14. 提示容器 admon(markdown-it-admon)
用途:
!!! 类型渲染带色条 + 淡色背景的提示容器,渲染为.admonition结构。与第 13 节 container 是两个独立插件:标记不同(!!!vs:::)、渲染不同(<div class="admonition tip">vs<div class="tip">)。学习路径:最小示例 → 标题与无标题 → 任意类型 → 全部写法 → 参数与选项 → 边界与坑 → 小结
14.1 最小示例
内容缩进 4 空格,块由两个连续空行闭合:
效果:
Tip
这是一个 tip 容器——提示信息。
对应源码:
!!! tip
这是一个 tip 容器——提示信息。
14.2 自定义标题与无标题
标题写在类型后(空格分隔),默认标题是类型名首字母大写;写 "" 表示不要标题:
效果:
自定义标题:部署前检查
标题可以自己写。
这一块没有标题,只有正文。
对应源码:
!!! note 自定义标题:部署前检查
标题可以自己写。
""
这一块没有标题,只有正文。
14.3 任意类型
类型不限制(validate 只检查 tag 非空),写成什么就是什么 class,样式由主题 CSS 决定:
效果:
info
信息块。
示例
类型名可以随便写,没有对应 CSS 时退化为基础样式。
对应源码:
!!! info
信息块。
!!! example 示例
类型名可以随便写,没有对应 CSS 时退化为基础样式。
14.4 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
!!! tip + 4 空格缩进 + 两空行 | <div class="admonition tip"> | 最小结构 |
!!! note 标题 | 带 .admonition-title | 标题走 Markdown |
!!! warning "" | 无标题 | 双引号空串 |
!!! 任意词 | 对应 class | 类型不校验 |
三个以上 !(!!!!) | 仍识别 | 标记至少 3 个 |
14.5 参数与选项
| 参数 | 必填 | 默认 | 说明 |
|---|---|---|---|
!!! 标记 | ✅ | — | 至少 3 个 ! |
| 类型(第一个词) | ✅ | — | 非空即可,转小写作 class |
| 标题(其余词) | ❌ | 类型名首字母大写 | "" 表示无标题 |
| 块内容 | ✅ | 空 | 需缩进(与开启行对齐后 4 空格) |
| 闭合 | — | 两个连续空行 / 文档结束 | 无显式结束标记 |
14.6 边界与坑
| 情况 | 行为 |
|---|---|
| 内容不缩进 | 不进入容器,变成普通段落 |
| 只空一行就写下一段 | 不会闭合,下一段被吞进容器 |
| 忘记闭合直接到文末 | 文档结束自动闭合(内容可能超出预期) |
| 类型写中文 | 能用,但 class 含中文,CSS 不好选 |
| 想嵌套 admon | 缩进层级不同才可能嵌套,容易出错,建议用 note tag |
| 与 container 混用 | 产物 class 不同(admonition xxx vs xxx),样式也不同 |
14.7 小结
!!!+ 缩进内容 + 两个空行闭合- 标题默认是类型名,
""可去掉 - 类型不校验,但没有 CSS 的类型只剩基础样式
15. 定义列表 deflist(markdown-it-deflist)
用途:渲染定义列表(术语 + 多条描述)。
学习路径:最小示例 → 多条定义 → 全部写法 → 参数与选项 → 边界与坑 → 小结
15.1 最小示例
术语一行,描述以 :(冒号 + 空格)开头:
效果:
- Hexo
- 快速、简洁且高效的博客框架。
对应源码:
Hexo
: 快速、简洁且高效的博客框架。15.2 多条定义
同一个术语可以挂多条描述:
效果:
- Hexo
- 快速、简洁且高效的博客框架。
- 基于 Node.js 编写。
对应源码:
Hexo
: 快速、简洁且高效的博客框架。
: 基于 Node.js 编写。15.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
术语 换行 : 描述 | <dl><dt>…<dd>… | 定义列表 |
多个 : 描述 | 多条 <dd> | 同一术语多条描述 |
术语 后隔一个空行再写 : 描述 | 仍识别 | 空行不影响(实测) |
| 描述下空一行 + 4 空格缩进续写 | <dd> 内多个 <p> | 支持多段描述 |
:描述(无空格) | 不识别 | 冒号后必须有空格 |
15.4 参数与选项
裸加载,无可配选项。输出 <dl> / <dt> / <dd>,主题给术语加粗、描述缩进。
15.5 边界与坑
| 情况 | 行为 |
|---|---|
: 后没空格 | 当作普通段落文本(整段原样输出) |
| 描述续行没缩进 4 空格 | 断成普通段落,脱离列表 |
| 与任务列表/普通列表相邻 | 列表类型不同,建议留空行分隔 |
| 描述里有冒号 | 只认行首的 :,正文冒号不影响 |
15.6 小结
- 术语独占一行,描述以
:开头(冒号后必须有空格) - 空行不影响识别,但缩进决定是否并入同一条描述
- 一个术语可挂多条描述,也可写多段描述
16. 数学公式 mathjax3(markdown-it-mathjax3)
用途:渲染 LaTeX 数学公式:
$...$内联公式,$$...$$块级公式(需 front-matter 声明mathjax: true)。学习路径:最小示例 → 块级公式 → 全部写法 → 参数与选项 → 边界与坑 → 小结
16.1 最小示例
效果:
内联公式:
对应源码:
内联公式:$E=mc^2$16.2 块级公式
块级公式上下各留一个空行,避免被当段落粘连:
效果:
对应源码:
$$
\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2}
$$16.3 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
$E=mc^2$ | 行内 SVG 公式 | 与正文同流 |
$$\int_0^1 x^2 dx$$ | 块级独立公式 | 建议独占段落 |
\$100 | 字面 $100 | 需要显示美元符号时转义 |
\(...\) / \[...\] | 不支持 | mathjax3 5.x 硬编码 $ / $$ |
16.4 参数与选项
| 位置 | 参数 | 必填 | 说明 |
|---|---|---|---|
| front-matter | mathjax: true | ✅ | 不声明则公式不渲染(本页已声明) |
_config.yml | tex.inlineMath: [['$','$']] | — | 对 5.x 无效(源码写死),只在文档里表意 |
_config.yml | tex.displayMath: [['$$','$$']] | — | 同上 |
_config.yml | tex.processEscapes: true | — | 生效:\$ 输出字面 $ |
_config.yml | svg.fontCache: global | — | SVG 字体缓存策略 |
16.5 边界与坑
| 情况 | 行为 |
|---|---|
忘写 front-matter mathjax: true | 公式不渲染(原样或纯文本) |
正文出现未转义的 $(价格、shell 变量) | 被当公式起点,后续文字被吞进公式 |
块级 $$ 上下不留空行 | 可能与前一段合并成同一段落 |
用 \( ... \) | 不支持,不渲染 |
公式里有 _ / ^ 但没加花括号 | 单字符生效,多字符会错位(LaTeX 规则) |
| 想改分隔符 | 改 _config.yml 无效,需换 texmath/katex 方案 |
16.6 小结
$...$行内、$$...$$块级,必须mathjax: true- 字面
$用\$转义 - 分隔符写死在插件里,配置改不动
17. 中文排版 cjk-breaks(markdown-it-cjk-breaks)
用途:优化中文排版:避免中英文混排时在错误位置断行。
学习路径:最小示例 → 全部写法 → 参数与选项 → 边界与坑 → 小结
17.1 最小示例
效果:
这是中文测试内容,混合 English 和 2026 年的数字,断行位置更符合中文阅读习惯。
对应源码:
这是中文测试内容,混合 English 和 2026 年的数字,断行位置更符合中文阅读习惯。插件在中文与拉丁字符/数字边界插入零宽断行机会(<wbr> / word-break 相关处理),正文不需要写任何标记。
17.2 全部写法
| 写法 | 渲染 | 说明 |
|---|---|---|
| 中英混排(无标记) | 自动优化断行 | 本插件唯一作用 |
中文 English 中文 | 断行点在中英边界 | 不会把英文单词劈开 |
| 纯中文段落 | 基本不受影响 | 中文本身可逐字断行 |
17.3 参数与选项
裸加载,无可配选项——_config.yml 里只有一行 - markdown-it-cjk-breaks # 中文排版优化。
17.4 边界与坑
| 情况 | 行为 |
|---|---|
| 期望它「自动加空格」 | 不会——只管断行,不插入可见空格 |
| 想在代码块里生效 | 不处理代码内容 |
与 breaks: true 叠加 | 正常,段落内换行仍转 <br> |
| 关掉它 | 从 _config.yml 删除该行;一般不建议 |
17.5 小结
- 零语法、零配置,写了中文就自动受益
- 只管断行,不加空格
18. 综合示例(多插件组合)
用途:验证多个插件在同一页共存不打架。
学习路径:组合效果 → 对应源码
18.1 组合效果
效果:
任务清单(task-checkbox):
定义列表(deflist):
- Markdown
- 轻量级标记语言。
- 由 John Gruber 发明。
脚注(footnote):教程 wiki 共 4 篇[5]。
多个插件组合在同一页面正常工作,互不干扰。
18.2 对应源码
对应源码:
*[API]: Application Programming Interface
**任务清单**(task-checkbox):
- [x] emoji 正常::white_check_mark:
- [x] 缩写正常:API
- [x] 数学正常:$a^2 + b^2 = c^2$
**定义列表**(deflist):
Markdown
: 轻量级标记语言。
: 由 John Gruber 发明。
**脚注**(footnote):教程 wiki 共 4 篇[^total]。
[^total]: 布局、Tag 插件、交互、Markdown 语法。附:markdown-it 插件速查表
| 插件 | 语法 | 渲染 | 说明 |
|---|---|---|---|
| emoji | :smile: | emoji 字符 | 短代码即用;不启用 :) |
| attrs | {...} 元素后 | 行内属性 | {#id .class key=val};表格需下方空两行 |
| link-attributes | 任意 <a> | target="_blank" | pattern 无效 → 站内链接也新窗口 |
| abbr | *[ABBR]: 全称 | <abbr> 悬停提示 | 定义位置任意,全篇生效 |
| footnote | [^1] + [^1]: 内容 | 文末脚注 | 编号自动;未引用的定义不显示 |
| ins | ++文本++ | <ins> 下划线 | 修订标记 |
| sub | ~文本~ | <sub> 下标 | 化学式等;~~ 是删除线 |
| sup | ^文本^ | <sup> 上标 | 幂次等 |
| mark | ==文本== | <mark> 高亮 | 荧光笔效果 |
| task-checkbox | - [x] / - [ ] | 复选框列表 | 方括号后必须有空格;复选框不可点击 |
| multimd-table | GFM 表格 | <table> | :--: 控制对齐;\|\| 跨列、^^ 跨行 |
| imsize |  | 尺寸图 | = 前有空格;只改显示尺寸 |
| container | ::: warning | div.warning | 7 种类型注册;无标题 |
| admon | !!! tip + 两空行闭合 | .admonition 容器 | 类型不限制;标题可自定义 |
| deflist | 术语 + : 定义 | <dl> 列表 | 必须紧邻,冒号后有空格 |
| mathjax3 | $公式$ / $$公式$$ | SVG 公式 | 需 mathjax: true;分隔符写死 |
| cjk-breaks | 无 | 自动 | 中文排版优化 |
常见坑:
- 展示语法的代码块必须用 raw 标签(raw/endraw 成对)包裹,防止 nunjucks 预渲染报错或吞掉后续内容
- 文章正文含
$...$/$$...$$公式时,front-matter 必须声明mathjax: true,否则公式不渲染 - 块级公式
$$...$$建议上下各留空行;需显示字面$用\$转义 link-attributes的pattern在 4.0.1 里不生效——所有正文链接(含站内与锚点)都会被加target="_blank",改配置无法只作用于外链- 任务列表
- [x]方括号后必须有空格;- [x]xxx不会渲染为任务;复选框是disabled的展示态 - abbr 定义行
*[缩写]: 全称位置任意(整篇 block 解析后才做替换),但必须独占一行 - container 注册
warning/note/info/attention/error/tip/hint7 种;::: tip/::: hint渲染为 info 蓝色提示容器 - admon 用
!!!开头、内容缩进、两个连续空行闭合,只空一行不会结束 - multimd-table 的
^^是跨行合并,不是上标;||是跨列 - 表格与 attrs 组合时,属性块要写在表格下方空两行处