TeX 隐形占位

TeX / KaTeX 隐形占位命令

1. 概述

\phantom、\hphantom、\kern 属于 TeX 排版体系中的空白占位宏命令,用于在数学公式中插入不可见的空白区域,实现表达式对齐、行高统一、定界符匹配等排版效果。本手册以矩阵内表达式对齐为核心场景,系统阐述各命令的定义、特性、适用场景及工程实践要点。

适用环境:底层渲染引擎为 KaTeX 或 MathJax 的平台,包括 Typora、Obsidian、Notion、GitBook、mdBook 等 Markdown 数学公式环境。

不适用环境:原生 MathML、Mathematica、MATLAB 符号工具箱、Python Matplotlib mathtext(有限兼容,行为与 TeX 不一致);C/C++/Python 等通用编程语言无此命令体系。


2. 命令定义与特性

2.1 \phantom{<表达式>}

定义:生成一块不可见的空白区域,其水平宽度、垂直高度与深度完全复刻目标表达式的排版尺寸,不渲染任何可见符号。

特性:

  • 宽度自适应,修改被复刻表达式时占位空白宽度同步变化。
  • 同时保留水平尺寸与垂直尺寸,既可用于横向对齐,也可统一多行公式的行高。
  • 本身不属于数学运算符,不会自动插入数学模式默认的运算符间距。

2.2 \hphantom{<表达式>}

定义:仅复刻目标表达式的水平宽度,不复制其垂直高度与深度。

特性:

  • 宽度自适应,与 \phantom 一致。
  • 不改变所在行的垂直高度,仅适用于纯横向对齐且无需统一行高的场景。
  • 当多行内存在分式、大型运算符时,无法自动校正行高差异。

2.3 \kern{<长度>}

定义:插入固定宽度的水平空白,属于硬编码间距,不参考任何表达式尺寸;支持负值,可实现字符靠近甚至重叠。

支持单位:

单位 说明
pt 印刷基础点单位
em 当前字体字母 M 的宽度,推荐作为相对单位,缩放稳定性更好
ex 当前字体字母 x 的高度
mu 数学专用单位(1em = 18mu),数学环境优先选用 \mspace

局限:宽度固定,不随公式内容自动调整;修改表达式或更改字号后,对齐关系会直接错位。仅适合局部微小间隙微调,不推荐作为跨行表达式对齐方案。

2.4 配套命令

命令 功能说明
\vphantom{expr} 仅复刻垂直高度与深度,不占用任何水平宽度;用于统一行高而不改变横向位置
\mspace{mu} 数学环境专用间距命令,单位 mu,用于数学符号之间的精细间隙微调
\smash{expr} 消除表达式的高度与深度,常与 \phantom 组合使用,抹除分式带来的额外行高

注:\makebox 为原生 LaTeX 盒子命令,KaTeX 不支持,Markdown 公式环境不可使用。


3. 命令对比

命令 复刻维度 适用场景 风险
\phantom{expr} 宽度 + 高度 + 深度 矩阵/多行公式横向对齐、统一行高 无,尺寸自适应
\hphantom{expr} 仅宽度 纯横向对齐,无需统一行高 存在分式时无法校正行高
\kern{length} 无(固定值) 局部微小间距微调 硬编码,修改内容或字号会错位

4. 矩阵对齐场景

4.1 渲染示例

