カーネルからのノートブック操作
ノートブックに簡単な操作を施すには,ノートブックフロントエンドの対話的な機能で十分であろう.しかし,より複雑な,あるいは一定の手順の操作を行うには,カーネルによってノートブックを直接操作するのが便利である.
特定のノートブックに対応するノートブックオブジェクトを表す関数
Mathematica カーネルは,フロントエンドに開いているノートブックを,ノートブックオブジェクトとして認識する.このオブジェクトの書式は
NotebookObject[fe, id]である.ここで,
NotebookObjectの最初の引数は,ノートブックが属するフロントエンドオブジェクト(
FrontEndObject)を示し,最後の引数は,ノートブックに順に割り当てられる固有の番号を示す.
フロントエンドの対応するノートブックオブジェクトを探す.
| Out[1]= |  |
|
| Out[2]= |  |
|
上の式のすべての "Section"を "Text"に置き換える.
| Out[3]= |  |
|
| Out[4]= |  |
|
カーネルとフロントエンド間のノートブックのやり取り
特定のノートブックにたくさんの操作を行うには,
NotebookGetによってノートブックを1つの式としてカーネルに取り込むのが便利である.しかし1つのノートブックに少しずつ操作を加える場合には,ノートブックをフロントエンドに残しておいて,カーネルから個々にコマンドをフロントエンドに送って所定の操作を行うのがよい.
フロントエンドで対話的に実行できる操作はすべてカーネルからフロントエンドへコマンドを送ることによっても実行できる.
ノートブックのオプションの参照と設定
| Out[5]= |  |
|
| Out[6]= |  |
|
| Out[7]= |  |
|
開かれているすべてのノートブックにおいて,フロントエンドは常に現在の選択値を保持している.選択値とは,例えばある範囲のテキストや,1つのセル全体等である.選択範囲はスクリーン上で通常反転表示される.選択範囲はまた,文字と文字の間やセルとセルの間であることもあり,それぞれ垂直または水平のカーソル線で示される.
所定のコマンドを送って,カーネルから直接選択範囲を変更することも可能である.
| SelectionMove[obj,Next,unit] | 選択値を指定する単位で次へ移動する |
| SelectionMove[obj,Previous,unit] | 選択値を前へ移動する |
| SelectionMove[obj,After,unit] | 選択値を指定する単位で現在値の直後に移動する |
| SelectionMove[obj,Before,unit] | 選択値を現在値の直前に移動する |
| SelectionMove[obj,All,unit] | 選択範囲を現在値の全部に広げる |
ノートブックにおける選択値の移動
| Character | 文字 |
| Word | ワード |
| Expression | 式 |
| TextLine | テキストの行 |
| TextParagraph | 段落 |
| GraphicsContents | グラフィックスの内容 |
| Graphics | グラフィックス |
| CellContents | セルの内容 |
| Cell | セル |
| CellGroup | セルグループ |
| EvaluationCell | 評価中のセル |
| ButtonCell | 評価を実行したボタンセル |
| GeneratedCell | 評価中に生成されたセル |
| Notebook | ノートブック |
選択値の指定に使われる単位
現在の入力ノートブックに対応するノートブックオブジェクトを nbと名付ける. |
ノートブックにおける選択範囲を次の文字に移動する. |
| NotebookFind[obj,data] | ノートブックにおいて現行の選択範囲をデータで指定される次の部分に移動させる |
| NotebookFind[obj,data,Previous] | 前の指定部分に移動させる |
| NotebookFind[obj,data,All] | データが指定する部分をノートブック全体で検索する |
| NotebookFind[obj,data,dir,elems] | セル中の指定する要素をdir 方向に検索する |
| NotebookFind[obj,"text",IgnoreCase->True] |
| 大文字・小文字の区別なしで検索する |
ノートブックの内容の検索
文字  を探す.見付からないので失敗( $Failed)と表示され,選択範囲はそのままである.
| Out[14]= |  |
|
| CellContents | セルの内容 |
| CellStyle | セルのスタイルの名前 |
| CellLabel | セルに割り当てられたラベル |
| CellTags | セルに付けられた検索用タグ |
| {elem1,elem2,...} | リストによる上記要素の列記 |
NotebookFindに指定可能な検索要素
大きなノートブックでは,セルにタグを付けておくと便利である.タグは通常表示されないが,これをキーワードとして,
NotebookFindによって検索することができる.タグは,フロントエンドで対話的に指定することもでき,またセルにオプション
CellTagsを使って明示的に指定することもできる.
ノートブックにおけるセルの探索
NotebookLocateは,一般にノートブックにおいてハイパーリンクを追うときに
Mathematica により呼び出される関数である.メニュー項目の
は,所定のハイパーリンクボタンに対応するスクリプトの一部として適切な
NotebookLocateを設定する.
ノートブック中の選択範囲の書込み,除去,読取り
NotebookWrite[obj, data]はフロントエンドにおける
「ペースト」に似ている.つまり,ノートブック中の選択範囲を要素
data に置き換える.選択範囲がセルなら,
NotebookWrite[obj, data]は,そのセルを
data に置き換える.しかし,挿入点がセルとセルの間にあるときは,
data を入れるためのセルが
NotebookWrite[obj, data]に新設される.
現在の選択範囲をノートブックの最初のセルの直後に移す. |
選択範囲の内容を読み取り,カーネルはそれを式として返す.
| Out[19]= |  |
|
NotebookWrite[obj, data]は選択されているオブジェクトを捨てて,その位置に
data を挿入する.しかし,特にパレットを設定するとき等,まず
data の部分に選択されているオブジェクトを挿入し,これをペーストする方が都合のよい場合がある.これは
selection placeholders と
NotebookApplyを使うことによって実現できる.この記号"

