Python数式表示、LaTeX風表現と便利ツール徹底比較

まずはこのステップを実行してみて - Pythonで数式をLaTeX風に美しく表現・共有するための具体的な工夫

  1. 計算式を作成したら3分以内にhandcalcsやlatexify-pyで自動的にLaTeX化してみる

    手作業より圧倒的に速く、コードと公式の照合ミスも減る

  2. Jupyter Notebook内では週1回、Markdownセル+MathJax記法で数式を書き直す

    ノートが可視化しやすくなり、他人への説明力も格段アップ

  3. "グラフ表示以外"にもmatplotlibのtext機能を使い、10行以下の短い数式は直接埋め込む

    "図+公式"セット提示で理解促進できるから

  4. (Web公開時) Flask×KaTeX連携例を最低1つ試作しておく

    "HTMLページ上でも計算根拠が崩れず再利用可"になる

Pythonで数式を綺麗に見せるって案外むずい?

Pythonって、ほんとに色々できるよね。量子システムのシミュレーションとか、コールセンターのトラフィック分析とか…うーん、実は他にもあるけどまあ、とにかく幅広い。でもさ、なんか大事なことをつい忘れちゃう瞬間があって、それが「数学的フォーマット」の話。えっと、ごめん、ちょっと話ずれるけど、この前友人とカフェで数式書いてて思ったんだ。「Erlang C」みたいな複雑なやつを誰かと共有したことある人なら、“ちゃんとした”数式フォーマットの大切さ、たぶん痛感してるよね。そもそも計算結果だけ知りたいわけじゃないんだよね。説明もしなくちゃいけないし、人に見せたり発表する時にはやっぱり見映えというか…整った形で提示したいな、と心の中でため息混じりに考えてしまう。ま、いいか。また元の話に戻るけど、そういう理由で綺麗な数式表現は軽視できないよ、本当に。

LaTeX風な数式、でもPythonには…ない。どうする?

数式がちゃんと読めるかどうかって、時々すごく大事になるんだよね。まあ、数学とか物理の話になると、特にさ。あ、そういえば、この前Pythonで数式を描く必要が出てきて…でも、その話は置いといて。今回はLaTeXみたいな感じで数式を綺麗に整形できるPythonのライブラリについて、それぞれどこが得意とか微妙だとか、そういうところを書いていこうと思う。あとErlang Cの公式もどうやって整えるか見てみたいし。…けっこう地味だけど、大事なんだよね。

## LaTeXスタイルの数学表記について

LaTeXっていうのは、学術論文とか専門書でよく使われている組版システムなんだよ。最大の特徴は、美しい数式レイアウトが簡単にできることかな—これは本当に助かる。でもね、たまにコンパイルエラーとかで詰まったりもするし…あれ?いや、それは今関係ないか。えっと、とにかくLaTeXのおかげで、複雑な数学表現もちゃんと伝わる形にできるというわけ。でも正直言うと、一度使い方忘れるとすぐググらないとダメになるんだよなぁ…。

LaTeX風な数式、でもPythonには…ない。どうする?

Matplotlibで数式表示。グラフ以外も意外と便利

Pythonは、正直言ってLaTeXみたいな数式表現を標準でサポートしてないんだよね。あれ、なんでだったっけ…いや、そういう仕様なのか。でもまあ、やろうと思えばサードパーティ製のライブラリを使えば何とかなることもある。こういう時に限って色々調べる羽目になるのが常だけどさ。

## 1. Matplotlib
Matplotlibといえばデータの可視化で有名なんだけど、それだけじゃなくてタイトルとかラベル、注釈とかにも数式テキストを表示できるんだよ。ま、こんな話してても、お腹すいたな……でも本題に戻ると、この機能はグラフ作成時に地味に助かるし、特に複雑な式を書くときには重宝するはず。たぶん、多くの人がまだ試したことないかもしれないけど、一度触れてみたらその便利さに気づくかもね。

数式を書き出すならSymPy、コマンドラインからの眺め方

LaTeXスタイルの数式は、まあ、簡単な数式しかできないけど…一応パーサーが入ってるらしい。ドル記号で囲めばいいんだよね……たぶん。うーん、毎回思うけどドル記号ってちょっと紛らわしい気もする。でも慣れれば平気か。

