🐺
Wolfram言語でTeX出力をカスタマイズする
Wolfram言語の実行環境
Wolfram言語の実行環境は主にMathematicaとJupyterの2つがあり、それぞれ以下のような利点があります。
- Mathematica
- インタラクティブな操作ができる (e.g.
Manipulate
,Plot3D
) - コマンド補完などの機能が充実している
- インタラクティブな操作ができる (e.g.
- 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の数式表示もできて便利!
Discussion