python数学表达式与latex表达式转化_Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定...

转自 | 机器之心

数学是数据科学和机器学习的重要基础,数学运算的结果对于机器学习项目而言是至关重要的。在编写代码时,我们常常需要定义数学公式的计算形式。像 S=r^2 这样简单的数学公式,大概不会出现拼写错误。但如果是下面这样的公式呢?

还记得数学老师密密麻麻的板书吗?人们习惯于手写公式的运算过程。而如果计算机编程语言能够显示出类似于手写公式的计算过程,检查公式运算是否准确就可以轻松多了吧。

近日,GitHub 上一个名叫 handcalcs 的开源库就解决了这个问题。

项目地址:https://github.com/connorferster/handcalcs

handcalcs 库:将 Python 计算代码转换为 Latex 公式

handcalcs 库可将 Python 计算代码自动渲染为 Latex 公式,呈现方式类似于手写的公式计算:先编写符号公式,再代入具体数字,最后得出结果。

正如上面的演示样例所示,计算机能够识别的公式形式是:

而人们更习惯的是如下形式的数学公式:

handcalcs 的功能就是,将数学公式和运算过程以人们更容易理解的形式展示出来。

数学计算的结果往往会影响后续代码的运行过程,而复杂的数学公式更容不得一点错漏,因此对于包含较多复杂数学公式的 Python 代码,用 handcalcs 进行自查或许是有必要的。

如何使用 handcalcs?

那么,这个开源库要如何应用呢?

基本用法 1:Jupyter 单元格魔法函数

handcalcs 的设计初衷是在 Jupyter Notebook 或 Jupyter Lab 中作为单元格魔法函数来使用。

首先,引入 handcalcs 模块并运行单元格:import handcalcs.render

接下来,在想要使用 handcalcs 的单元格上面添加一行魔法函数 %%render:%%render

例如:%%rendera = 2b = 3c = 2*a + b/3

如果系统安装了 Latex 环境,你还可以将 notebook 导出成 pdf 格式文件。

基本用法 2:函数装饰器 @handcalc()

除了在 Jupyter cell 中使用外,在 Python 的函数中也可以使用 handcalcs。

首先导入 @handcalc() 装饰器:from handcalcs.decorator import handcalc

然后编写函数。注意:函数必须 return locals():@handcalc()def my_calc(x, y, z):a = 2*x / yb = 3*ac = (a + b) / zreturn locals()@handcalc(left: str = '', right: str = '', jupyter_display: bool = False)

返回一个由 (latex_code: str, locals: dict) 组成的元组,其中 locals 是函数命名空间范围内所有变量的字典。

其他功能

有些公式的参数量较多,如果按照常规的格式显示在一列,会浪费大量空间。而使用 handcalcs,只需添加注释标签# Parameters 就能让参数以三列的形式显示出来:

而有些公式的计算过程非常繁琐,也会占用大量显示空间,只需使用标签# Short 就能让运算过程的显示行数减少:

反之,如果你比较喜欢推导等式对齐的方式,可以使用# Long 标签显示。

有时你并不需要代入数值计算,只需要以符号的形式显示数学计算公式。那么,你需要使用# Symbolic 标签:

handcalcs 的功能本身还可以解决编程中的小问题,即在 Python 中,显示多个变量的值通常需要多个 print() 语句,而使用 handcalcs 能让事情变得简单许多:

很多开发者喜欢用_表示公式中的下标,handcalcs 可以将其显示出来,甚至多级下标也可以通过嵌套的形式得到显示。

数学公式中经常出现希腊字母(如「pi」、「eta」等),只要在代码中编写出对应的英文名,比如 alpha、beta,handcalcs 就可以显示出希腊字母:

不只是简单的数学公式,复杂公式也不在话下,比如含有积分的公式:

缺陷虽然用处多多,但项目作者表示,handcalcs 仍存在一些小缺陷。首先,handcalcs 并不适用于 collections 这种数据类型,例如 list、tuple、dict 等。其次是在变量名方面,handcalcs 是针对 Jupyter 环境设计的。如果在 notebook 上重复使用变量名,则可能导致错误的数学运算。handcalcs 虽然有些小瑕疵,但它对开发者而言颇有帮助。感兴趣的话,快来动手试一下吧!关于程序员大白

程序员大白是一群哈工大,东北大学,西湖大学和上海交通大学的硕士博士运营维护的号,大家乐于分享高质量文章,喜欢总结知识!

当然可以!你可以使用Python中的第三方库PyPDF2来读取PDF文档,使用LaTeX和MathJax将公式转换为图片,然后使用Python-docx库将这些图片插入到Word文档中。下面是实现此任务的示例代码: ```python import os import re import sys import PyPDF2 import subprocess from PIL import Image from docx import Document from docx.shared import Inches # 定义PDF路径和输出文档路径 pdf_file = 'test.pdf' output_file = 'output.docx' # 定义正则表达式,用于匹配公式 pattern = r'\$.*?\$' # 实例化PyPDF2 Reader对象,读取PDF文档 with open(pdf_file, 'rb') as f: pdf = PyPDF2.PdfFileReader(f) # 遍历PDF中的每一页 for page in range(pdf.getNumPages()): # 获取当前页内容 pageObj = pdf.getPage(page) content = pageObj.extractText() # 从当前页内容中提取公式,并保存为临时文件 formulas = re.findall(pattern, content) for i, formula in enumerate(formulas): with open('temp.tex', 'w') as temp_file: temp_file.write('$%s$' % formula) # 调用LaTeX和MathJax将公式转换为PNG格式 subprocess.call(['xelatex', '-output-directory', '.', 'temp.tex']) subprocess.call(['mathtype', '-c', 'temp.tex', '-o', 'formula%s.png' % i]) # 缩小PNG图像大小,以免插入Word文档后文件过大 img = Image.open('formula%s.png' % i) img.thumbnail((Inches(1.5), Inches(1.5))) img.save('formula%s.png' % i) # 创建一个新的Word文档 document = Document() # 将所有PNG图片插入到Word文档中 for i, formula in enumerate(formulas): document.add_paragraph('') document.add_picture('formula%s.png' % i, width=Inches(1.5)) # 保存Word文档 document.save(output_file) # 删除所有临时文件 os.remove('temp.tex') for i in range(len(formulas)): os.remove('formula%s.png' % i) print('转换完成!') ``` 运行此代码,它将读取名为“test.pdf”的PDF文档,并使用提取的公式生成PNG图像。然后,将所有PNG图像插入到新的Word文档中,并将其保存为名为“output.docx”的文件。请确保安装了必需的LaTeX和MathJax环境。如果您使用的是Linux系统,请将`mathtype`命令替换为`tex2im`命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值