前置知识: Markdown

下标与上标

5 min中级

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. 平台扩展语法

少数工具定义了专属的上下标定界符:

平台下标上标说明
PandocH~2~O2^10^需启用 subscript / superscript 扩展
Typora原生支持原生支持~下标~ 与 ^上标^
Obsidian不支持该写法不支持该写法用 HTML 标签或 LaTeX
CommonMark / GFM不支持不支持~x~/^x^ 无特殊含义(注意 ~~x~~ 是删除线)

特别提醒:Pandoc 的下标是单波浪号 ~2~,不是双波浪号。写成 H~~2~~O 会与删除线语法冲突(渲染为”带删除线的 2”)。另外 Pandoc 的上下标内容默认不能包含空格,含空格需转义或使用反斜杠。

5. 常见陷阱

  1. 把 HTML 标签写进行内代码:`H<sub>2</sub>O` 会原样显示标签,行内代码内不解析任何标签。
  2. 价格里的 $ 被误当成公式:价格 $5,折扣 $10 在支持数学公式的渲染器(含 GitHub)上,$5,折扣 $ 之间可能被解析为一段公式。含美元金额的正文要么转义 \$,要么干脆不用 $ 符号(写 USD)。
  3. 在标题或表格单元格滥用公式:标题里的公式会污染锚点与目录显示;表格单元格放 $$ 块级公式直接失效(单元格只能装行内内容,用 $...$ 行内形式)。
  4. 以为 ~x~、^x^ 是通用语法:这是 Pandoc/Typora 等的私有扩展,GitHub 上 ~x~ 甚至与删除线(~~)仅一线之隔,误写一个波浪号既不产生下标也不报错,最难排查。
  5. Unicode 上下标被字体”出卖”:X⁽ⁿ⁾ 这类组合在部分字体下大小参差、基线错位,正式排版前先在目标平台预览。

6. 方案选择建议

场景推荐方案理由
GitHub README / IssueHTML 标签稳定生效,<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 标签兜底。