前段时间看到了站长发布的帖子提到了
latexify
这个库,最近有点兴趣研究了一下,写下此文作学习笔记吧
首先留一个官方github,官方提供了一个ipynb
存储的示例,考虑到翻墙不易这里就留一个那份文件的备份吧。
现在进入正题
安装很简单了,这里直接用pip
,需要注意的是latexify
库并不支持最新的python
版本:
$ pip install latexify-py
官方文档介绍了三种使用方法,分别是latexify.function
,latexify.expression
和latexify.get_latex
;而在我搜到的大量中文教程上还都提到了方法latexify.with_latex
,以下将逐一介绍。不过无论哪一种方法,导包都是必不可少的:
import math
import latexify
latexify.function
我们需要以装饰器的形式使用latexify.function
,比如对于一个简单的一元二次求根函数:
def root(a, b, c):
return (-b + math.sqrt(b**2 - 4 * a * c)) / (2 * a)
我们只需要将其装饰为:
@latexify.function
def root(a, b, c): ...
接下来print(root)
打印我们的函数:
\mathrm{root}(a, b, c) = \frac{-b + \sqrt{b^2 - 4ac}}{2a}
让我们以latex
的形式查看:
是不是非常 amazing 呢?
latexify.expression
latexify.expression
的使用方法及功能与latexify.function
非常像:
@latexify.expression
def root(a, b, c): ...
仍然使用print
打印并使用latex
显示:
相信聪明的你已经看出来这两种方法的区别了,接下来请你试试调用我们的root
函数看看和装饰前有没有什么区别吧~~(显然是没有的)~~。
latexify.get_latex
如果你不喜欢装饰器的写法~~(怎么可能有人不喜欢装饰器)~~,大可以以函数调用的方式获得latex
字符串,下面的代码将达到与@latexify.function
一致的效果:
def root(a, b, c): ...
print(latexify.get_latex(root))
latexify.with_latex
这个装饰器的使用方法与效果似乎与latexify.function
一致,我还没有来得及深究,如果有清楚的同志还请评论区补充……
latexify
参数
接下来介绍一些控制最终输出的参数
identifiers: dict[str, str]
上述参数用于控制一些简单的变量或者函数名的替换
identifiers = {
"my_function": "f",
"my_inner_function": "g",
"my_argument": "x",
}
@latexify.function(identifiers=identifiers)
def my_function(my_argument):
return my_inner_function(my_argument)
reduce_assignments: bool
这个参数设为True
将把return
语句中的所有变量与函数内赋值的变量进行组合,以下是示例:
@latexify.function(reduce_assignments=True)
def f(a, b, c):
delta = b**2 - 4 * a * c
numerator = -b + sqrt(delta)
denominator = 2 * a
return numerator / denominator
False
的结果显而易见,此处略。
use_math_symbols: bool
该参数控制是否自动将具有符号名称的变量转换为LaTeX符号。
@latexify.function(use_math_symbols=True)
def greek(alpha, beta, gamma, Omega):
return alpha * beta + math.gamma(gamma) + Omega
use_set_symbols: bool
该参数控制是否使用二进制运算符进行集合运算。
@latexify.function(use_set_symbols=True)
def f(x, y):
return x & y, x | y, x - y, x ^ y, x < y, x <= y, x > y, x >= y
use_signature: bool
查看下面的示例,顺带对比一下latexify.function
和latexify.expression
,这个参数的作用就显而易见了。
@latexify.function(use_signature=False)
def f(a, b, c):
return (-b + math.sqrt(b**2 - 4 * a * c)) / (2 * a)
更多内容略