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 列 :
\phantom自适应复刻完整表达式的宽度与高度,实现分式横向对齐。 - 第 2 行第 1 列 :
\phantom复刻宽度与高度,为本场景推荐方案。 - 第 2 行第 2 列 :
\hphantom仅复刻水平宽度;矩阵行高一致时肉眼差异较小。 - 第 3 行第 1 列 :
\hphantom仅复刻水平宽度。 - 第 3 行第 2 列 :
\kern{7.2em}硬编码固定宽度,内容改动会破坏对齐。 - 第 4 行第 1 列 :
\kern{7.2em}硬编码固定宽度。 - 第 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. 注意事项
\phantom仅生成空白,不产生数学间距 ;放在运算符前后不会自动添加\mathbin类间距。- 若只需要宽度、不需要改变行高,优先使用
\hphantom;仅需统一高度时使用\vphantom。 - 不要用
\phantom替代align环境原生的&等号对齐;&是等号对齐的首选方案,\phantom用于&无法实现的子项内部对齐。 - 要点 :
不要将\phantom插入运算符与目标项中间,例如+\phantom{\frac32}\frac32,会在运算符和分式之间引入额外空白。
\phantom应当放置在单元格最左端,空白全部置于目标表达式左侧。