ver. 0.02

RPN による LaTeX 数式エディタ

〈English〉

(スタックは空です)
ソース プレビュー

このページを使って、複雑な LaTeX の数式を容易に編集することができる。

デモ

[Page Top]

イントロダクション

[Page Top]

表示モードには「プレビュー」と「ソース」がある。まず、ラジオボタンで「プレビュー」を選択しておこう。

ためしに  1⏎-x⏎  と上のテキストボックスに打ち込んでみよう(⏎はエンターキーを押すことを表す)。

スタックに 1 と -x が積み込まれたはずだ。テキストボックスに入力された文字列は、原則としてそのままスタックに詰み込まれるのである。

ここで続けて、frac⏎ と入力してみよう。

スタックから 1 と -x が消え、代わりにに   \(\small\displaystyle\frac{1}{-x}\)   と表示されるはずだ.

frac という文字列はコマンドとして定義されているので、文字列として積み込まれるのではなく、コマンドとして機能したのである。

いまの例では 1 と -x を引数にして frac コマンドが実行され、その結果できあがった   \(\small\displaystyle\frac{1}{-x}\)   があらたにスタックに積み込まれた。なお、このように引数を先に入力するのが RPN の特徴である。

続けて  3⏎-⏎  と打つと、今度は  \(\small\displaystyle\frac{1}{-x}-3\)  になる。

ここで、ラジオボタンの「ソース」を押して、表示をソース・モードに変更してみよう。

スタックの表示が \frac{1}{-x}-3 のように変わったはずだ。これを LaTeX のソース・ファイルにコピペすれば、万事めでたしだ。

このゲームのルールは簡単だ:

(1) なんであれ、テキストボックスに入力した文字列はスタックに積み込まれる.
(2) 積み込まれた文字列がコマンドならば、その種類に応じて決まった数のスタックの階層を消費して、その結果がまたスタックに積まれる.
(3) (1)に戻る.

遊んでみる前に覚えておくと便利なコマンドを紹介しよう。undo(取り消し/やり直し)、clear(スタックを空に)、drop(スタックを一つ消去)、pop(スタック 1 を消去し、その内容をテキストボックスにコピー)、join(文字列を連結する)。

[Page Top]

a⏎b⏎join⏎

\[ab\]

a⏎b⏎swap⏎join⏎

\[ba\]

ab⏎ba⏎=⏎

\[ab=ba\]

@a⏎@b⏎+⏎()⏎sin⏎

\[\sin(\alpha+\beta)\]

1⏎2⏎frac⏎()⏎leftright⏎2⏎^⏎

\[\left(\frac{1}{2}\right)^{2}\]

x⏎sum⏎x=1⏎_⏎10⏎^⏎

\[\sum^{10}_{x=1} x\]

1⏎2⏎3⏎4⏎5⏎6⏎array2x3⏎

\[\begin{array}{ccc} 1&2&3\\ 4&5&6 \end{array} \]

f(x)⏎1⏎2@p@s^2⏎sqrt⏎frac⏎x-@m⏎()⏎2⏎^⏎
2@s^2⏎frac⏎+-⏎()⏎leftright⏎exp⏎join⏎=⏎

\[f(x)=\frac{1}{\sqrt{2\pi \sigma ^2}}\exp \left(-\frac{(x-\mu )^{2}}{2\sigma ^2}\right)\]

コマンド

[Page Top]

コマンドは、それだけで入力したときにだけ働く。そうでない場合は、文字列の一部として扱われる。たとえば、 - はコマンドだが、-x はコマンドではない.

多くのコマンドが LaTeX のコマンド名と同じ名前を持っている。がだし、頭に \ がついていない。たとえば, div コマンドは、レベル 2 に入っているテキストとレベル 1 に入っているテキストを \div を使ってつなぐ. 消費される階層数はコマンドによって異なるが、「sin は 1 つ消費するだろう」とか「div は 2 つ消費するだろう」という予想するのは難しくないだろう。こうしたコマンドのほかに、スタック自身を操作したり、コマンドを繰り返したり、マクロを作ったりするようなコマンドがある。

