markdown单元用$和$$最轻量可靠,适合静态公式;代码单元用display()和latex()可动态生成;sympy.init_printing()能自动渲染符号表达式;mathjax加载失败会导致公式显示为源码。

能直接显示,不需要额外安装或编译 LaTeX 引擎——只要 MathJax 能加载成功,$$、$、Latex() 和 display() 都能用,但行为和适用场景差别很大。
Markdown 单元里用 $ 和 $$ 最快最稳
这是最轻量、最可靠的方式,适合静态公式、文档说明、教学笔记等场景。Jupyter 会把 Markdown 单元里的 $...$(行内)或 $$...$$(独立居中)交给 MathJax 渲染,全程在浏览器端完成。
-
$x_i^2 + sqrt{y_j}$→ 行内显示,不换行 -
$$rac{partial f}{partial x} = lim_{h o 0} rac{f(x+h)-f(x)}{h}$$→ 单独成行、居中、字号略大 - 常见坑:
_在 Markdown 中有特殊含义,必须用反斜杠转义:$x_i$才能正确输出下标;^同理,多字符上标必须加花括号:$e^{ipi}$✅,$e^ipi$❌ - 离线环境可能失败:如果网络无法加载 MathJax CDN(比如公司内网/无网笔记本),公式会原样显示为源码——此时需配置本地 MathJax 或改用
sympy+display()
代码单元里用 display() 和 Latex() 动态生成
适合公式随变量、计算结果动态变化的场景,比如推导中间步骤、展示符号计算结果、自动化报告生成。
-
from IPython.display import Latex+Latex(r"int_0^1 x^2 dx"):传入原始 LaTeX 字符串,严格按字符串渲染,不解析 Python 变量 -
from sympy import *+display(integrate(x**2, x)):自动把 SymPy 表达式转为 LaTeX 并渲染,支持符号运算链式输出 - 注意:
Latex()返回的是一个可显示对象,必须作为单元最后一行(或显式调用print())才能看到;而display()是立即输出,可多次调用 - 常见错误:
Latex("x^2")会报错,因为^在 Python 字符串里不是 LaTeX 特殊字符,必须写成原始字符串:Latex(r"x^2")或双反斜杠:Latex("x\^2")
sympy.init_printing() 自动启用符号表达式 LaTeX 渲染
如果你大量使用 SymPy 做符号计算,这个设置能让所有表达式默认以 LaTeX 形式输出,省去反复写 display() 的麻烦。
- 在代码单元第一行运行:
from sympy import init_printing; init_printing(use_latex='mathjax') - 之后所有 SymPy 表达式(如
diff(sin(x), x)、Matrix([[1,2],[3,4]]))只要作为单元最后一行,就会自动渲染为 LaTeX - 不生效?检查是否漏了
use_latex='mathjax'参数(默认可能是'png',依赖服务器端渲染,更慢且不支持复制公式) - 副作用:会影响后续所有 SymPy 输出格式,若想临时关闭,执行
init_printing(use_latex=False)
真正容易被忽略的是 MathJax 加载状态——它不报错,只静默失败。公式显示为原始文本时,别急着重写语法,先右键检查元素,看有没有 MathJax 相关的 JS 报 404 或 CORS 错误。离线部署、CDN 切换、或禁用广告拦截插件,往往比调公式本身更关键。











