TeXの数式アウトラインをPDF経由でSVGファイルに変換

2019-10-25 19:312019-11-27 17:40

TeXの数式を他の場面に使いたい場面がままあります。PowerPointに貼るだとかWebに貼るだとか、後はちょっとしたグラフの軸ラベルなどに使いたい、眺めたいなど。画像だとかいろいろ形式あるなかでもSVG(Scalable Vector Graphics)というベクタ形式による数式アウトラインはWebに貼ることが出来る、TeXの数式を最もよく表現できる形式、だと思っている。ということでそのやり方まとめ。

結論から:TeX数式→SVGのやり方

必要なLaTeXパッケージをインストールする。場合によっては必要ないかもしれない。逆にもっと他のパッケージが必要かもしれないので参考まで。

tlmgr install standalone

次の内容の.texファイルを例えばtest.texという名前で保存します。

\documentclass[varwidth,crop]{standalone}
% packages here
\usepackage{amsmath,amssymb,amsfonts}
\begin{document}
$\displaystyle
  % equations here
  \left( \int_0^\infty \frac{\sin x}{\sqrt{x}} dx \right)^2 =
  \sum_{k=0}^\infty \frac{(2k)!}{2^{2k}(k!)^2} \frac{1}{2k+1} =
  \prod_{k=1}^\infty \frac{4k^2}{4k^2 - 1} = \frac{\pi}{2}
$
\end{document}

次のコマンドを実行します。

platex test.tex
dvipdfmx test.dvi
pdftocairo -svg test.pdf test.svg

以上でtest.svgの完成です。2番目のコマンドで一度PDFファイルを経由しているのでおまけでtest.pdfも生成されています。TeXLive2019を普通にインストールした環境で確認済みですが無理な環境もあるかも。パッケージが不足しているなどのエラーは適宜修正しましょう。pdftocairoが無い、などもtlmgrから行けると思います。これをベースにいろいろなパッケージなどを駆使していろんなフォントいろんな種類の数式を吐き出せると思います。

standaloneのオプション

よく見ると生成された数式の上下が切れているということがありました。その場合はborderオプションで余白が指定できました。pt以外の単位での微調整もできそうです。

\documentclass[varwidth,crop,border=1pt]{standalone}

ついでに他にもオプションがありますが組み合わせによっては\begin{equation}などのディスプレイ数式が使えなかったりします。このテンプレの書き方では式番号が右端の微妙な位置に出るので\begin{equation*}とほとんど同じように使える$\displaystyle$を使っています。

生成されたSVGを見てみる

SVGファイルはもし関連付けられたプログラムが無くても実はブラウザのドラックアンドドロップで大抵開けます。そこでFirefoxにできたSVGを開かせてみました。フリーでSVGが開けるソフトウェアは多くないので手軽に中身が見られるのはありがたい。

Firefoxに数式アウトラインのSVGを開かせた結果、300%に拡大 結果はこちら。300%に拡大していますがベクタ形式なのでくっきりしています。

もう一つ、唯一といっていいフリーでSVGを開けるInkscapeで開いてみます。

Inkscapeで数式アウトラインのSVGを開いて編集中

例によってベクタ形式なのでいくら拡大してもきれいです。こちらは見るだけではなく編集もできます。開いた最初はパスがグループ化されていますが解除して一つ一つのパーツを編集することも可能です。画像では積分記号のインテグラルが選択されています。

SVGはWebページにも貼れる

TeXの数式アウトラインSVG

貼り方の問題でサイズがマックスですがこんな感じになります。MathjaxでSVGレンダリングさせる場合と違って、最初からHTMLに書き込まれているのですぐに表示させることが出来ます。そもそもsvgタグはHTML5のなかにちゃんとありますしFirefoxで開けたりWebに貼れるのは当然ですね。例によって画像と違ってくっきりしていますが、こちらはWebページに合わせたサイズ調整が鬼門となります。特に行中数式。Mathjaxはそのへんがいい感じに勝手に動くところがよい。

パワーポイントへの挿入

こちらはPowerPoint2010ではできませんでした。Office365やOffice2019だと出来るようになったんでしょうか。2010ではドラッグ&ドロップしてもSVGファイルはただの拡張子SVGのファイルとしか認識されませんでした。Beamerにするほどでもない数式量が少なめのPowerPointに対してベクタ形式のきれいな数式が挿入出来たらとても良いと思うんですけど。パワポの数式機能は当然NG前提の話です。

もちろん高解像度ラスタ画像にして挿入することは可能ですがそれでは意味がありません。たびたび強調しているようにベクタ形式であることに意味があるのです。ちなみにパワポ2010で扱えるベクタ形式はEMFやらWMFという誰も知らないような形式、記憶が確かならEPSも一応読むけどアンチエイリアスが効いてないのか何なのか汚いです。EMFとWMFの略はそれぞれEnhanced MetafileとWindows Metafileらしく、一応Inkscapeから吐き出せるようです。Inkscapeを通すのはさすがに手数が多すぎますね。

参考ページ