入力テキスト頭の"(ダブルクォーテーションマーク) は、スタックに積まれるときに取り去られる。これを使ってコマンド名をエスケープできる。たとえば frac をエスケープすると "frac である. ただし、エスケープしなくてはならないのは、コマンド名として定義れてている文字列だけで、その他の文字列はエスケープするには及ばない。とくに、\ で始まる文字列はほとんどがコマンド名ではないから、ほとんどの場合エスケープしなくてよい.

このドキュメントで、コマンド名に色たついているところがある。関係する LaTeX コマンドが、AMS パッケージを必要とするとか、あるいは、Plain TeX では使えないということを表している。

スタックの操作

[Page Top]

undo 最後の操作をキャンセルして、スタックを元の状態に復帰させる.

drop\(N\) 浅いほうから N 個のレベルを削除. (デフォルトは \(N\)=1.)

pop レベル 1 を入力ボックスにコピーしてから削除する.

clear スタックを空にする.

nip レベル 1 を除いてスタックを空にする.

swap レベル 1 と 2 を交換する.

dup\(N\) レベル 1 から レベル N までを複製する。(デフォルトは \(N\)=1)

pick\(N\) レベル \(N\) をコピーして、それを新たに積み込む. (デフォルトは \(N\)=3.)

unpick\(N\) レベル N+1 の中身を レベル 1 の中身で置き換えて、レベル 1 は削除する. (デフォルトは \(N\)=3.)

roll\(N\) レベル \(N\) の中身をレベル 1 に移動し、もともとレベル 1 にあったものはレベル 2 に移動し、とやっていって、レベル \((N-1)\) にあったものをレベル \(N\) に移動するところまでやる。つまり、(レベル1 レベル2 ... レベルN) という循環置換を行う.

rolld\(N\) レベル 1 の中身をレベル \(N\) に移動し、もともとレベル \(N\) にあったものはレベル \(N-1\) に移動し、とやっていって、レベル 2 にあったものをレベル 1 に移動するところまでやる。つまり、(レベルN レベルN-1 ... レベル1) という循環置換を行う.

二項演算子 (クラス 2)

[Page Top]

に挙げたコマンドは、 Level 2 と Level 1 をそれぞれの演算子でつなぐ。たとえば, 1⏎2⏎+⏎1+2 つまり, \(1+2\) を得る. レベル 1 にあるものの符号を変えたいならば、 を参照。

符号を変えるためにコマンドは 5 つある。以下にはその 5 つを示す。また、= コマンドはレベル 1 にあるテキストの先頭に = を挿入するものである。

次の表にあるコマンドは、コマンド名の頭に \ をつけたものをはさんで、レベル 2 と レベル 1 を結合する。. たとえば, 1⏎2⏎pm⏎1\pm 2 つま \(1\pm 2\) を得る.

関係記号 (クラス 3)

[Page Top]

次の表にあるコマンドは、コマンド名と同じ文字をはさんで、レベル 1 とレベル 2 を結合する. たとえば, x⏎y⏎<⏎x<y つまり x<y を得る.

次の表にあるコマンドは、コマンド名に \ をつけたものをはさんで、レベル 1 とレベル 2 を結合する。たとえば, 1⏎2⏎le1\le 2 つまり \(1\le 2\) を得る.

次の表にあるコマンドは、レベル 2 とレベル 1 を、それぞれのコマンド名が示す LaTeX のシンボルによって連結する.たとえば, A⏎B⏎rightarrow⏎A\rightarrow B つまり.,\(A\rightarrow B\) を得る. これらのコマンドのうち、 ->, -->, =>... は別名である。これらの別名は、スタックに積まれるときに正式なコマンド名に置き換えられる。たとえば A⏎B⏎rightarrow⏎ とタイプする代わりに A⏎B⏎->⏎ することができる.

大型演算子 (クラス 1)

[Page Top]

