用Python优雅地写出数学表达式的LaTeX代码

用Python优雅地写出数学表达式的LaTeX代码

目录

Latexify

LaTeX

安装方法

版本要求

使用方法

实例一

实例二

实例三

实例四

实例五


Latexify

Latexify是一个Python库,它可以将数学表达式转换为LaTeX代码。通过使用latexify-py,可以将数学表达式、函数、方程和公式等等,都优雅地转换为LaTeX代码,方便人们在文档或幻灯片中以纯正的格式来呈现数学表达式。

LaTeX

音译“拉泰赫”,是一种基于ΤΕΧ的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在20世纪80年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由TeX所提供的强大功能,能在几天、甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

安装方法

pip install latexify-py
Collecting latexify-py
  Downloading latexify_py-0.4.2-py3-none-any.whl (38 kB)
Collecting dill>=0.3.2
  Downloading dill-0.3.7-py3-none-any.whl (115 kB)
     |████████████████████████████████| 115 kB 16 kB/s
Installing collected packages: dill, latexify-py
Successfully installed dill-0.3.7 latexify-py-0.4.2

版本要求

当前版本为0.4.2,注意它要求Python版本不能是当前的最新版本3.12,但也不能低于3.7版本:

ERROR: Ignored the following versions that require a different python version: 0.0.4 Requires-Python >=3.6, <3.9; 0.0.5 Requires-Python >=3.6, <3.9; 0.0.6 Requires-Python >=3.6, <3.9; 0.0.7 Requires-Python >=3.6, <3.9; 0.1.0 Requires-Python <3.11,>=3.7; 0.1.1 Requires-Python <3.11,>=3.7; 0.2.0 Requires-Python <3.11,>=3.7; 0.2.0b1 Requires-Python <3.11,>=3.7; 0.2.0b2 Requires-Python <3.11,>=3.7; 0.3.0b1 Requires-Python <3.12,>=3.7; 0.3.1 Requires-Python <3.12,>=3.7; 0.4.0 Requires-Python <3.12,>=3.7; 0.4.1 Requires-Python <3.12,>=3.7; 0.4.2 Requires-Python <3.12,>=3.7
ERROR: Could not find a version that satisfies the requirement latexify-py (from versions: none)
ERROR: No matching distribution found for latexify-py

使用方法

实例一

先用一元二次方程的根来示例lateify的用法:

import math, latexify@latexify.expression
def solve(a,b,c):return (-b + math.sqrt(b**2-4*a*c))/(2*a),(-b - math.sqrt(b**2-4*a*c))/(2*a)# 输出Latex公式
print(solve)# 输出函数的值
print(solve(1,2,1))
print(solve(1,0,-1))

输出结果:

\mathopen{}\left( \frac{-b + \sqrt{ b^{2} - 4 a c }}{2 a}, \frac{-b - \sqrt{ b^{2} - 4 a c }}{2 a} \mathclose{}\right)
(-1.0, -1.0)
(1.0, -1.0)

公式预览:

\mathopen{}\left( \frac{-b + \sqrt{ b^{2} - 4 a c }}{2 a}, \frac{-b - \sqrt{ b^{2} - 4 a c }}{2 a} \mathclose{}\right)

注:代码的关键就是在函数上标注@latexify.expression装饰器。

实例二

再举一个更复杂一点的函数例子,并导入numpy库的函数:

import latexify
import numpy as np@latexify.function
def f(x):return 2*np.pi*x + np.sin(x) - np.cos(x) / (1 + np.exp(-x))print(latex_code)

输出结果:

f(x) = 2 \mathrm{np}.\mathrm{pi} x + \sin x - \frac{\cos x}{1 + \exp \mathopen{}\left( -x \mathclose{}\right)}

公式预览:

\mathrm{f}(x) = 2 \mathrm{np}.\mathrm{pi} x + \sin x - \frac{\cos x}{1 + \exp \mathopen{}\left( -x \mathclose{}\right)}

