以前作ってたEquationPadのAndroid版を作ろうと決意する。

コンセプトはviのような数式エディタ。

デモ動画

https://youtu.be/8W0TbHrf1nE

以前作ってたJS版

以前のJSのバージョンはこれ。 FireFoxでしか動かない上に、最初の使い方がわかりにくいかも。Setと書いてあるボタンの上のテキストフィールドに、

["pow", "e", "a"]

とかをコピペしてsetボタンを押せば、あとはヘルプ見ながらなんとなく使えると思う。

結講実用化出来てて、数式は全部これで書けばいいや、くらいに思ってたが、これはPCのキーボード必須だった。 もうPCなんて使わないのでこれでは駄目だ。

フリックとタッチで書けるように作り直そう。

アプリ全体の話

まずは思った事をなんとなく書き出す。

最初はマッシュルームにしようと思ったが、中で文字入力をしたいので、IMEの再入が起きそう。動くかもしれないがトラブル多そうなので嫌だな。

という事で、クリップボードに入れるアプリで良かろう。 floatingが良い気がするが、最初は単独アプリでもいいかも。使ってる時はnotificationに入れときたいか?

画面としては、テキストの入力が要るので、テキストフィールドがあるのがいいか?

EquationPadのような、意味的なブロック単位の操作はそのまま継承する。

  1. 左右
  2. 広げる
  3. 狭める
  4. コピー、ペースト、

はワンタッチで入力したい。 さらにできたら下付きと上付きはワンタッチで行きたいが…

左右はフリック、広げると狭めるはピンチでいいか。

images/2018-12-06-162055/0000.jpg

こんな感じか?

数式をlatex表記した物をドルドルでくくったものをクリップボードにコピー出来る。

最初のマイルストーン

  • 数式Viewで下付き、上付きの式の表示が出来る
  • 選択、移動、範囲を広げる、縮める、の実装
  • 下付き、上付きの入力
  • replaceに相当する実装
  • コピーとカット
  • latexとの変換とクリップボードのコピー

くらいで使い物になるか。最初はヒット判定はしないで最初の要素をいつも選択する。

年末年始くらいでこの位まで行くといいな。

数式View

ここは結局真面目にやるのが早い気がしているが、そういう事言うと永遠に完成しない。

真面目にやる前提で最初の一歩は狭く、を目標にする。

この手のは最初が気持ちよく動かないと続かないので、web viewは使わない事にする(以前FireFoxとMathMLをスマホで評価して全然使う気にならなかったので)。

API

APIとしては、

  1. クライアントはツリーを構築する
  2. Layoutでサイズとバウンディングボックスが決まる
  3. RenderでViewに書く

という物を作ろう。 ヒット判定は自前でやる。

クライアントがつくるツリーとLayoutで完成するツリーがおなじ物かは良く分からない。 まずは同じで実装してみる。

レイアウトは仮想的なサイズでやって、Viewに書く時この仮想的なサイズをスケールした物で書く。

レポジトリ

以下に置いてある。

https://github.com/karino2/EquationPad

アルファ版

まずはサイコロ本のノートをとるのに使ってみる事が出来る最小セットを目指す。

とりあえず下付き、上付き、関数くらいをサポートして、texがコピー出来れば使い始められると思うので、まずはここまでを目指す。

数式View、最初のゴール

数式Viewの第一歩としては、下付きと上付きの添字が書ける、くらいを目標にする。 ここまででも普段の入力としてそこそこ使うので、使い心地は試せるだろう。

とりあえず上付きと下付きが同時にあると、寄せては書けないくらいの手抜きで行きたい。

最初のマイルストーンに向けてのTODO、実装したものなど

実装したいもの

全部終わった!アルファ版完成!

実装した

  • ツリーのレイアウト
  • render
  • 選択
  • replace
  • Subscript
  • latexの出力
  • クリップボードへのコピー
  • 指数乗
  • 関数

数式テスト

\[{ { f(x)}_n}^n\] \[{ x_n}^2\] \[\lambda_n\] \[b_{ { i j { o_t} }}\] \[x = { y({ a_n} \mid b)}\] \[P({ { { X = i}, Y}} \mid { c_t})\]

ほしい物、実装した物

使ってて思った事をとりあえずここに書く。

欲しい

  • 足し算、引き算(掛け算の時のカッコとかが必要になる)
  • 3つ以上の入れ替え(とりあえず回転だけで。SWがそもそもそうあるべき)
  • 履歴(TeXした時を覚える、かな?)
  • 部分コピペ関連
  • TeXからの再開(自分が出力したのだけ)

実装した

  • alpha、lambdaなどのエンティティ解決的なの(正式名称知らん) (とりあえず自分が使う物だけ)
  • 入れ替え
  • products(まだ並べるだけ)
  • widen(products全体をタッチでは選べない為)
  • シンボルを一覧から選ぶ
  • シグマ
  • prod(総乗)
  • 条件付き確率
  • カンマ