に挙げたコマンドは、LaTeX の大型演算子のためのものである. これらはすべてスタックから 1 つのレベルを消費する。\(\sum\limits_{k=1}^{10}\) or \(\lim\limits_{x\to \infty}\) などは、多くの場合上または/および下に添字を持つが、この例外ではない。たとえば x⏎sum⏎, は \sum x. になるので、上/下の添字は別のコマンドたちによって与えることになる。つまり _^ である。たとえば x⏎sum⏎x=1⏎_⏎10⏎^⏎ とタイプして \sum_{x=1}^{10} x を得るといった具合だ. _^ がこのように機能するのは、じつはそれらのコマンドにおいては例外的などうさ である。というのは、通常それらのコマンドは、レベル 1 にあるテキストの末尾に添字を付加するものだからである. _^ に、こうした例外的動作を引き起こさせるコマンドは、 sin, cos, tan, int, oint, sum, prod, coprod, lim, varliminf, varlimsup, および log である.

に挙げたコマンドは、 と同じで LaTeX の大型演算子のためのものであるが, それとは違い、 これらのシンボルのより小さなバージョン()のためのコマンドと同じで 2 つのレベルを消費する。.

分数とルート

[Page Top]

LaTeX の \sqrt のためには、2 つのコマンドが用意されている。一つは平方根用の sqrt で、1 つのレベルを消費する。たとえば、 7⏎sqrt⏎\sqrt{7} を得る. もう一つは 3 以上の累乗根用で sqrtn である。これは 2 つのレベルを消費する。たとえば、 7⏎3⏎sqrtn によって \sqrt[3]7 つまり, \(\sqrt[3]{7}\) を得る。

区切記号と括弧

[Page Top]

に示したコマンドは、レベル 2 とレベル 1 をそれぞれの区切り記号で区切って連結する. たとえば, a⏎b⏎|⏎a|b を得る.

[ノート] The TeX Book,p.359, には 24 個の区切記号が定義されているが、このアプリケーションでは、それらを区切り記号と括弧に分けて、別のやり方で取り扱っている。.

にあるコマンドは、レベル 1 にあるテキストの末尾から区切り記号を探していき、それを満つけるとそれぞれのコマンドをその前に挿入する. もし、その区切り記号がすでに にあるコマンドで修飾されていた場合は, それを飛ばして次の区切り記号に作用する。

たとえば、レベル 1 が a | b | c となっていたときに bigm⏎ と打鍵すると a | b \bigm| c すなわち   \(a | b \bigm| c\) を得る.

は、レベル 1 にあるテキストを、それぞれの括弧で囲む. たとえば a⏎()⏎(a) を得る. 開き括弧と閉じ括弧の組み合わせは自由で、   \{.(][\} ...といったものもコマンドとして使用できる。

に挙げたコマンドは、レベル 1 全体を囲んでいる括弧()の大きさを変更するものである。.

For example (\sqrt{x})⏎leftright⏎ gives \left(\sqrt{x}\right)  i.e.,  \(\left(\sqrt{x}\right)\).

[ノート] "The plain TEX macros \bigl, \bigr, \bigm, and \big all produce identical delimiters; the only difference between them is that they may lead to different spacing, because they make the delimiter into different types of atoms: \bigl produces an Open atom, \bigr a Close, \bigm a Rel, and \big an Ord. " p.171)

その他のシンボル

[Page Top]

にあるコマンドは、それぞれのシンボルをレベル 1 にあるテキストの先頭に挿入する。たとえば、 x⏎forall\forall x つまり, \(\forall x\) を得る.

[Note] LaTeX 内では、 にあるコマンドはそれぞれ別のクラス、つまりクラス 1 とクラス 0 に属している。

添字

[Page Top]

にあるコマンドは、レベル 1 から取り出した値をレベル 2 に添字として付加する。たとえば x⏎1⏎_⏎x_{1}, つまり \(x_{1}\)を得る。また、x⏎2⏎^⏎x^{2}, つまり, \(x^{2}\) を得る.

これらのコマンドは _xxx や ^xxx をレベル 2 の末尾に加えるものであるが、特別なケースでは異なった働きをする :

and

に挙げたコマンドは、レベル 1 にあるテキストから得た値を、レベル 2 にあるテキストに左側に位置する添字として付加する。たとえば x⏎1⏎left_⏎{}_{1}x, つまり \({}_{1}x\) を得る。また、x⏎2⏎left^⏎{}^{2}x, つまり, \({}^{2}x\) を得る。

もし、レベル 2 にあるテキストが \sideset で始まっているなら、これらのコマンドは次に示すように、通常とは異なった働きをする.