Ls0−Ms0+32Ls2cos⁡(2θ)Ls0−Ms0+32Ls2sin⁡(2θ)Ls0−Ms0+32Ls2sin⁡(2θ)Ls0−Ms0+32Ls2cos⁡(2θ)Ls0−Ms032Ls2sin⁡(2θ)32Ls2cos⁡(2θ)32Ls2sin⁡(2θ)Ls0−Ms0−32Ls2cos⁡(2θ) \begin{bmatrix} L_{\text{s0}} - M_{\text{s0}} +\frac{3}{2} L_{\text{s2}} \cos(2\theta) & \phantom{L_{\text{s0}} - M_{\text{s0}} +}\frac{3}{2} L_{\text{s2}} \sin(2\theta) \\ \phantom{L_{\text{s0}} - M_{\text{s0}}}+\frac{3}{2} L_{\text{s2}} \sin(2\theta) & \hphantom{L_{\text{s0}} - M_{\text{s0}} +}\frac{3}{2} L_{\text{s2}} \cos(2\theta) \\ \hphantom{L_{\text{s0}} - M_{\text{s0}}}\frac{3}{2} L_{\text{s2}} \sin(2\theta) & \kern{7.2em}\frac{3}{2} L_{\text{s2}} \cos(2\theta) \\ \kern{7.2em}\frac{3}{2} L_{\text{s2}} \sin(2\theta) & L_{\text{s0}} - M_{\text{s0}} -\frac{3}{2} L_{\text{s2}} \cos(2\theta) \end{bmatrix} Ls0−Ms0+23Ls2cos(2θ)Ls0−Ms0+23Ls2sin(2θ)Ls0−Ms023Ls2sin(2θ)23Ls2sin(2θ)Ls0−Ms0+23Ls2sin(2θ)Ls0−Ms0+23Ls2cos(2θ)23Ls2cos(2θ)Ls0−Ms0−23Ls2cos(2θ)

复制代码
$$
\begin{bmatrix}
L_{\text{s0}} - M_{\text{s0}} +\frac{3}{2} L_{\text{s2}} \cos(2\theta)
& \phantom{L_{\text{s0}} - M_{\text{s0}} +}\frac{3}{2} L_{\text{s2}} \sin(2\theta) \\

\phantom{L_{\text{s0}} - M_{\text{s0}}}+\frac{3}{2} L_{\text{s2}} \sin(2\theta)
& \hphantom{L_{\text{s0}} - M_{\text{s0}} +}\frac{3}{2} L_{\text{s2}} \cos(2\theta) \\

\hphantom{L_{\text{s0}} - M_{\text{s0}}}\frac{3}{2} L_{\text{s2}} \sin(2\theta)
& \kern{7.2em}\frac{3}{2} L_{\text{s2}} \cos(2\theta) \\

\kern{7.2em}\frac{3}{2} L_{\text{s2}} \sin(2\theta)
& L_{\text{s0}} - M_{\text{s0}} -\frac{3}{2} L_{\text{s2}} \cos(2\theta)
\end{bmatrix}
$$

4.2 渲染行为说明

  1. 第 1 行第 1 列:基准表达式,无占位。
  2. 第 1 行第 2 列 :\phantom 自适应复刻完整表达式的宽度与高度,实现分式横向对齐。
  3. 第 2 行第 1 列 :\phantom 复刻宽度与高度,为本场景推荐方案。
  4. 第 2 行第 2 列 :\hphantom 仅复刻水平宽度;矩阵行高一致时肉眼差异较小。
  5. 第 3 行第 1 列 :\hphantom 仅复刻水平宽度。
  6. 第 3 行第 2 列 :\kern{7.2em} 硬编码固定宽度,内容改动会破坏对齐。
  7. 第 4 行第 1 列 :\kern{7.2em} 硬编码固定宽度。
  8. 第 4 行第 2 列:基准表达式,无占位。

4.3 工程定稿公式

以下公式实现矩阵双列分式对齐,匹配目标排版样式:

