用Python写Latex公式——handcalcs工具包

用Python写Latex公式——handcalcs工具包

在写论文或者做ppt的时候经常需要进行很多的公式推导,通常一些简单的公式我们希望可以通过程序编码直接地实现,并可以导出为pdf供更多的应用。
我个人通常的做法是到一些Latex公式编辑网站进行在线编辑,当然也可以使用mathtype,除此之外使用mathematica也可以生成一些比较合适的公式图片。常用的在线编辑网址如下:

  • LaTeX在线
  • 公式编辑器
  • 在线手写公式
  • mathtype下载网址(官网付费版):https://www.mathtype.cn/

今天介绍的不是这些公式生成器,而是python的一个工具包,其通过简单的几行代码就能够生成一些公式,对于习惯于使用python的同学来说,可以极大地提高公式推导和论文写作的效率了。
在正式介绍之前先说这个工具包的几个优点(个人见解):

  • 1、大小仅4M左右,安装简单、内存压力小
  • 2、与python结合,对于熟悉python语法的人非常友好了,省时省力
  • 3.、不仅可以生成公式还能够计算结果
  • 4、支持导出公式的LaTeX代码,方便插入到LaTeX之中去
  • 5、 可以导出为pdf

一、安装及源代码查看

非常简单的安装:

pip install handcalcs

这个工具包在github上开源共享了,想要深入研究的人可以看看handcalcs
因为是开源文件,我这里提供一个下载地址给那些懒得登录githug的同学,其中包括了handcalcs的github源代码和我自己练习的demo,可以用作练习的demo和测试。特别建议大家仔细阅读README.md文件哦,基本功能和拓展操作都在这个文档中说地很明白了。
传送:csdn的handcalcs资源_jerry_liufeng

二、Latex功能简介和实现:

我使用的是jupyter notebook编辑器,在jupyter中使用handcalcs库个人感觉可能更方便。

1、基础应用:生成Latex公式:

import handcalcs.render
%%render
a = 2
b = 3
c = 2*a+b/3

注意:

  1. %%render这种magic方法,通常其必须在第一行中显示,所以尽量在%%render的后面进行注释,而且导入函数库也只有在上方的cell导入

结果:

用Python写Latex公式——handcalcs工具包_第1张图片

2、基础应用——在方程中调用使用

# 基础用法2——在方程中进行显示
from handcalcs.decorator import handcalc
@handcalc(left="",right="",jupyter_display=True)
def my_calc(x,y,z):
    a = 2*x/y
    b = 3*a
    c = (a+b)/z 
    return locals()
my_calc(1,1,1)

注意:

  1. 定义函数前使用@handcalc,在函数末尾返回return locals()
  2. 通常需要设置jupyter_display=True来使得jupyter可以将LaTeX公式渲染为图像化

结果:

用Python写Latex公式——handcalcs工具包_第2张图片

3、基础应用——复杂公式的编写

为了避免忘记%%render这类magic方法只能在第一行定义的特点,我将每一个jupyter文件中的cell单独形成一段代码:

from math import sqrt,asin,sin
import handcalcs.render

第一个较为复杂函数的demo:

%%render
#symbolic
a = 1
b = 4
c = 3
x = (-b+sqrt(b**2-4*a*c))/(2*a)

结果:

用Python写Latex公式——handcalcs工具包_第3张图片

第二个较为复杂函数的demo:

%%render
#symbolic
f = c/a + b #Comment
g = c*f / a # Comment
d = sqrt(a / b) + asin(sin(b / c)) + (a/b)**(0.5) + sqrt((a*b + b*c)/(b**2)) + sin(a/b) #Comment

结果:

用Python写Latex公式——handcalcs工具包_第4张图片

4、基础应用——条件输出LaTeX

%%render
#Symbolic
Mag_1 = 100
if Mag_1< 10000:Mag = Mag_1+100
else:Mag = Mag_1-100

结果:

用Python写Latex公式——handcalcs工具包_第5张图片

%%render
x = 2
if x < 1: b = x 
elif x > 1: b = x*1; c = b
else: b = x*1; c = b #Comment

结果:

demo6

注意:

  1. 如果使用了下角标在显示的时候数字可能会被识别为角标,比如Mag_01 < 50000会认为_后面的字符都是角标
  2. 在判断语句中如果有两个以上的未知数比如下面第二个cell中的b和c,再使用#symbolic的话会报错

5、基础应用——积分公式

from scipy import integrate
import handcalcs.render
%%render
#parameters
a = 0.1
b = 0.2
def F(x):
    return x**2 + 10**x
%%render
g = integrate.quad(F,a,b)

结果视图:

用Python写Latex公式——handcalcs工具包_第6张图片

三、进阶之格式转换:

1. 使用#parameter按照三列的格式显示结果,不显示过程公式

%%render
a = 1
b = 4
c = 3
x = (-b+sqrt(b**2-4*a*c))/(2*a)

不使用#parameter:

用Python写Latex公式——handcalcs工具包_第7张图片

使用#parameter之后:

在这里插入图片描述

2. 使用#symbolic只显示参数公式

%%render
#symbolic
a = 1
b = 4
c = 3
x = (-b+sqrt(b**2-4*a*c))/(2*a)

不使用#symbolic

用Python写Latex公式——handcalcs工具包_第8张图片

使用#symbolic

用Python写Latex公式——handcalcs工具包_第9张图片

3. 公式的横纵排列显示方法:#Long#short

使用上面积分的公式表达:
使用#Long:

用Python写Latex公式——handcalcs工具包_第10张图片

使用·#short`

demo12

4. 输出LaTeX公式,使用%%tex而非%%render就行了

%%tex
a = 2
b = 3
c = 2*a + b/3

结果:

\begin{aligned}
a &= 2\;
\\[10pt]
b &= 3\;
\\[10pt]
c &= 2 \cdot a + \frac{ b }{ 3 } = 2 \cdot 2 + \frac{ 3 }{ 3 } &= 5.0
\end{aligned}
\]

5. 希腊字母和特殊字符

import handcalcs.render
import forallpeople
%%render
alpha  = 0.9 
beta_x = 1.6 #β加上下标x
theta_2 = 1 #θ加加下标2

结果:
用Python写Latex公式——handcalcs工具包_第11张图片



编写不易,如果有用请各位点个赞支持一下呗^^,也欢迎各位留言讨论啊!!!

你可能感兴趣的:(python,工具包,python,编程语言,github)