にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

イオニア数字変換TeXマクロ

イオニア数字ネイティヴではないので、イオニア数字を書く場合にはいちいち調べて書かないといけないのだけれど、実際面倒なので、(La)TeXマクロにしてLaTeXなどで書く際に簡単に変換できるようにしようというのが今回の目的。

イオニア数字というのは、古代ギリシャで使われた数値の書き方であって、ギリシャ文字を使って数値を表現するものである。一般にギリシャ数字とも呼ばれるとのこと。
詳しくはWikipediaなどを参照: ギリシアの数字 - Wikipedia

サンプル

f:id:nixeneko:20170809031334p:plain

コード

Githubに上げた。XeLaTeXでコンパイルできる。マクロの出力結果について網羅的に確認したわけではないので不適切な部分があるかもしれない。
GitHub - nixeneko/ionicnumber: A TeX macro that does a conversion from a number into Ionic numeral system.

使用法

ionicnum.texの中で\ionicnumマクロが定義されている。これを使うには、数字を与えて

\ionicnum{1234}

のようにする。1234の部分は任意の数字が入る。

メモ

イオニア式の記数法には年代や学者等によりいくつかの変種があり、特に10000以上の書き方はさまざまであるらしい。
この実装で用いたものは次のようなものである:

  • 数字にはギリシャ文字の小文字を用いた。
  • 数字はギリシャ文字列の右肩にʹを付けることによって表現した。
  • 6にはスティグマϛを、90のコッパはϟを、900のサンピはϡを用いている。
  • 10000以上はmyriad Μにより、Μの上に一万~一千万の位の数字を書くことによって表現した。
  • 最大で対応している数は一億(100,000,000)であり、ΜΜʹで表す。

The largest number named in Ancient Greek was the myriad myriad (written MM) or hundred million.

https://en.wikipedia.org/wiki/Myriad

実装について

まず、一~千の位の数字を変換することを考える。
これは、元の数をnとすると、各位の数字は

  • 一の位:  \displaystyle n \mod 10
  • 十の位:  \displaystyle \left\lfloor \frac{n}{10} \right\rfloor \mod 10
  • 百の位:  \displaystyle \left\lfloor \frac{n}{100} \right\rfloor \mod 10
  • 千の位:  \displaystyle \left\lfloor \frac{n}{1000} \right\rfloor \mod 10

となる。次にこれを\ifcaseを使ってギリシャ数字の各文字に変換する。


次に一万以上の数値について。
元の数値を10000で割ったものについて、その値をΜの上に積み重ねて表示する。数値の表示は一~千の位の数字に変換するマクロを共用している。
また、このとき、10000がΜとなるように条件分岐を行っている。


一億以上の数に対応するために再帰っぽい感じで書いてしまったのだが、どうせ処理系が 2^{31}-1 = 2147483647までしか対応してないので、ごちゃごちゃするだけであまりメリットなかったように思う。