为什么写一篇 Markdown 语法 Demo
Markdown 这东西看着简单,写多了你会发现:
- 不同博客平台、不同文档系统、甚至同一个工具的不同版本,支持的语法和扩展不一致
- 表格的对齐符号有人记不住
- 链接、图片、脚注的语法长得像但顺序不一样
- 代码块的语言标识不写就没高亮
- Mermaid、KaTeX、警告框这些"扩展语法"很多人不知道
这篇是给我自己——也给所有用 Markdown 写技术博客的人——一份能直接收藏的速查 + Demo。每一节都给出实际渲染效果,复制即用。
本博客基于 Hugo + hugo-theme-stack,使用 Goldmark 作为 Markdown 渲染器。后文出现的"Hugo/Stack 主题特有"指的就是这套环境。
一、标题
| |
实战建议:
- 博客文章不要写
#——文章标题在 front matter 里已经有title,正文从##开始 - 层级不要超过 4 级——太深的层级阅读和导航都变差
- 标题前后留空行,避免渲染粘连
二、行内格式
| |
渲染:粗体、斜体、删除线、行内代码、链接。
实战建议:
- 粗体优于斜体——中文里斜体可读性差
- 行内代码用反引号——
API、UserService、createTime这些标识符都该用 - 不要滥用粗体——一段里超过 3 处加粗等于没加粗
三、段落与换行
Markdown 用空行分段,单个换行不是分段:
| |
如果真要在一段内强制换行(不分段),用两个空格 + 换行:
| |
或者用 <br> 也行,但能不用就不用。
四、列表
无序列表
| |
有序列表
| |
任务列表(GFM)
| |
渲染:
- 完成需求评审
- 写代码
- 写单元测试
- 写文档
五、链接与图片
| |
实战建议:
- 图片描述(alt)一定要写——SEO + 无障碍 + 加载失败时显示
- 优先用相对路径——博客域名换了不会失效
- 大图用 Hugo 的 image processing:
shortcode
六、引用块
| |
渲染:
这是引用的第一行。 这是引用的第二行。
嵌套引用。
引用最常用的场景是:
- 标记别人的话(“鲁迅说……")
- 强调结论
- 给小贴士/重要提示加个视觉标签
七、代码块
| |
渲染:
| |
实战建议:
- 永远写语言标识——
java、python、bash、yaml、json、sql,否则没语法高亮 - 不要在代码块里写废话注释——读者要的是能跑的代码
- 复制按钮:本博客主题渲染时自带,无需额外标记
八、表格
| |
渲染:
| 列 1 | 列 2 | 列 3 |
|---|---|---|
| 左对齐 | 居中 | 右对齐 |
| 内容 A | 内容 B | 内容 C |
对齐规则:
:---:左对齐:---::居中---::右对齐---:默认(左)
九、分隔线
| |
或者:
| |
效果都一样:
十、转义字符
要在文中显示 Markdown 的特殊字符,用 \ 转义:
| |
十一、Mermaid 图(Hugo Stack 主题支持)
| |
渲染:
Mermaid 支持的图类型很多——流程图、时序图、类图、ER 图、甘特图、状态机。日常写技术博客最常用的是 flowchart、sequenceDiagram、classDiagram 三种。
时序图示例
类图示例
甘特图示例
项目排期、迭代计划用甘特图表达最直观:
十二、KaTeX 数学公式(需 math: true)
文章 front matter 里设置 math: true,就能写 LaTeX 公式:
| |
渲染需要主题加载 KaTeX——本主题原生支持。不需要数学的文章不要打开 math,加载 KaTeX 会拖慢页面。
十三、HTML 嵌入(默认禁用)
很多 Markdown 工具默认允许在 Markdown 里写 HTML:
| |
但 Hugo 的 Goldmark 默认 unsafe = false——HTML 会被静默丢弃。如果业务需要嵌入 HTML:
- 改
markup.toml把unsafe = true(小心 XSS) - 用 Hugo Shortcode(推荐)
十四、Shortcodes(Hugo 特有)
Hugo 提供了 shortcode 机制——比 HTML 安全,比 Markdown 强大。Hugo 内置了若干常用 shortcode:
| |
上面代码块里的
{{< ... >}}是 Hugo 在文档中展示 shortcode 不被解析的转义写法——实际使用时去掉里面的/* */。
各主题也常自带专属 shortcode,比如折叠块、提示框、画廊等——具体可见自家主题文档。
十五、其他扩展语法
下面这几个不属于 CommonMark 核心,但 Hugo Goldmark + 主流博客引擎多数支持。
上标 / 下标
| |
需要在 markup.toml 的 [markup.goldmark.extensions] 下打开 superscript / subscript 扩展。
脚注
| |
渲染时上标会变成可点击的链接,跳到文末的脚注列表——适合放参考文献、补充说明。
任务列表(再提一次)
很多 Markdown 教程把任务列表算扩展——但 GFM 已经标准化,所有现代渲染器都支持,前文已展示。
表格对齐与多行
复杂表格需要对齐符号 + 每个单元格不要换行——| 必须在同一行。需要单元格内换行用 <br>(要求 unsafe = true 或主题支持)。
十六、写作时的几条小建议
1. 段首不要直接进代码块
| |
| |
| |
- 第二步:
1cd xxx
| |
实时看渲染效果,比每次 push 上线快得多。
Lint 工具
markdownlint 可以检查格式——空行、标题层级、列表缩进——保持风格一致。
小结
把全文压一句:
Markdown 看似自由,但写技术博客时风格、扩展、可移植性都要管。能用通用语法就别上扩展,必须用扩展时优先选有 fallback 的(Mermaid、KaTeX 都行)。
留几条作为"硬性规范”:
- 代码块永远标语言
- 图片永远写 alt 描述
- 中英文之间留空格
- 标题层级不超过 4 级
- 任务列表 / 表格对齐符 / 链接相对路径——这些常用语法记牢
最后——Markdown 不是设计文档语言,是写作语言。它的所有特性都为"专注内容"服务。当你开始想"这个怎么用 Markdown 表达",先问一下"这个真的需要表达吗"。