ψsdψsq\]=T2s/2r\[Ls0−Ms0+32Ls2cos⁡(2θ)Ls0−Ms0−32Ls2sin⁡(2θ)Ls0−Ms0+32Ls2sin⁡(2θ)Ls0−Ms0−32Ls2cos⁡(2θ)\]T2r/2s\[idiq\]+T2s/2rψf\[cos⁡θsin⁡θ\] \\begin{bmatrix} \\psi_{\\text{sd}} \\\\ \\psi_{\\text{sq}} \\end{bmatrix} =\\mathbf{T}_{2\\text{s}/2\\text{r}} \\begin{bmatrix} L_{\\text{s0}} - M_{\\text{s0}} +\\frac{3}{2} L_{\\text{s2}} \\cos(2\\theta) \& \\phantom{L_{\\text{s0}} - M_{\\text{s0}} -}\\frac{3}{2} L_{\\text{s2}} \\sin(2\\theta) \\\\ \\phantom{L_{\\text{s0}} - M_{\\text{s0}}+}\\frac{3}{2} L_{\\text{s2}} \\sin(2\\theta) \& L_{\\text{s0}} - M_{\\text{s0}} -\\frac{3}{2} L_{\\text{s2}} \\cos(2\\theta) \\end{bmatrix} \\mathbf{T}_{2\\text{r}/2\\text{s}} \\begin{bmatrix} i_{\\text{d}} \\\\ i_{\\text{q}} \\end{bmatrix} + \\mathbf{T}_{2\\text{s}/2\\text{r}} \\psi_{\\text{f}} \\begin{bmatrix} \\cos\\theta \\\\ \\sin\\theta \\end{bmatrix} \[ψsdψsq\]=T2s/2r\[Ls0−Ms0+23Ls2cos(2θ)Ls0−Ms0+23Ls2sin(2θ)Ls0−Ms0−23Ls2sin(2θ)Ls0−Ms0−23Ls2cos(2θ)\]T2r/2s\[idiq\]+T2s/2rψf\[cosθsinθ

复制代码
$$
\begin{bmatrix}
\psi_{\text{sd}} \\
\psi_{\text{sq}}
\end{bmatrix}
=\mathbf{T}_{2\text{s}/2\text{r}}
\begin{bmatrix}
L_{\text{s0}} - M_{\text{s0}} +\frac{3}{2} L_{\text{s2}} \cos(2\theta) & \phantom{L_{\text{s0}} - M_{\text{s0}} +}\frac{3}{2} L_{\text{s2}} \sin(2\theta) \\
\phantom{L_{\text{s0}} - M_{\text{s0}}}\frac{3}{2} L_{\text{s2}} \sin(2\theta) & L_{\text{s0}} - M_{\text{s0}} -\frac{3}{2} L_{\text{s2}} \cos(2\theta)
\end{bmatrix}
\mathbf{T}_{2\text{r}/2\text{s}}
\begin{bmatrix}
i_{\text{d}} \\
i_{\text{q}}
\end{bmatrix}
+
\mathbf{T}_{2\text{s}/2\text{r}}
\psi_{\text{f}}
\begin{bmatrix}
\cos\theta \\
\sin\theta
\end{bmatrix}
$$

定稿特性:

  • 第一列两行 32\frac{3}{2}23 竖直对齐;第二列两行 32\frac{3}{2}23 竖直对齐。
  • 运算符紧贴分式,运算符与分式之间不存在多余空白。
  • 第一列第二行无多余加号,与参考原图保持一致。
  • KaTeX / MathJax 可直接渲染。

5. 其他应用场景

5.1 统一多行公式的垂直高度

在 align / aligned 环境中,部分行包含分式、根式、上下标,部分行仅含普通字母,各行基线高度不一致。在高度偏小的行插入 \phantom{高表达式},强制拉高该行盒子高度,实现所有行上下边界对齐。

y=12ax+by=12x2+c \begin{aligned} y &= \phantom{\frac12} ax + b \\ y &= \frac12 x^2 + c \end{aligned} yy=21ax+b=21x2+c

复制代码
$$
\begin{aligned}
y &= \phantom{\frac12} ax + b \\
y &= \frac12 x^2 + c
\end{aligned}
$$

5.2 配合 \left / \right 自动伸缩定界符

\left 和 \right 会根据本行内容的最大高度自动调整括号大小。若一侧不需要显示符号,但需要括号感知另一侧大符号的尺寸,可使用 \phantom 放置隐形大定界符。

(x2y+1+z] \left( \frac{x^2}{y+1} + z \phantom{\Bigg]} \right. (y+1x2+z]

复制代码
$$
\left( \frac{x^2}{y+1} + z \phantom{\Bigg]} \right.
$$

其中 \right. 为不可见的右定界符,用于闭合 \left。

5.3 公式填空与草稿预留空位

在推导草稿、习题填空中,预先留出固定宽度空位,占位宽度随预留表达式自动适配。

f(x)=A(x)+B(x)=A(x)+B(x) \begin{aligned} f(x) &= \phantom{A(x)+B(x)} \\ &= A(x)+B(x) \end{aligned} f(x)=A(x)+B(x)=A(x)+B(x)

复制代码
$$
\begin{aligned}
f(x) &= \phantom{A(x)+B(x)} \\
&= A(x)+B(x)
\end{aligned}
$$

5.4 上下标水平位置微调

在上下标内部插入 \phantom,增加隐形横向宽度,推移下标或上标的水平位置,用于对齐多行下标。

xaxab x_{a}\quad x_{\phantom{a}b} xaxab

复制代码
$$
x_{a}\quad x_{\phantom{a}b}
$$

5.5 多行编号公式等号对齐

长推导式中,各行表达式长短不一,等号难以对齐。使用 \phantom 在较短行添加隐形宽度,将等号对齐在同一竖线。

注:

align 环境原生的 & 对齐是主流方案;

\phantom 作为备选,用于复杂嵌套公式中 & 无法直接处理的子项内部对齐。

5.6 表格内数学内容对齐

数学表格单元格内表达式长短差异较大时,利用 \phantom 隐形占位实现单元格内部的项对齐,原理与矩阵对齐一致。

Ls0−Ms0+32cos⁡(2θ)Ls0−Ms032sin⁡(2θ) \begin{array}{l} L_{\text{s0}} - M_{\text{s0}} +\frac32 \cos(2\theta) \\ \phantom{L_{\text{s0}} - M_{\text{s0}}}\frac32 \sin(2\theta) \end{array} Ls0−Ms0+23cos(2θ)Ls0−Ms023sin(2θ)

复制代码
$$
\begin{array}{l}
L_{\text{s0}} - M_{\text{s0}} +\frac32 \cos(2\theta) \\
\phantom{L_{\text{s0}} - M_{\text{s0}}}\frac32 \sin(2\theta)
\end{array}
$$

5.7 拆分长公式保持符号对齐

长公式换行拆分时,第二行开头需要与上一行某一位置对齐,可在上一行提取前缀表达式放入 \phantom,置于第二行最左端。

F=(a+b+c+d)⋅x=(a+b+c+d)⋅y \begin{aligned} F &= (a+b+c+d) \cdot x \\ &= \phantom{(a+b+c+d) \cdot } y \end{aligned} F=(a+b+c+d)⋅x=(a+b+c+d)⋅y

复制代码
$$
\begin{aligned}
F &= (a+b+c+d) \cdot x \\
  &= \phantom{(a+b+c+d) \cdot } \cdot y
\end{aligned}
$$

5.8 与 \smash 组合消除多余高度干扰

\smash{expr} 抹除表达式的高度与深度,仅保留宽度;二者组合可以只借用表达式的宽度,不引入额外行高。

latex 复制代码
\phantom{\smash{\frac32 L_{\text{s2}}}}

6. 场景选型小结

场景 核心目标 是否推荐 备注
align 多行统一行高 让含分式/根式的多行高度一致 最常用场景之一
\left/\right 伸缩括号匹配高度 控制自动括号尺寸 TeX 经典用法
公式填空/草稿预留空位 预留自适应宽度空白 优于固定 \kern
上下标位置微调 横向移动下标/上标 精细排版使用
长换行公式对齐 多行拆分后项横向对齐 替代硬编码间距
表格数学单元格对齐 单元格内表达式对齐 与矩阵原理一致

7. 注意事项

  1. \phantom 仅生成空白,不产生数学间距 ;放在运算符前后不会自动添加 \mathbin 类间距。
  2. 若只需要宽度、不需要改变行高,优先使用 \hphantom;仅需统一高度时使用 \vphantom。
  3. 不要用 \phantom 替代 align 环境原生的 & 等号对齐;& 是等号对齐的首选方案,\phantom 用于 & 无法实现的子项内部对齐。
  4. 要点 :
    不要将 \phantom 插入运算符与目标项中间,例如 +\phantom{\frac32}\frac32,会在运算符和分式之间引入额外空白。
    \phantom 应当放置在单元格最左端,空白全部置于目标表达式左侧。