🐺

Wolfram言語でTeX出力をカスタマイズする

2022/05/08に公開

Wolfram言語の実行環境

Wolfram言語の実行環境は主にMathematicaとJupyterの2つがあり、それぞれ以下のような利点があります。

  • Mathematica
    • インタラクティブな操作ができる (e.g. Manipulate, Plot3D)
    • コマンド補完などの機能が充実している
  • Jupyter notebook
    • 無料
    • 通常の文字列としてセルに入力できる[1]
    • Jupyterなのでmarkdownで文章が書ける

本記事では主にJupyter notebookを使用しますが、どちらの環境でも適用できます。

Wolfram Engine + Jupyter周りのインストール方法などについては「Wolfram Engine を導入して Jupyter-notebook で動かすまで」などを参照ください。

標準的なTeX出力

Wolfram言語にはTeXFormという関数が備わっています。ToStringすれば文字列に変換ができ、CopyToClipboardでクリップボードにコピーすることもできます。

しかし、a₃などのUnicode文字を使った場合は正しく表示されないことがあります。

悲しいですね🥺

TeX出力をカスタマイズする

以下の関数GenerateTeXを定義することで、上記の問題を解決できます。

GenerateTeX[expr_, texrules_] := Block[
    {n, symbols, texts, rules1, rules2},
    n=Length[texrules];
    symbols = Table[Symbol["$generatetex"<>ToString[i]], {i,1,n}];
    texts = Table["\\text{$\\$$generatetex"<>ToString[i]<>"}", {i,1,n}];
    rules1 = Table[Rule[texrules[[i]][[1]], symbols[[i]]], {i,n}];
    rules2 = Table[Rule[texts[[i]], "{"<>texrules[[i]][[2]]<>"}"], {i,n}];
    StringReplace[ToString[TeXForm[expr /. rules1]], rules2]
]

使い方の例:

GenerateTeX[a₃+1,{a₃->"a_3"}]

上記のようにGenerateTeX[(式),{(変換前記号)->(変換後TeX文字列)}]の形で呼び出せばOKです。

Jupyter notebookではMathJaxの数式表示もできて便利!

脚注
  1. Mathematicaでは、Ctrl+_で下付き文字が使えますが、これはSubscriptを内部的に呼び出すようになっています。これは便利ではあるのですが、Unicodeのa₃とは異なるため紛らわしいです。 ↩︎

GitHubで編集を提案

Discussion