PythonでLaTeXの数式を出力するライブラリが美しすぎた【latexify】

Python基礎

スポンサーリンク

Pythonは書けるけどLaTeXは難しい・・・そんな方向けのPythonライブラリを紹介します。

概要

公式によると、latexify というライブラリは以下のように紹介されています。

latexify は、Pythonソースコードの断片から、対応する LaTeX 数式にコンパイルする Python パッケージです。

説明だけではイメージが湧かないと思いますので、コード例を見てみましょう。

サンプルコード1

コード

import math
import latexify

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

出力結果

ちなみに、最終行を solve ではなく、print(solve) とするとLaTeX形式で出力されます。

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

サンプルコード2

コード

@latexify.function
def sinc(x):
  if x == 0:
    return 1
  else:
    return math.sin(x) / x
sinc

出力結果

print 文なら以下のように出力されます。

\mathrm{sinc}(x) = \left\{ \begin{array}{ll} 1, & \mathrm{if} \ x = 0 \\ \frac{\sin x}{x}, & \mathrm{otherwise} \end{array} \right.

サンプルコード3

コード

@latexify.expression
def solve(a, b, c):
    return (-b + math.sqrt(b**2 - 4 * a * c)) / (2 * a)

solve

出力結果

print 文なら以下のように出力されます。

\frac{-b + \sqrt{ b^{2} - 4 a c }}{2 a}

サンプルコード4

コード

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)

my_function

出力結果

print 文なら以下のように出力されます。

f(x) = g \mathopen{}\left( x \mathclose{}\right)

サンプルコード5

コード

@latexify.function(reduce_assignments=True)
def f(a, b, c):
    discriminant = b**2 - 4 * a * c
    numerator = -b + math.sqrt(discriminant)
    denominator = 2 * a
    return numerator / denominator

f

出力結果

print 文なら以下のように出力されます。

f(a, b, c) = \frac{-b + \sqrt{ b^{2} - 4 a c }}{2 a}

サンプルコード6

コード

@latexify.function(use_math_symbols=True)
def greek(alpha, beta, gamma, Omega):
  return alpha * beta + math.gamma(gamma) + Omega

greek

出力結果

print 文なら以下のように出力されます。

\mathrm{greek}(\alpha, \beta, \gamma, \Omega) = \alpha \beta + \Gamma \mathopen{}\left( \gamma \mathclose{}\right) + \Omega

サンプルコード7

コード

@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

f

出力結果

print 文なら以下のように出力されます。

f(x, y) = \mathopen{}\left( x \cap y, x \cup y, x \setminus y, x \mathbin{\triangle} y, x \subset y, x \subseteq y, x \supset y, x \supseteq y \mathclose{}\right)

コードはほぼ公式ドキュメンテーションから引用しています。

最近はWeb上で同様のことができるような取り組みもあるみたいなので、そちらを使ってみるのもいいかもしれません。(https://latexify.predicate.jp/

以上です。

【Reference】

https://github.com/google/latexify_py/blob/main/docs/getting_started.md

https://github.com/google/latexify_py/blob/main/docs/parameters.md

Python基礎

Posted by このめ