\sideset は AMS パッケージに含まれるコマンドで、シンボルの左側上下、右側上下に添字を添えるためのものである。sideset コマンドは、この LaTeX コマンドを挿入するためのものである. たとえば、a⏎sideset⏎\sideset{}{}{a} を得る.

LaTeX の \limits コマンドと \nolimits コマンドは、大型演算子()の添字の位置を変更する。. これらの LaTeX コマンドを挿入するために limits コマンドと nolimits コマンドが用意されている。たとえば a⏎sum⏎nolimits⏎b⏎^⏎\sum\nolimits^{b} a を得る。ソースファイル中では \(\sum\nolimits^{b} a) となっている.

アクセントと強調

[Page Top]

Classes

[Page Top]

に示したコマンドは、それぞれに対応した LaTeX コマンドを、レベル 1 のテキスト先頭に挿入する。これらの LaTeX コマンドは、文字や区切りによって作られた部分式が、元々とは異ったクラスに属しているように見せかける。

たとえば abc⏎mathop⏎\mathop{abc} を得る.

\mathop を使った例のひとつは \(\mathop=\limits^{\rm def}\) である. LaTeX では =\limits^{\rm def} から、これを作ることはできない. なぜなら \limits はクラス 1 の文字(大型演算子)に対してしか使えないのに、 = はクラス 2 (関係記号)だからだ。. そこで、\mathop を使って \mathop=\limits^{\rm def} のようにすれば、"=" はまるでクラス 1 に属するように扱われる. つまり "=⏎mathop⏎limits⏎def⏎rm⏎^⏎ と打鍵すればよいわけである.

配列と行列

[Page Top]

は配列および行列を作るコマンドである. これらを作るには、最初にそのメンバーを一つひとつ打ち込んでから、R と C を含んだコマンド名を打つ。ここで、R は行数、C は列数を表す。

For example, 1⏎2⏎3⏎4⏎5⏎6⏎matrix3x2⏎ gives \begin{matrix} 1&2&3\\ 4&5&6 \end{matrix} i.e. \(\begin{matrix} 1&2&3\\ 4&5&6 \end{matrix}\).

式を含む構造

[Page Top]

次の表は、式に構造を与えるためのそれぞれコマンドについて、典型的な使い方をまとめたものである。

Making equation structures

$$, \(\), $$$$, および \[\]  はそれぞれ、 $レベル1$, \(レベル1\), $$レベル1$$, および  \[レベル1\], を得る.

上の表を見るときにおけるルールの一つは NRxC もついていないコマンドは 1 つのレベルを消費するということである. たとえば x=1⏎displaymath\begin{displaymath}x+1\end{displaymath} を与える.

[ノート] このページのリアルタイム・プレビューは $$,\(\),$$$$,math および displaymath についてはうまく働かない.

もう一つのルールは、コマンド名の最後が N で終わっているものは N 個のレベルを消費するということである. (そして、もし N が省略されたときは 2 が使われる.)

例 1:

a=bbb⏎cccc⏎dddd⏎multline3

は次のものを得る。

\begin{multline}a=bbb\\
cccc\\
dddd\end{multline}

すなわち,

\begin{multline}a=bbb\\
cccc\\
dddd\end{multline}

例 2:

x=x⏎y=yyy⏎z=zzzzzz⏎gather3

は次のものを得る。

\begin{gather}x=xx\\
y=yyy\\
z=zzzzzz\end{gather}

すなわち

\[\begin{gather}x=x\\y=yyy\\z=zzzzzz\end{gather}\]

[ノート] このページのリアルタイム・プレビューは行番号の表示をサポートしていない.

shoveleftshoveright は、 multlineNmultline*N の中で使うことができる. これらは 1 つのレベルを消費して、その内容を \shoveleft{}\shoveright{} の中に詰め込む. ( p.5参照).

もし eqnarray&Neqnarray*&N が、 "&" というオプション文字をつけたまま使われると, & が自動的に最初の = の前後に挿入される. もし、 "&" オプションが指定され、しかしながらそのレベルに = がないならば、先頭に & が 2 つ挿入される。たとえば、

