SymPyのtex→png出力ではまった件

こんなマニアックな記事誰が読むのかわからないが、備忘として残しておくことにする。SymPy無いからねー(うぉうぉう)。

結論

SymPyの以下の箇所(ver. 1.13.2ではsympy/printing/preview.py 349行目)の"dvipng"をkeyとするリストに、"-d"なる要素を追加する。(これで問題ないか不明だし不具合もあるかもしれませんが、自己責任でオナシャス)

defaultoptions = {
                "dvipng": ["-d", "-T", "tight", "-z", "9", "--truecolor"],
                "dvisvgm": ["--no-fonts"],
            }

調べたこと

訳あって、texを入力したら画像を出力するpythonのライブラリがないかなと探していたところ、SymPyにたどり着いた。

シンボリックな計算をサポートした、なかなかにイケてるライブラリっぽい。こちらには、texを入力するとその数式を画像にしてくれる機能があり、

from sympy import symbols, preview
preview(r"$$\frac{\rm d}{{\rm d}t}\mathbf p = \mathbf F$$", output='png', filename="out.png", euler=False)

と書くと以下の画像が生成される(はずなのである)。

しかしどうにも動かない。これは手元のtex環境の問題か?と考え最新のtex liveを再インストールしたのだが、それでも動かない。しょうがないので、SymPyのコードを読むことにした。

SymPyは、内部でdvipngを呼び出している。dviやpdfだと出力可能なのだが、png形式だけ動かないという状況だったことが判明したため、dvipngにあたりをつける。dviファイルをコマンドラインからdvipngで変換しようとすると、

PS> dvipng out.dvi
This is C:\texlive\2024\bin\windows\dvipng.exe 1.17 Copyright 2002-2015, 2019 Jan-Ake Larsson
[1 <raw PostScript

と、謎の状態で止まってしまう。

こういう時は、エラーメッセージで検索が鉄板。すると、githubの質問に行き当たった。

こちら、回答はついていないものの質問者の方がご自分で「デバッグオプション(-d)つけたら動きます」と記載されている。

とりあえず動けばOKの精神で、SymPyのコードを読んでdvipngにオプション渡しているところを見つけ、-dを追記したら晴れて動きましたよ、ということでした。

いいなと思ったら応援しよう!