Go to the first, previous, next, last section, table of contents.


憑依モードの基礎

憑依モードに入るには、 任意のバッファで Emacs のポイント(カーソル)を式の上に置き、 M-# e (calc-embedded) を押してください。 注: 他の Calc コマンドとは異なり、 M-# e は Calc のスタックバッファ内では使いません。 どちらかというと、 ユーザーファイルを開いていたりする通常編集バッファ内で使うものです。

Calc はその編集バッファのカーソル位置から前後をスキャンして、 最寄の式デリミタを探します。 いちばんシンプルなデリミタは空行です。 憑依モードが理解するその他のデリミタは次のとおりです。

  1. TeX や LaTeX の数学デリミタである `$ $', `$$ $$', `\[ \]', `\( \)';
  2. `\begin'`\end' ではじまる行
  3. `@' (Texinfo デリミタ) ではじまる行
  4. `.EQ'`.EN' (eqn デリミタ) ではじまる行
  5. ひとつの `%'`.\"' シンボルだけを含む行

ユーザー自身が好みのデリミタを Calc に認識させる方法は、憑依モードのカスタマイズ 参照 。 `$ $' のようなデリミタは、単独行で挿入しても良いし、 式と同じ行に一緒に書いても構いません。

正または負の接頭引数を与えると、ポイント位置を一方の端とし、 接頭引数の行数だけ前後(正なら前方、負なら後方)した位置を もう一方の端として扱います。 この場合、明示的なデリミタは必要ありません。

ゼロの接頭引数を与えると、 そのときのリージョン両端(ポイントとマーク)をデリミタのかわりとして認識します。

C-u だけで空の接頭引数を与えると、 Calc は非数値の文字を探し(すなわち、数字, 正負号, 小数点, `e', `E' 以外の文字)、 前後方向でそれぞれ最初に見つかったものを式のデリミタとします。 M-# w(calc-embedded-word) は、 この機能を専用化したコマンドであって、 C-u M-# e と同じです。

ある式に対して憑依モードを起動すると、 Calc はデリミタで挟まれたテキストを読み、 それを Calc の式として解釈を試みます。 その際、Calc の言語モードが式と一致していればベストですが、 もし違っていても、 多くの場合 Calc は TeX や Bigスタイルの式を見分けることができます。 もし理解できなかったら、Calc は beep を発して憑依モードへの移行を拒みます。 言語モードが違っていた場合、Calc は式を誤解することがあります。 例えば、C 言語の `atan(a[1])' を Normal 言語モードで解析すると、 atan は組込み関数 arctan に対応せず、 しかも `a[1]' は 変数 `a' と ベクトル `[1]' の 積であると解釈されてしまいます。

式が無い状態から憑依モードを起動したい場合は、 2つのデリミタ `$ $' の間のスペースにカーソルを置いた状態で M-# eM-# w を押してください。 Calc は代数的入力のプロンプトを出します。

憑依モードで同時に扱えるのは、ひとつのバッファ中のひとつの式だけです。 現バッファ中の別の場所に移動して calc コマンドを与えると、 憑依モードはいったん終了して新しい場所で再起動しようとします。 他のバッファは影響を受けません。

憑依モードが起動したとき、Calc は式をスタックに push します。 Calc stack window は開きませんが、 常にスタック top の内容が元のバッファにコピーされるようになります。 スタック全体を観察したければ、 M-# o によって手動で Calc 窓を開くことができます。

例えば、 下記の式 `n>2' のどこかにカーソルを置いて M-# e をタイプすると、 この不等式に Calc が「憑依」します。

$F_n = F_(n-1)+F_(n-2)$ for all $n>2$ と定義する。

n>2 が Calc スタックに push され、 スタック top の内容が現編集バッファにコピーして返されます。 このとき、Calc の通常表示スタイルに合わせて、 `>' 記号の両側にスペースが挿入されるのが観察できます。

$F_n = F_(n-1)+F_(n-2)$ for all $n > 2$ と定義する。

`+' 記号の両側にはスペースが出現しません。 なぜならそれは憑依モードが関与していない別の式の中にあるからです。

さて、いっったん憑依モードが起動すると、 このバッファ内でタイプするキーは Calc に対するコマンドと解釈されます。 こうなると、「交換」コマンド j C によって不等式を反転することもできます。 これはセレクション系のコマンドで、 あらかじめカーソルを目的の演算子(この場合は `>')の上に 移動しておく必要があります。

$F_n = F_(n-1)+F_(n-2)$ for all $2 < n$ と定義する。

M-# o コマンドは、手軽に Calc ウィンドウを開く便利な方法です。 このコマンドで、Calc スタックにも同じ `2 < n' が存在するのを確認できます。 そこで 17 RET とタイプすると、

$F_n = F_(n-1)+F_(n-2)$ for all $17$ と定義する。

スタックに `2 < n'`17' が存在する状態で、 TAB を打つと2つのスタック内容が交換され、 `2 < n' が埋込み式(embedded formula)に復帰します。 たとえスタック窓が開いていなくても、 (pushされて見えなくなった内容は)依然としてそこにあり、 同じように機能します。 しかし古風な逆ポーランド計算機では、 (M-# oを使わない限り)スタック top の内容しか 常時見ることができません。

もう一度 M-# e をタイプすると憑依モードは終了します。 Calc 窓をみると、 `2 < n' が自動的にスタックから削除されるが、 `17' は残留することが判ります。 憑依モード開始時には常に 1件ぶんpushされ、 終了時には常に 1件ぶん削除されるのです。 憑依モードに関する限り、 これ以外でスタックに発生する事象はすべてあなたの仕業です。

間違った場所で M-# e を押して起動させてしまった場合、 付近のテキストを式として解釈してしまい、 現行の言語モードで「適切に」再表示しようとして、 そのテキストをズタズタにするかもかもしれません。 もしそうなったら、 もう一度 M-# e を押して憑依モードを終了させてから 普通の Emacs のアンドゥコマンド(C-_C-x u)を使って テキストを修復してください。 注意: 憑依モードを終了させずに Calc 自前のアンドゥコマンドを試しても、 この場合は役に立ちません。 当該の式に対してあなたはまだ何のコマンドも実行していないと、 Calc は見なしているからです。


Go to the first, previous, next, last section, table of contents.     利用度数