Markdown 高亮语法
说到 Markdown 里的"高亮",其实指的是两件不同的事——一种是像荧光笔一样给文字加个醒目的背景色,另一种是代码块里根据编程语言自动上色。这两件事的写法完全不一样,很多人搞混了,今天我们就一次讲清楚。
文本高亮:像荧光笔一样标记文字
文本高亮(Text Highlight)就是给段落中的某些字加上背景色,通常是黄色,效果跟在书本上用荧光笔划重点一模一样。
用双等号 ==highlight== 高亮文字
这是最简洁的写法,用两对等号把文字包起来:
这段话里有一个==非常重要的词==需要引起注意。渲染效果就是"非常重要的词"这几个字会显示为黄底黑字。
这个语法最早出现在一些扩展 Markdown 方言里,现在已经被不少主流工具采用:Obsidian、Typora、Logseq、iA Writer、VS Code(预览模式)都支持用 ==文字== 来实现文本高亮 [^1] [^2]。
顺便提一句,我在 Obsidian 里写笔记的时候基本天天都用这个语法,划重点特别方便。不过有一次写完导出 HTML 后发现高亮全没了,查了半天才发现是导出工具不支持这个语法——后面会详细说兼容性的事。
用 HTML 的 <mark> 标签高亮
如果 ==高亮== 在你的环境里不生效,可以用 HTML5 的 <mark> 标签,几乎所有 Markdown 渲染器都支持内嵌 HTML:
这段话里有一个<mark>非常重要的词</mark>需要引起注意。效果和双等号一样,文字会显示黄色背景。
<mark> 的好处是兼容性极强。Stack Overflow 上这个话题的最高票回答推荐的就是这个方案,截止目前已经获得超过 220 个赞 [^1]。Google Colaboratory、Jupyter Notebook 这些环境里,<mark> 是唯一可靠的高亮方式。
对了,<mark> 还支持自定义颜色,加上 style 属性就行:
<mark style="background-color: lightblue">蓝色高亮</mark>
<mark style="background-color: #ffcccc">红色高亮</mark>不过要注意,GitHub 会过滤掉内联 style,所以在 GitHub 上自定义颜色是行不通的 [^3]。
用 <span> 加背景色
这是另一种 HTML 方式,原理和 <mark> 一样:
<span style="background-color: #FFFF00">黄色高亮文字</span>相比 <mark>,<span> 的语义性差一些(<mark> 在 HTML5 中明确表示"标记/高亮"的含义),而且同样会被 GitHub 过滤 style 属性。所以一般推荐用 <mark> 而不是 <span> [^1]。
其他平台特有的高亮语法
还有些小众工具用了自己的高亮语法,了解就行,不用记:
| 工具 | 语法 | 说明 |
|---|---|---|
| Roam Research | ^^highlight^^ | 双脱字符 |
| Notejoy | ::highlight:: | 双冒号 |
| 某些 Wiki 系统 | ::: highlight\n内容\n::: | 块级高亮 |
说实话,除非你刚好在用这些工具,否则不需要关心这些语法。记住 ==highlight== 和 <mark> 就够了。
平台兼容性对比:哪种高亮方法能用?
这可能是大家最关心的问题。我整理了一张表,列出了主流平台对文本高亮的支持情况:
| 平台 | ==高亮== | <mark> | <mark style> | <span style> |
|---|---|---|---|---|
| Obsidian | ✅ | ✅ | ✅ | ✅ |
| Typora | ✅(需设置中开启)[^4] | ✅ | ✅ | ✅ |
| VS Code 预览 | ✅ | ✅ | ✅ | ✅ |
| Logseq | ✅ | ✅ | ✅ | ✅ |
| GitHub | ❌ | ❌ | ❌ | ❌ |
| GitLab | ❌ | ❌ | ❌ | ❌ |
| Jupyter Notebook | ❌ | ✅ | ❌ | ✅ |
| Google Colab | ❌ | ✅ | ❌ | ❌ |
几个关键发现:
- GitHub 完全不支持文本高亮。
==不解析,HTML 标签被过滤。如果你需要在 GitHub README 里高亮文字,目前只能用 加粗(**粗体**)或行内代码(`代码`)来替代强调效果 [^3]。 - Obsidian 和 Typora 是体验最好的,
==语法和<mark>都支持,自定义颜色也没问题。 - Jupyter/Colab 环境建议直接用
<mark>,最稳妥。
代码语法高亮:让代码块自动着色
说完了文本高亮,接下来聊聊另一种"高亮"——代码语法高亮(Syntax Highlighting)。这个功能是让代码块里的关键字、字符串、注释等根据编程语言自动上色,提升可读性。
基本语法
在三个反引号后面加上语言名称就行:
```javascript
function sayHello() {
console.log("Hello, World!");
}
`` `上面这段代码渲染出来,function、console、log 这些关键字会被自动标上不同的颜色。
不加语言名称的话,代码块就是纯灰色背景,没有语法着色:
``` `
function sayHello() {
console.log("Hello, World!");
}
`` `行内代码也算一种"高亮"
用单个反引号包裹的文字会显示为灰色背景的等宽字体:
在 JavaScript 中,使用 `console.log()` 输出内容。严格来说这不叫高亮,而是标记为"代码",但视觉上确实起到了强调的效果。和 Markdown 加粗、Markdown 斜体 类似,行内代码也是一种文本格式化手段。不过要注意,行内代码的语义是"代码",不是"重点标记",别为了好看就把普通文字都用反引号包起来 [^1]。
常用语言标识符
| 语言 | 标识符 | 语言 | 标识符 |
|---|---|---|---|
| JavaScript | javascript 或 js | Python | python 或 py |
| HTML | html | CSS | css |
| Java | java | C/C++ | c / cpp |
| Go | go | Rust | rust |
| PHP | php | Ruby | ruby |
| SQL | sql | Shell | bash 或 shell |
| JSON | json | YAML | yaml |
| TypeScript | typescript 或 ts | Swift | swift |
实际上大多数 Markdown 编辑器支持上百种语言。底层渲染引擎不同,支持的语言列表也有差异——Typora 用的是 CodeMirror,Obsidian 用 Prism.js,GitHub 用 Linguist [^5] [^6]。
代码高亮主题
语法高亮的配色方案取决于你用的工具主题。Typora 可以在"主题"菜单中切换,VS Code 跟随编辑器的颜色主题。如果你是在网页上渲染 Markdown,常用的 highlight.js 和 Prism.js 都提供几十套主题可以选 [^5]。
这里有个小经验:我之前用 highlight.js 做博客的代码高亮,默认主题在浅色背景上看着不错,但切到深色模式后对比度就很差。后来换成 GitHub Dark 主题才解决。所以选主题的时候别忘了测一下深色模式。
怎么选?一份简单的决策指南
根据你的使用场景,我总结了以下建议:
如果你用 Obsidian / Typora 写笔记:直接用 ==高亮文字==,简洁又直观。需要改颜色就加 <mark style="background-color: xxx">。
如果你要发到 GitHub:很遗憾,文本高亮基本没戏。用 加粗 来强调重点,或者用 > 引用块 来突出重要信息。
如果你写 Jupyter Notebook:用 <mark>高亮文字</mark>,兼容性最好。
如果你做网页 / 博客渲染:前端用 highlight.js 或 Prism.js 处理代码高亮,文本高亮用 <mark> 标签,CSS 随便定制样式。
代码高亮一律用三反引号 + 语言名,这个各平台都支持。
常见问题
Markdown 标准支持高亮吗?
原生的 Markdown 规范(包括 CommonMark)不包含文本高亮语法。==highlight== 属于扩展语法,目前没有被纳入标准 [^1] [^7]。不过 Obsidian、Typora 等主流工具都支持,实际使用没有问题。
GitHub 上怎么高亮文字?
GitHub 的 Markdown 渲染器不支持 == 语法,也会过滤 HTML 标签。替代方案是用 加粗(**文字**)强调,或者用引用块(> 文字)来突出显示 [^3]。
高亮能改颜色吗?
<mark style="background-color: 颜色"> 在支持内联样式的平台(Obsidian、Typora)可以改颜色。GitHub 不支持。==highlight== 语法本身不支持指定颜色,颜色由渲染器主题决定。
代码块高亮支持哪些语言?
主流引擎(highlight.js、Prism.js、Pygments)都支持 100+ 种编程语言。具体到某个平台,GitHub 支持 500+ 种语言(基于 Linguist),Obsidian 支持 Prism.js 的全部语言列表 [^5] [^6]。
参考来源
[^1]: Stack Overflow — text highlight in markdown,最高票回答 229 赞 [^2]: Obsidian Help — Basic formatting syntax,官方文档 [^3]: GitHub Community — Can you highlight text in Markdown files in different colors?[^4]: Stack Overflow 评论 — Typora 需在 Preferences → Markdown 中开启双等号高亮 [^5]: Codebase HQ — Syntax Highlighting in Markdown[^6]: Obsidian Help — 使用 Prism.js 进行语法高亮,参见 Prism 支持语言列表[^7]: CommonMark Spec — 最新规范,当前不包含 highlight 语法