[latexify]使用`python`生成你的`LaTeX`公式

前段时间看到了站长发布的帖子提到了latexify这个库,最近有点兴趣研究了一下,写下此文作学习笔记吧

首先留一个官方github,官方提供了一个ipynb存储的示例,考虑到翻墙不易这里就留一个那份文件的备份吧。


现在进入正题

安装很简单了,这里直接用pip,需要注意的是latexify库并不支持最新的python版本:

$ pip install latexify-py

官方文档介绍了三种使用方法,分别是latexify.functionlatexify.expressionlatexify.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的形式查看:

math

是不是非常 amazing 呢?

latexify.expression

latexify.expression的使用方法及功能与latexify.function非常像:

@latexify.expression
def root(a, b, c): ...

仍然使用print打印并使用latex显示:

math

相信聪明的你已经看出来这两种方法的区别了,接下来请你试试调用我们的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)

math

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

math

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

math

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

math

use_signature: bool

查看下面的示例,顺带对比一下latexify.functionlatexify.expression,这个参数的作用就显而易见了。

@latexify.function(use_signature=False)
def f(a, b, c):
    return (-b + math.sqrt(b**2 - 4 * a * c)) / (2 * a)

math


更多内容略

160 views
Comments
登录后评论
Sign In
·

郁闷的是后知后觉的我写完这个文章才发现这库一大堆漏洞……

·

其实直接用vscode的md插件很方便,提示什么做的也很全

·

您终于想起来自己在黑客说有个号了...