"(
\[SelectionPlaceholder]または
Esc spl Escと入力すれば得られる)が
data に初めて現れると,
NotebookApplyはこれに現在の選択範囲を代入する.
前の形式のコピーを含む文字列が選択位置に代入される. |
選択範囲のセル化,評価
SelectionEvaluateは,ノートブックからオブジェクトを選び出し,それを評価するためにカーネルに送る.ただし,返される結果は上書きされ,もとの選択物は捨てられる.
SelectionCreateCellを使えば,通常の
Mathematica セッションのように,生成される結果を順に記録しておくことができる.
新たにセルを作り,そこへ選択した内容をコピーする. |
NotebookWriteや
SelectionEvaluate等の関数では,デフォルトで,挿入されてオブジェクトの直後が新たな選択位置になる.その後,
SelectionMoveを使って選択位置を移動することができる.一方,
NotebookWriteや
SelectionEvaluateのような関数では第3の引数を与えることによって,関数が評価された後の選択位置を指定することができる.
選択範囲を使ったノートブック操作と選択範囲の再設定
| After | 挿入されたオブジェクトの直後を選択範囲とする (デフォルト) |
| Before | 挿入されたオブジェクトの直前を選択範囲とする |
| All | 挿入されたオブジェクトそのものを選択範囲とする |
| Placeholder | 挿入されたデータ中の最初の を選択範囲とする |
| None | 現在の選択範囲をそのまま残す |
新たな選択範囲の指定
10!とノートブックに書き込むと,それが現在の選択範囲になる. |
10!を評価し,結果を新たなセルに書き出す.書かれた式が選択されている. |
ノートブック全体と選択範囲に関するオプション設定値の参照と変更
ノートブック全体に関する操作
CreateWindow[]を実行すると,画面上に空のノートブックが現れる.
SetSelectedNotebookや
NotebookOpen等のコマンドの実行は,フロントエンドに表示ウィンドウの変更を指示する.表示させないでノートブックの操作を行いたいこともあるだろう.そのような場合は,
NotebookOpenや
CreateWindowにオプション
Visible->Falseを設定すればよい.