这第二段代码标注的装饰器是 @latexify.function,与 @latexify.expression 的区别在于后者只显示函数表达式,而前者@latexify.function显示函数名(参数)=函数表达式

实例三

同理,上一个例子换成另一个装饰器,例如:

import math, latexify
a,b,c = 1,-3,2
@latexify.function
def solve1(x1):return (-b + math.sqrt(b**2-4*a*c))/(2*a)
@latexify.function
def solve2(x2):return (-b - math.sqrt(b**2-4*a*c))/(2*a)print(solve1)
print(solve2)
print(solve1((a,b,c)))
print(solve2((a,b,c)))

输出结果:

\mathrm{solve1}(\mathrm{x1}) = \frac{-b + \sqrt{ b^{2} - 4 a c }}{2 a}
\mathrm{solve2}(\mathrm{x2}) = \frac{-b - \sqrt{ b^{2} - 4 a c }}{2 a}
2.0
1.0

公式预览:

\mathrm{solve1}(\mathrm{x1}) = \frac{-b + \sqrt{ b^{2} - 4 a c }}{2 a}

\mathrm{solve2}(\mathrm{x2}) = \frac{-b - \sqrt{ b^{2} - 4 a c }}{2 a}

实例四

斐波那契数列通项表达式

import math, latexify@latexify.function
def Fibonacci(n):return (((1 + math.sqrt(5))/2)**n - ((1 - math.sqrt(5))/2)**n)/math.sqrt(5)print(Fibonacci)for i in range(10):print(int(Fibonacci(i)))

 输出结果:

\mathrm{Fibonacci}(n) = \frac{\mathopen{}\left( \frac{1 + \sqrt{ 5 }}{2} \mathclose{}\right)^{n} - \mathopen{}\left( \frac{1 - \sqrt{ 5 }}{2} \mathclose{}\right)^{n}}{\sqrt{ 5 }}
0
1
1
2
3
5
8
13
21
34

公式预览:

\mathrm{Fibonacci}(n) = \frac{\mathopen{}\left( \frac{1 + \sqrt{ 5 }}{2} \mathclose{}\right)^{n} - \mathopen{}\left( \frac{1 - \sqrt{ 5 }}{2} \mathclose{}\right)^{n}}{\sqrt{ 5 }}

网上多数文章都写成这样的格式:

\mathrm{Fibonacci}(n) = \frac{1}{\sqrt{ 5 }} \cdot \mathopen{}\left( \mathopen{}\left( \frac{1 + \sqrt{ 5 }}{2} \mathclose{}\right)^{n} - \mathopen{}\left( \frac{1 - \sqrt{ 5 }}{2} \mathclose{}\right)^{n} \mathclose{}\right) 

return语句改为以下表达式即可:

return (1/math.sqrt(5))*(((1 + math.sqrt(5))/2)**n - ((1 - math.sqrt(5))/2)**n)

实例五

分段函数,就以最简单的绝对值函数为例:

import latexify@latexify.function
def f(x):return x if x>0 else (0 if x==0 else -x)print(f)

结果输出:

