第一次在Jupyter Notebook里写机器学习公式时,我就被那个奇怪的连加符号∑搞懵了。明明在教科书里看到的是上下标整齐排列的∑,怎么在我的Markdown里就变成了压缩在右侧的奇怪模样?这个问题困扰了我整整一个下午,直到发现了\limits这个"神器"。
这里有个很典型的例子。假设我们要表示线性回归的损失函数:
latex复制$J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2$
显示效果会是:J(θ)=1/2m∑_{i=1}^m(h_θ(x^(i))-y^(i))^2。看到没?那个i=1和m都被挤到右边去了,完全不符合数学排版规范。
LaTeX在处理运算符上下标时有两种模式:
来看个直观对比:
latex复制默认模式:$\sum_{i=1}^{n} x_i$ → ∑_{i=1}^n x_i
\limits模式:$\sum\limits_{i=1}^{n} x_i$ → ∑_{i=1}^n x_i
| 运算符 | 命令 | 默认效果 | \limits效果 |
|---|---|---|---|
| 求和 | \sum | ∑_{i=1}^n | ∑_{i=1}^n |
| 连乘 | \prod | ∏_{i=1}^n | ∏_{i=1}^n |
| 极限 | \lim | lim_ | lim_ |
| 积分 | \int | ∫_a^b | ∫_a^b |
以逻辑回归的代价函数为例:
latex复制$J(\theta)=-\frac{1}{m}\sum\limits_{i=1}^{m}[y^{(i)}\log(h_\theta(x^{(i)}))+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))]$
这个公式如果不用\limits,在行内显示会非常拥挤。用了\limits后,求和符号的上下标就能清晰展示。
概率密度函数的期望值:
latex复制$E[X] = \int\limits_{-\infty}^{\infty} x f(x) dx$
这里如果不加\limits,积分上下限会变成难看的右侧下标形式。
在$$包裹的独立公式环境中,\sum等运算符默认就会显示为\limits效果,所以不需要额外添加:
latex复制$$
\frac{\partial}{\partial\theta_j}J(\theta)=\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}
$$
\limits可以和\underset、\overset等命令组合使用:
latex复制$\underset{x\in S}{\max\limits_{y\in T}} f(x,y)$
为什么加了\limits没效果?
公式变得太高怎么办?
可以使用\smashoperator命令(需要mathtools包):
latex复制$\smashoperator{\sum\limits_{i=1}^{n}} x_i$
Jupyter的Markdown单元格完美支持\limits语法,但要注意:
在Medium、知乎等平台:
VS Code的Markdown预览:
当文档中有大量\limits公式时:
latex复制\newcommand{\sumlim}{\sum\limits}
$\sumlim_{i=1}^n x_i$
好的公式排版能让你的技术文档:
举个例子,对比这两个协方差矩阵表达式:
latex复制$\Sigma = \sum_{i=1}^{n} (x_i-\mu)(x_i-\mu)^T$ # 业余
$\Sigma = \sum\limits_{i=1}^{n} (x_i-\mu)(x_i-\mu)^T$ # 专业
想深入掌握LaTeX数学排版:
记住,好的公式排版就像好的代码格式一样,虽然不影响功能,但能极大提升可读性和专业性。我在写论文时就因为没注意\limits被导师指出过问题,现在分享这些经验,希望能帮你少走弯路。