aaaaa=bbbbb⏎=cc⏎ddddddddddddddd⏎eqnarray&⏎

は次のようなものを得る。

\begin{eqnarray}aaaaa&=&bbbbb\\
&=&cc\\
&&ddddddddddddddd
\end{eqnarray}

すなわち,

\begin{eqnarray}aaaaa&=&bbbbb\\&=&cc\\&&ddddddddddddddd\end{eqnarray}

split&N といコマンドは、上の表には入っていない。これは、それが数式環境を作らないからである。( p.5 参照).

もし split&N が "&" というオプション文字をつけたまま使われるなら, & が最初の = の前に挿入される. "&" オプションがあるのに = がないというレベルについては、一つの & がテキストの先頭に挿入される。次の例は, 2 つの数式を split で囲み、それをさらに gahter でまとめている.

a=bbb⏎cccccc⏎split&⏎ddd=e⏎fff⏎split&gather


\begin{gather}\begin{split}a&=bbb\\
&cccccc\end{split}\\
\begin{split}ddd&=e\\
&fff\end{split}\end{gather}

を得る。すなわち,

\begin{gather}\begin{split}a&=bbb\\&cccccc\end{split}\\
\begin{split}ddd&=e\\&fff\end{split}\end{gather}

において、コマンド名が RxC で終わっているものは、\(R \times C\) 個のレベルを消費する。. (R は行数を C は列数を表す).

もし "&" オプションが省略されないなら、 align&CxR, は各レベルの最初の = の前に自動的に縦の位置を揃えるための & を挿入する. もし "&" オプションがあるのに = がないならば、 & が 1 つだけテキストの先頭に挿入される. これらのことをした後で、このコマンドは \(R\) 個のレベルをスタックから集めてきて、それを区切りを表す "&" で結合し、さらにそれを \(C\) 個集めて \\ で結合する.

たとえば、,

a=b⏎c=d⏎e=f⏎g=h⏎xxxxxx⏎yyyyyy⏎align&3x2

は、次のものを得る。

\begin{align}a&=b&c&=d\\
e&=f&g&=h\\
&xxxxxx&&yyyyyy\end{align}

すなわち,

\begin{align}a&=b&c&=d\\ e&=f&g&=h\\ &xxxxxx&&yyyyyy\end{align}

もし、コマンド名中にある "&" が省略され、alignCxR に使われたならば、コラムを縦に揃えるための &s が自動的に挿入されることはない。ただし、行内での区切りを表す &s は自動的に挿入される。

\[ \underbrace{a\mathop\&\limits^\text{alignment point}=b}_\text{column} \mathop\&\limits^\text{delimiter} \underbrace{c\mathop\&\limits^\text{alignment point}=d}_\text{column} \mathop\&\limits^\text{delimiter} \underbrace{e\mathop\&\limits^\text{alignment point}=f}_\text{column} \]

gatheredalignedgatheralign にそっくりであるが、数式環境を作り出さない.

nonumber⏎ と打鍵すると \nonumber がレベル 1 の末尾挿入される。\notag も同様である.

a⏎tag⏎\tag{a} をテキストの最後に挿入する。ただし、 \\ がある場合は、その前に挿入される。

a⏎lefteqn30pt⏎\lefteqn{a}\hspace{30pt} をテキストの最後に追加する。もし可能ならば、文末の \\ の直前に挿入する。

[ノート] このページのリアルタイム・プレビューは、式番号ならびにタグを取り扱うことができない。

特定の LaTeX コマンドとの結び付きを持たないコマンド

[Page Top]

にあるコマンドは、特定の LaTeX コマンドのためにあるものではない, いわば、コマンドのためのコマンドというようなものだ。たとえば, もしあなたがレベル 1 にあるテキスト全体を \begin{xxx}\end{xxx} で囲みたいのならば, xxx⏎env⏎ のようにタイプすればよい。また、 \xxx{the text in Level 1} のようなものがほしければ、xxx⏎\{}⏎ とすればよい.

にあるコマンドは、一般的な編集に用いるものである。ここで N は 1,2,3,... を示している。

Ntimes:other-command other-command で与えられるコマンドを N 回繰り返して実行する.

例 1: 2times:a⏎ push a 2 times.