<pre><code class="language-python">python
import matplotlib.pyplot as plt
css
plt.figure(figsize=(12, 6), dpi=150)
plt.text(0.1, 0.5, r'$P_w = \frac{\frac{A^N}{N!} \cdot \frac{N}{N - A}}{\left( \sum_{i=0}^{N-1} \frac{A^i}{i!} \right) + \frac{A^N}{N!} \cdot \frac{N}{N - A}

数式を書き出すならSymPy、コマンドラインからの眺め方

Jupyter×MathJax、美しいノートと授業向け小技

数式を整形するには、ASCII、Unicode、それからLaTeXとか、まあ使い方はいろいろあるよね。えっと…たとえばこんなふうに書いてみる。ああ、さっきコーヒーこぼしたけど、とりあえず進めるか。

python  
from sympy import symbols, factorial, Sum, Eq, pprint
from sympy.abc import A, N, i


numerator = (A**N / factorial(N)) * (N / (N - A))
denominator = Sum(A**i / factorial(i), (i, 0, N-1)) + numerator
formula = Eq(symbols('P_w'), numerator / denominator)

yaml
pprint(formula, use_unicode=True)

…なんだか突然お腹空いたような気がしてきた。でもまあ、この方法は便利なのかな?いや、本題に戻ろう。

**適している用途:**   
- コマンドラインで調べ物するとき(意外と便利)。
- 計算の途中経過として数式を出したい場合とか。
- それにシンプルだけど `latex(expr)` でLaTeXエクスポートもできてしまうんだよね、不思議と。


**そんなに向いてない場面:**   
- グラフィック画像の描画にはちょっと…。
- GUI上でサポートなし表示は微妙かも?そうでもない?いややっぱり扱いづらい気がする。
- レイアウト細かく制御したかったら他手段要検討だと思うし。


ノートブックやWebアプリでエクスポートしたかったら `latex(formula)` を使ってMathJax用LaTeXコードを吐けるんだった。でもたまに変換忘れたり…あるある。それはさておき例を書く:

python  
from sympy import latex
print(latex(formula))


これ実行すれば――

<pre><code class="language-css">typescript
P_{w} = \frac{\frac{A^{N}}{N!} \cdot \frac{N}{N - A}}{\sum_{i=0}^{N - 1} \frac{A^{i}}{i!} + \frac{A^{N}}{N!} \cdot \frac{N}{N - A

記号ばっかりの出力じゃ満足できない時:display活用法

美しい数学出力――まあ、これって案外簡単じゃない。テキストとコード、方程式が一緒に並んで表示できる環境って、やっぱり便利だと思う。ああ、でもさ、ブラウザ上だけでしか使えないんだよね。静的なレポートを作成する場合は、エクスポートしない限り本当に向かないこともあるみたい。えっと…ちょっと話逸れるけど、自分も何度か困った覚えがあるなぁ。ま、それはそれとして。

**プロのヒント:**
生の数式を自分で直接挿入したい時にはこんな感じ、と言われている:

python
from IPython.display import Math
Math(r"P_w = \frac{\frac{A^N}{N!} \cdot \frac{N}{N - A}}{\left( \sum_{i=0}^{N-1} \frac{A^i}{i!} \right) + \frac{A^N}{N!} \cdot \frac{N}{N - A}}")


Manimという名前を耳にしたことはある?Grant Sanderson(3Blue1Brown)の手による数学アニメーションエンジンらしい。まあ正直言ってしまえば、素早いレンダリング目的では設計されていなくて――動画作成用なんだ。でも、そのアウトプットが専門的でプレゼンにも向いているという意見もちらほら聞くし、本当なのかな?いや、きっとそうなんだろう。一例としてはこう:

python
import os
os.environ["PATH"] += r";C:\Users\12283\AppData\Local\Programs\MiKTeX\miktex\bin\x64"


python
from manim import Scene, MathTex


python
class ErlangC(Scene):
def construct(self):
formula = MathTex(
r"P_w = \frac{\frac{A^N}{N!} \cdot \frac{N}{N - A}}{\left( \sum_{i=0}^{N-1} \frac{A^i}{i!} \right) + \frac{A^N}{N!} \cdot \frac{N}{N - A}}"
)
self.add(formula)
self.wait()


ちなみにパスをハードコーディングしている理由だけど……_**basic-miktex-24. をダウンロードしても必要だったから仕方なくそうしてるんだとか。でもまあ、このあたり本当に面倒というか、不親切な仕様だよねぇ…。さて、本題に戻ろうか。

記号ばっかりの出力じゃ満足できない時:display活用法

動画にも公式を!Manimで動くフォーミュラ作成記録

1-x64**_ をシステムパスに入れても、うーん、なんかWindowsノートで VS Code/Python から「ファイルが足りない」って怒られたんだよね。まあ、こっちの使い道としてはアニメーションとか教育用コンテンツ作りたい時とか?あと、LaTeXサポートがバッチリだから式をドーンと表示したい人にもいいと思う。タイミングとか効果を微細に調整できるし。でもさぁ…いや、ごめんまた話それた。逆にあんまり向いてないのは、こう…インラインで簡単に数式出したいだけの場合とか、テキスト中心でゴリゴリ編集するスタイルだったり、とっさにリアルタイム処理や双方向的なこと求めてる時かな。ま、それぞれ一長一短ってやつ。

あ、それと必要な環境について触れると—これ忘れる人多そうだけど—LaTeXとかFFmpeg、それから他にも色々ツール類インストール必須なのよ。他の選択肢より動作が重くなるケースも正直あるし…。公式ウェブサイトは https://www.manim.community/ だから迷ったら覗いてみて。「数式動画どう作る?」って思ったら、とりあえず下みたいなコマンド叩けばOK:  
manim -pql man.py ErlangC
ちなみに出力例も貼っとく→ https://py-core.com/wp-content/uploads/2025/05/ErlangC.mp4 。動画の最後のフレームを画像(数式)として保存したければこのコマンド:
manim -pql man.py ErlangC - format=png - save_last_frame
—まあ、大体こんな感じになるよ。


さて、「PyScript やWeb統合による KaTeX HTMLコンテンツをPythonで提供」って件についてなんだけど……えっと、注意点が実はいろいろあるので慎重になったほうがいい気がしてきた。また頭整理できたら続き書くわ。

環境構築は一筋縄じゃいかない?LaTeX周りの地味トラブル集

g. えっと、FlaskやFastAPIみたいなフレームワークを使うとき、KaTeXはMathJaxの代替になることもあるんだけど…あ、ちょっと待って。実際に試してみないと何とも言えないけどね。ま、高速なのは確か。でもLaTeXのサポート範囲は正直狭い。あー…でも軽量さ重視ならアリかも。

で、Flaskアプリをセットアップする流れを書くと——あれ?昼ご飯食べたっけ?まあいいや。  
**ファイル構成**
displayformula/
|-- templates/
| |-- index.html
|-- venv/
|-- app.py


app.py:  python
from flask import Flask, render_template


<pre><code class="language-python">app = Flask(__name__)python
@app.route("/")
def index():
return render_template("index.html")
python
if __name__ == "__main__":
app.run(debug=True)
<pre><code>
index. うーん…この辺で一息いれようかな。でもまぁ、とりあえずこれで基本的な構成ができるし、テンプレートいじれば見た目も色々調整できるよ。

環境構築は一筋縄じゃいかない?LaTeX周りの地味トラブル集

Web連携ならKaTeXとFlask、HTMLページに公式を埋め込んでみた話

ここまで読んでくれて、うーん、なんだか不思議な気持ち。ありがとうと言いたいけど、実際この文章が誰かの役に立ったかは…どうなんだろうね。いやでも、きっと何かしらヒントになってくれたらいいなって思う。質問とか、「こんなの知りたい!」みたいなPythonコード例や話題があればさ…えっと、遠慮せずに投げてほしい。返事を書くとき変なタイミングでメールを見失ったりするけど、大抵はちゃんと目を通すつもりだから。でもまあ、そのへん曖昧だけど。あれ? なんだっけ、本筋戻そう。

みんなの考えとか要望が届くとうれしいし、それがモチベーションにもなる…気もする(本当はちょっと疲れてる時もある)。コーディングって楽しいようでいて、ときどき壁にぶつかったりして「あーもう」ってなるよね。でも結局またコードを書いちゃう。不思議だよね。ま、いいか。そのまま楽しんでもらえると幸いです。

まとめ・補足とか感想とか質問いつでも

[Py-Core. com Python Programming]って何だろうね、まあ、Pythonプログラミングの情報とかリソースをまとめてるサイトなんだよ。ああ、そういえばさっき寝ぼけてカップ麺にお湯入れすぎたんだけど…まあそれはどうでもいいか、とにかくこのウェブサイトには初学者から達人まで使えるチュートリアルやサンプルコード、それにガイドも載ってるらしい。

利用者は、自分の今のスキルとか「これ勉強したい!」みたいなニーズに合わせて内容を選べばいいし、ひとまずPythonで何か作りたい時にも役立つんじゃないかな。ま、全部完璧というわけじゃないと思うが…。一瞬関係ない話になるけど、最近雨ばっかりだし気分乗らなくても、小さな一歩なら踏み出せる気がして、それでまた本題へ戻ると、このサイトがちょっとしたヒントになれば嬉しいな、と私は思ったりする。

Related to this topic:

Comments