f(x) = \left\{ \begin{array}{ll} x, & \mathrm{if} \ x > 0 \\ 0, & \mathrm{if} \ x = 0 \\ -x, & \mathrm{otherwise} \end{array} \right.

公式预览:

f(x) = \left\{ \begin{array}{ll} x, & \mathrm{if} \ x > 0 \\ 0, & \mathrm{if} \ x = 0 \\ -x, & \mathrm{otherwise} \end{array} \right.


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/415790.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何实现 H5 秒开?

我在简历上写了精通 H5&#xff0c;结果面试官上来就问&#xff1a; 同学&#xff0c;你说你精通 H5 &#xff0c;那你能不能说一下怎么实现 H5 秒 由于没怎么做过性能优化&#xff0c;我只能凭着印象&#xff0c;断断续续地罗列了几点&#xff1a; 网络优化&#xff1a;http2、…

递归、搜索与回溯算法(专题六:记忆化搜索)

目录 1. 什么是记忆化搜索&#xff08;例子&#xff1a;斐波那契数&#xff09; 1.1 解法一&#xff1a;递归 1.2 解法二&#xff1a;记忆化搜索 1.2.1 记忆化搜索比递归多了什么&#xff1f; 1.2.2 提出一个问题&#xff1a;什么时候要使用记忆化搜索呢&#xff1f; 1.3 …

腾讯二面:自动贩卖机/音频播放器使用了什么设计模式?

状态模式是什么&#xff1f; 状态模式&#xff0c;也被称作状态对象模式&#xff0c;是一种行为设计模式。 当一个对象的内在状态改变时&#xff0c;允许改变其行为&#xff0c;这个对象看起来像是改变了其类。 它让对象在其内部状态改变时改变自己的行为。外部调用者无需了…

栈、队列专题

文章目录 栈栈的概述栈的实现栈在函数调用中的应用栈在表达式求值中的应用逆波兰表达式求值 栈在括号匹配中的应用有效的括号最长的有效括号删除字符串中的所有相邻重复项 如何获取栈内最小元素呢如何实现浏览器的前进和后退 队列队列的定义队列的实现循环队列队列的应用队列在…

16.桥接模式

桥接模式 介绍 桥接模式是一种结构型设计模式&#xff0c;它通过将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。这种模式通过组合的方式来实现&#xff0c;而不是继承。桥接模式通过将抽象和实现解耦&#xff0c;从而实现抽象和实现的分离&#xff0c;使得系统更加…

c++调用函数传值传参

先回顾一下上次我的指针博客 今天看书时候发现一个东西看不懂,不懂就查&#xff0c;不能一直半解 int *find(const vector<int> &vec,int value){ //省略....... } 和 elemType* find(const elemType * array,int size,const elemType &value){ //省略.........…

C#,入门教程(07)——软件项目的源文件与目录结构

上一篇&#xff1a; C#&#xff0c;入门教程(06)——解决方案资源管理器&#xff0c;代码文件与文件夹的管理工具https://blog.csdn.net/beijinghorn/article/details/124895033 创建新的 C# 项目后&#xff0c; Visual Studio 会自动创建一系列的目录与文件。 程序员后面的工…

.net core 6 使用注解自动注入实例,无需构造注入 autowrite4net

像java使用autowrite一样使用 1、前提先注册到ioc容器当中 builder.Services.AddScoped 2、nuget引入AutoWrite4Net 3、启用 //启用自动注入 app.UseAutoWrite(); 4、在类上使用注解 [StartAutoWrite] public class NacosController : ControllerBase 5、实例上使用注解 …

Parade Series - RTSP - Web

Cron Startup Scripts └─ lt-init.cmd├─ lt-server.cmd│ └─ lt-rtsp-proxy-server.cmd│ └─ lt-rtsp-proxy-agent.cmd└─ lt-push.cmd└─ lt-rtsp-cam-daemon.cmd└─ lt-rtsp-cam-worker.cmdlt-init.cmd :: :: PLEASE DO NOT EDIT THIS FILE :: ECHO OFF…

使用Python的pygame库实现下雪的效果

使用Python的pygame库实现下雪的效果 关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 先给出效果图&#xff1a; 源码如下&#xff1a; import pygame import random# 初始化pygame pygame.init()# 设置屏幕尺寸 width…

【办公类-21-03】20240119 提取不连续的男女学号 set()和list法

背景需求&#xff1a;了解班级幼儿性别比例 查看点名册&#xff0c;发现中4班最初的学号是按照先男后女的方式排列&#xff0c;但是随着幼儿转出&#xff0c;空出一些学号&#xff0c;于是新插班的孩子就插入空的学号&#xff0c;空格插完了&#xff0c;就排在学号尾部。 我想…

「优选算法刷题」:盛最多水的容器

一、题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容器…