例 2: 1⏎2⏎3⏎2times:+⏎ gives 1+2+3.

例 3: 1⏎2⏎3⏎2times:<<<swap%join>>>⏎ gives 321. (See .)

例 4: 2times:3times:a⏎ push a 6 times.

短縮形

[Page Top]

コマンドの短縮形は @ で始まる. これは、テキストが入力されるとすぐに展開される。入力される他のテキストの一部として使われた場合でも、展開される。たとえば @a+@b⏎\alpha +\beta になる.

は、ギリシャ文字の短縮形である。また、 には、例外的に @ で始まらない短縮形が含まれている.

マクロ

[Page Top]

マクロは <<<%で区切られた1つ以上の文字列 >>>. 空白文字は特別な意味を持たない.

マクロは無名コマンドとして用いることができる。

Example 1:
<<<\triangle %swap%join>>> ("\triangle" の後にホワイトスペースが 1 つ入っていることに注意)
これは、レベル 1 にあるテキスト \(\triangle\) を挿入するためのマクロである。
ABC⏎<<<\triangle% swap join>>>⏎
will gives \triangle ABC i.e.,\(\triangle ABC\)

マクロに名前をつけ、以後名前によってそれを呼び出せるようにするとよい. 参照.

collectfromMtoN は もし \(M \le N\) ならばレベル M からレベル N 、もしor\(N < M\) ならばレベル N からレベル M までを % をはさんでつなげ、それにマクロの体裁を与えたうえで、スタックに積み込む.

たとえば, a⏎b⏎c⏎d⏎collectfrom3to1⏎ は次を得る。 <<<b%c%d>>>.

文字列、コマンド、マクロに名前をつける

[Page Top]

テキストは、それがただの文字列であるにせよ、コマンドであるにせよ、マクロであるにせよ、好きな名前をつけることができるそのためには、名前をつける対象となるテキストをレベル 2 に置き、名前をレベル 1 に置いたうえで name⏎sto⏎ のように打鍵する。 そうすれば、以後その名前を打鍵することにより、それらのテキストをスタックに積み込むことができる。(つまり、それがコマンドやマクロならば機能する)。この名前に対する文字列の割り当ては、このページを一度離れてから戻ってきても、保持される。(これは、ブラウザの localStorage を使っているので、外部のサーバにデータが送られるということはない)

名前に対する値の割り当てを削除するには、purge コマンドを "name⏎purge⏎ のように使うか, purgeall で他のすべての割り当てとともに削除する.

例 1: ひとたび 3.14⏎pi⏎sto⏎ とタイプすれば, 以後たとえば pi⏎R^2⏎tims⏎ のように打鍵すると 3.14\times R^2 を得る. つまり, \(3.14\times R^2\).

例 2: ひとたび "overrightarrow⏎ora⏎sto⏎ と打鍵すれば、AB⏎ora と打てば \overrightarrow{AB} つまり \(\overrightarrow{AB}\) が得られる.

例 3: "<<<\triangle %swap%join>>>⏎tri⏎sto⏎ は、 \(\triangle\) をテキストの前に挿入するマクロを tri という名前に割り当てる. そうすれば ABC⏎tri⏎\triangle ABC つまり, \(\triangle ABC\) を得るようになる. ここで、マクロが " を用いてエスケープされている点に注意されたい. ( 参照.)

もし、あなたがある名前に割り当てられている値がコマンドやマクロであるとき、それを機能させずにただスタックに積み込みたいのなら、 getdef コマンドを用いるとよい. このコマンドはレベル 1 にある名前を読み込み、それが示すテキストをスタックに積み込む. たとえば, 以前に "<<<swap%join>>>⏎sj⏎sto⏎, と打ったなら、"sj⏎getdef⏎ と打つことにより、このマクロを起動することなく <<<swap%join>>> をレベル 1 に得る.

すべてのスタックをまとめ名前をつけて保存するには、savestack コマンドを使う. たとえば, oldstack⏎savestack⏎ のようにすると、そのときのスタックを再現するためのマクロが作成され、それが "oldstack" という名前に割り当てられる. この保存されたスタックを再現するには、oldstack と打ち込めばよい.

参考文献

[Page Top]