如何在Excel中借助Python in Excel渲染LATEX数学公式
在Python in Excel中显示LaTeX数学公式的可行方案
方法1:让SymPy调用Matplotlib的LaTeX渲染生成公式图片
SymPy可以指定Matplotlib作为渲染后端,复用其内置的LaTeX渲染能力,无需额外安装独立LaTeX环境(Python in Excel的Anaconda发行版已包含Matplotlib的基础LaTeX支持)。具体实现步骤:
- 配置Matplotlib启用LaTeX渲染
- 通过SymPy生成LaTeX格式的公式字符串,交给Matplotlib渲染成图片
- 将图片插入目标Excel单元格
代码示例:
import sympy as sp import matplotlib.pyplot as plt import io from PIL import Image import xlwings as xw # 定义SymPy符号公式 x = sp.symbols('x') expr = sp.Integral(sp.sin(x**2), (x, 0, sp.pi)) # 配置Matplotlib的LaTeX渲染参数 plt.rcParams['text.usetex'] = True plt.rcParams['font.family'] = 'serif' # 创建空白画布渲染公式 fig, ax = plt.subplots(figsize=(4, 1)) ax.text(0.5, 0.5, r'$' + sp.latex(expr) + r'$', fontsize=16, ha='center', va='center') ax.axis('off') # 隐藏坐标轴 # 将画布转为图片对象 buf = io.BytesIO() plt.savefig(buf, format='png', bbox_inches='tight', pad_inches=0) buf.seek(0) img = Image.open(buf) # 插入到Excel的A1单元格 wb = xw.Book() ws = wb.sheets.active ws.pictures.add(img, left=ws.range('A1').left, top=ws.range('A1').top, width=img.width/2, height=img.height/2) plt.close(fig)
方法2:直接用Matplotlib渲染LaTeX公式(无需SymPy)
如果不需要SymPy的符号计算功能,直接用Matplotlib渲染LaTeX字符串更简洁:
import matplotlib.pyplot as plt import io from PIL import Image import xlwings as xw # 启用LaTeX渲染 plt.rcParams['text.usetex'] = True # 定义LaTeX公式字符串 latex_formula = r'\int_0^\pi \sin(x^2) dx' # 生成公式图片 fig, ax = plt.subplots(figsize=(4, 1)) ax.text(0.5, 0.5, r'$' + latex_formula + r'$', fontsize=16, ha='center', va='center') ax.axis('off') # 转为图片并插入Excel buf = io.BytesIO() plt.savefig(buf, format='png', bbox_inches='tight', pad_inches=0) buf.seek(0) img = Image.open(buf) wb = xw.Book() ws = wb.sheets.active ws.pictures.add(img, left=ws.range('A1').left, top=ws.range('A1').top) plt.close(fig)
方法3:无LaTeX依赖的替代方案(SymPy Unicode输出)
如果Matplotlib的LaTeX渲染出现兼容性问题,可以用SymPy的Unicode输出直接写入单元格,虽然美观度略差,但完全不需要LaTeX环境:
import sympy as sp import xlwings as xw x = sp.symbols('x') expr = sp.Integral(sp.sin(x**2), (x, 0, sp.pi)) # 生成Unicode格式的公式文本 unicode_formula = sp.pretty(expr, use_unicode=True) # 写入Excel单元格 wb = xw.Book() ws = wb.sheets.active ws.range('A1').value = unicode_formula
注意事项
- Python in Excel中若未安装
xlwings,可通过!pip install xlwings命令安装 - Matplotlib的
text.usetex依赖Anaconda预装的基础LaTeX组件,默认已包含,无需额外配置
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

