下标与上标
Markdown 中实现上下标的三种方式:HTML 标签、LaTeX 公式与平台扩展语法,及选型建议。
认知导入(Layer 1 进阶层) 前置知识:004 行内格式(本篇是行内格式的”补遗”——核心语法里没有的排版需求)。 边界说明:CommonMark 与 GFM 都没有原生的上下标语法,所有写法都是替代方案:HTML 标签(通用)、LaTeX 公式(数学场景)、平台扩展(Pandoc/Typora 等)。 强制练习:在 GitHub 上分别用
<sup>2</sup>和^2^写 x 的平方,观察哪种生效。
1. 需求与方案总览
上下标出现在指数(x 的平方)、化学式(水的分子式)、单位(平方米)、序数(第 1 名的英文缩写)等场景。Markdown 核心语法没有对应写法,可选方案:
| 方案 | 写法 | 依赖 | 兼容性 |
|---|---|---|---|
| HTML 标签 | x<sup>2</sup> / H<sub>2</sub>O | 渲染器允许内嵌 HTML | 最好 |
| LaTeX 公式 | $x^2$ / $H_2O$ | 渲染器支持数学公式(KaTeX/MathJax) | 数学场景最佳 |
| 平台扩展 | 2^10^ / H~2~O | 特定工具(Pandoc、Typora 等) | 差,跨平台慎用 |
2. HTML 标签方式(最通用)
2.1 基本语法
x<sup>2</sup> + y<sup>2</sup> = z<sup>2</sup>
H<sub>2</sub>O 是水的化学式
<sup>(superscript)上标、<sub>(subscript)下标,都是 HTML5 标准行内元素,在允许内嵌 HTML 的渲染器(GitHub、GitLab、绝大多数站点生成器)上均生效。
2.2 常见用例
E = mc<sup>2</sup> <!-- 质能方程 -->
2H<sub>2</sub> + O<sub>2</sub> = 2H<sub>2</sub>O <!-- 化学方程式 -->
面积 = 100 m<sup>2</sup> <!-- 单位 -->
1<sup>st</sup>、2<sup>nd</sup>、3<sup>rd</sup> <!-- 序数 -->
这段结论有争议<sup>[1]</sup> <!-- 引文编号 -->
2.3 替代:Unicode 上下标字符
一部分字符存在 Unicode 上标形式(如平方米的平方符号、立方符号、序数词的词尾标记、商标与注册商标符号),直接输入即可,不依赖 HTML:
面积 = 100 m²
体积 = 50 cm³
Brand™ 与 Company®
常用的 Unicode 上下标字符速查:
| 需求 | 字符 | 说明 |
|---|---|---|
| 平方 / 立方 | ² ³ | U+00B2 / U+00B3,最常用 |
| 序数标记 | ª º ° | 西班牙语序数、角度 |
| 商标类 | ™ ® © | 法律符号,字形完整 |
| 上标数字 | ⁰¹²³⁴⁵⁶⁷⁸⁹ | 字形覆盖不全,字体差异大 |
| 上标正负号 | ⁺ ⁻ | 离子电荷 |
| 下标数字 | ₀₁₂₃₄₅₆₇₈₉ | 化学式(H₂O) |
局限是字符集不全:上标数字在某些字体下缺失或大小不一,且没有完整的字母上下标体系(存在少量如 ⁿ、ᵢ)。仅适合固定、常用的符号;需要任意内容上下标时回到 HTML 或公式方案。
3. LaTeX 公式方式(数学场景)
如果渲染器支持数学公式(GitHub 自 2022 年起支持 $...$,详见 markdown/210-LaTeXMathFormula),上下标有专业的排版效果:
3.1 上标:^
$x^2$ <!-- 单字符上标 -->
$x^{10}$ <!-- 多字符上标需花括号 -->
$x^{n+1}$ <!-- 表达式上标 -->
$x^{y^{z}}$ <!-- 嵌套上标 -->
3.2 下标:_
$a_n$ <!-- 单字符下标 -->
$a_{10}$ <!-- 多字符下标需花括号 -->
$a_{i,j}$ <!-- 多重下标 -->
3.3 上下标同用
$x_1^2$
$a_n^{(k)}$
LaTeX 的关键规则:^ 和 _ 默认只作用于紧随其后的一个字符,多个字符必须用花括号分组——$x^10$ 渲染出来是”x 的 1 次方后面跟个 0”,这是最高频的公式错误。
3.4 化学式示例
$H_2O$、$CO_2$、$Ca(OH)_2$、$Fe_2O_3$
简单化学式用公式足够;带配平系数与反应条件的正式化学方程式,可考虑 mhchem 扩展宏(渲染器需支持,GitHub 的 MathJax 环境支持 \ce):
$\ce{2H2 + O2 -> 2H2O}$
$\ce{SO4^2-}$
mhchem 的优势是语义化——箭头、配平、电荷都用宏表达,源码即可读;代价是离开支持该宏的环境(如部分 KaTeX 配置)无法渲染,跨平台文档慎用。
4. 平台扩展语法
少数工具定义了专属的上下标定界符:
| 平台 | 下标 | 上标 | 说明 |
|---|---|---|---|
| Pandoc | H~2~O | 2^10^ | 需启用 subscript / superscript 扩展 |
| Typora | 原生支持 | 原生支持 | ~下标~ 与 ^上标^ |
| Obsidian | 不支持该写法 | 不支持该写法 | 用 HTML 标签或 LaTeX |
| CommonMark / GFM | 不支持 | 不支持 | ~x~/^x^ 无特殊含义(注意 ~~x~~ 是删除线) |
特别提醒:Pandoc 的下标是单波浪号 ~2~,不是双波浪号。写成 H~~2~~O 会与删除线语法冲突(渲染为”带删除线的 2”)。另外 Pandoc 的上下标内容默认不能包含空格,含空格需转义或使用反斜杠。
5. 常见陷阱
- 把 HTML 标签写进行内代码:
`H<sub>2</sub>O`会原样显示标签,行内代码内不解析任何标签。 - 价格里的
$被误当成公式:价格 $5,折扣 $10在支持数学公式的渲染器(含 GitHub)上,$5,折扣 $之间可能被解析为一段公式。含美元金额的正文要么转义\$,要么干脆不用$符号(写 USD)。 - 在标题或表格单元格滥用公式:标题里的公式会污染锚点与目录显示;表格单元格放
$$块级公式直接失效(单元格只能装行内内容,用$...$行内形式)。 - 以为
~x~、^x^是通用语法:这是 Pandoc/Typora 等的私有扩展,GitHub 上~x~甚至与删除线(~~)仅一线之隔,误写一个波浪号既不产生下标也不报错,最难排查。 - Unicode 上下标被字体”出卖”:
X⁽ⁿ⁾这类组合在部分字体下大小参差、基线错位,正式排版前先在目标平台预览。
6. 方案选择建议
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| GitHub README / Issue | HTML 标签 | 稳定生效,<sup>/<sub> 允许内嵌 |
| 数学、物理公式 | LaTeX | 专业排版,公式内嵌套自然 |
| 化学式(简单) | HTML 或 LaTeX | 都可;大量公式选 LaTeX |
| Pandoc 转换流水线 | Pandoc 扩展 | 源码简洁,转换时语义保留 |
| 跨平台分发的文档 | HTML 标签 | 兼容性最好 |
通用注意事项:
- HTML 标签在代码块内不会被解析,属于字面文本;
- LaTeX 公式依赖渲染器加载 KaTeX/MathJax,纯文本环境只会显示
$...$源码; - 同一项目内统一一种方案,混用(
<sup>与$^$并存)会造成风格割裂与维护负担。
小结
- 初学者要点:日常需求用 HTML 标签
x<sup>2</sup>、H<sub>2</sub>O,在 GitHub 上直接可用;常用符号(平方、立方、商标等)优先用现成 Unicode 字符。 - 进阶注意:LaTeX 的
^/_只作用一个字符,多字符必须加花括号;Pandoc 用单波浪号表示下标、脱字符表示上标且需启用扩展;Obsidian 不支持~x~/^x^扩展写法;数学公式与平台扩展都依赖目标渲染器,跨平台文档统一用 HTML 标签兜底。