数式を簡単に表示する方法
おれおれマークダウンで$LaTeX$形式で数式を書くのがめんどくさいです。特に式の変形とかは、似たようなことをコピペして修正して書くのが、なんか無駄な作業のような気がしてつらいです。
とりあえず、$LaTeX$マクロを使えばまだマシになります。例えば、組み合わせとかはいくつかの表記方法があるようで、${}_n\mathrm{C}_r$だったり行列みたいに書いたりします。「やっぱり、こっちがいいな」と思っても、直接書いてしまっていては変更が大変です。この場合はマクロで
$$
\newcommand{\combination}[2]{{}_{#1} \mathrm{C}_{#2}}
$$
$$ \newcommand{\combination}[2]{{}_{#1} \mathrm{C}_{#2}}$$と書いておけば$\combination{n}{r}$
で$\combination{n}{r}$が出ます。意味を書いて、表記法を指定して出力がよさそうです。
しかし、普通のマークダウンだと、ファイルの先頭でマクロを定義して、その後のMathブロックでマクロを使えないんですよね。これが不便なので普通のマークダウンとの互換性は捨てることにしました。プログラムで変換してHTMLを吐き出す方法でやります。となると、別にMarkdownとの互換性を考慮する必要もないので独自フォーマットでよくなるんですよね。
独自フォーマットで良しとすると、一気に自由度が上がりました。自由すぎてなにをしていいのかわかりません。とりあえず、
```exec ruby
a = 100
p a + 50
```
で
150と表示できました。前に書いたPlantUMLを別プロセスで呼ぶコードをコピペしてRubyでevalしただけですけど。
もうちょっと意味のある式だと、
```exec ruby
class Combination
def initialize(n, r)
@n = n
@r = r
end
def print
printf "\\combination{#@n}{#@r}"
end
end
print "$$"
print "(a + b)^4 = "
(0..4).each do |r|
print " + " if r > 0
c = Combination.new(4, r)
c.print
printf "a^#{4 - r}b^#{r}"
end
print "$$"
```
$$(a + b)^4 = \combination{4}{0}a^4b^0 + \combination{4}{1}a^3b^1 + \combination{4}{2}a^2b^2 + \combination{4}{3}a^1b^3 + \combination{4}{4}a^0b^4$$こんな感じでRubyで書いてしまうか、DSLを作るか、全く別の言語を作るかですかね?別の言語ならRubyじゃなくてHaskellとかで書いてもいいし。とりあえずはRubyで限界を感じるか飽きるまではRubyで書いていきますかね?
そして、これを拡張していけば文芸的プログラミングができるんじゃないですかね?
コメント
コメントを投稿