カーネルからのノートブック操作

ノートブックに簡単な操作を施すには,ノートブックフロントエンドの対話的な機能で十分であろう.しかし,より複雑な,あるいは一定の手順の操作を行うには,カーネルによってノートブックを直接操作するのが便利である.

Notebooks[]開いているすべてのノートブックのリスト
Notebooks["name"]指定された名前で開いているすべてのノートブックのリスト
InputNotebook[]タイプする入力の対象となるノートブック
EvaluationNotebook[]評価中のノートブック
ButtonNotebook[]評価を開始させるボタンを含むノートブック

特定のノートブックに対応するノートブックオブジェクトを表す関数

Wolfram言語カーネルは,フロントエンドに開いているノートブックを,ノートブックオブジェクトとして認識する.このオブジェクトの書式はNotebookObject[fe,id]である.ここで,NotebookObjectの最初の引数は,ノートブックが属するフロントエンドオブジェクト()を示し,最後の引数は,ノートブックに順に割り当てられる固有の番号を示す.

というノートブック.

3.gif

フロントエンドの対応するノートブックオブジェクトを探す.
In[1]:=
Click for copyable input
Out[1]=
ノートブックに対応する式をカーネルに取り出す.
In[2]:=
Click for copyable input
Out[2]=
上の式のすべての"Text"に置き換える.
In[3]:=
Click for copyable input
Out[3]=
修正したノートブックをフロントエンドで開く.
In[4]:=
Click for copyable input

5.gif

Out[4]=
NotebookGet[obj]ノートブックオブジェクト obj に対応するノートブック式を生成する
NotebookPut[expr,obj]expr をノートブックオブジェクト obj に対応するノートブックに変換する
NotebookPut[expr]expr を選択されているノートブックに変換する

カーネルとフロントエンド間のノートブックのやり取り

特定のノートブックにたくさんの操作を行うには,NotebookGetによってノートブックを1つの式としてカーネルに取り込むのが便利である.しかし1つのノートブックに少しずつ操作を加える場合には,ノートブックをフロントエンドに残しておいて,カーネルから個々にコマンドをフロントエンドに送って所定の操作を行うのがよい.

フロントエンドで対話的に実行できる操作はすべてカーネルからフロントエンドへコマンドを送ることによっても実行できる.

Options[obj]ノートブックオブジェクト obj に対応したノートブックに設定されているすべてのオプションを列挙する
Options[obj,option]特定のオプションの値を返す
AbsoluteOptions[obj,option]指定された設定がAutomaticであっても,オプションの 絶対的な値を返す
CurrentValue[obj,option]option の値を返し設定する
SetOptions[obj,option->value]オプションを設定する

ノートブックのオプションの参照と設定

選択されているノートブックのWindowSizeオプションの値を返す.
In[5]:=
Click for copyable input
Out[5]=
選択されているノートブックの大きさを変える.
In[6]:=
Click for copyable input

6.gif

Out[6]=
あるいはCurrentValueを使って直接WindowSizeオプションの値を得る.
In[7]:=
Click for copyable input
Out[7]=
CurrentValueで簡単な割当てを使い,オプションを変更する.

開かれているすべてのノートブックにおいて,フロントエンドは常に現在の選択値を保持している.選択値とは,例えばある範囲のテキストや,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ノートブック

選択値の指定に使われる単位

これは簡単なノートブックの例である.

8.gif

現在の入力ノートブックに対応するノートブックオブジェクトをと名付ける.
In[9]:=
Click for copyable input
ノートブックにおける選択範囲を次の文字に移動する.
選択範囲を文字からセル全体に広げる.
選択位置をノートブックの末尾に移す.
NotebookFind[obj,data]ノートブックにおいて現行の選択範囲をデータで指定される次の部分に移動させる
NotebookFind[obj,data,Previous]前の指定部分に移動させる
NotebookFind[obj,data,All]データが指定する部分をノートブック全体で検索する
NotebookFind[obj,data,dir,elems]セル中の指定する要素を dir 方向に検索する
NotebookFind[obj,"text",IgnoreCase->True]
大文字・小文字の区別なしで検索する

ノートブックの内容の検索

選択範囲を直前の「」という文字に移動させる.
文字 を探す.見付からないので失敗($Failed)と表示され,選択範囲はそのままである.
In[14]:=
Click for copyable input

16.gif

Out[14]=
CellContentsセルの内容
CellStyleセルのスタイルの名前
CellLabelセルに割り当てられたラベル
CellTagsセルに付けられた検索用タグ
{elem1,elem2,}リストによる上記要素の列記

NotebookFindに指定可能な検索要素

大きなノートブックでは,セルにタグを付けておくと便利である.タグは通常表示されないが,これをキーワードとして,NotebookFindによって検索することができる.タグは,フロントエンドで対話的に指定することもでき,またセルにオプションCellTagsを使って明示的に指定することもできる.

NotebookLocate["tag"]選択されているノートブックにおいて指定されたタグの付いたセルを見付ける
NotebookLocate[{"file","tag"}]必要に応じて,別のノートブックを開いてそれに移動する

ノートブックにおけるセルの探索

NotebookLocateは,一般にノートブックにおいてハイパーリンクを追うときにWolfram言語により呼び出される関数である.メニュー項目の挿入 ハイパーリンクは,所定のハイパーリンクボタンに対応するスクリプトの一部として適切なNotebookLocateを設定する.

NotebookWrite[obj,data]データ data をノートブックにおける現在の選択物に書き込む
NotebookApply[obj,data]data をノートブックに書き込み,現在の選択物を data の中の第1のに挿入する
NotebookDelete[obj]ノートブックにおける現在の選択物を除去する
NotebookRead[obj]ノートブックにおける現在の選択物に対応する式を読み取る

ノートブック中の選択範囲の書込み,除去,読取り

NotebookWrite[obj,data]はフロントエンドにおけるペーストに似ている.つまり,ノートブック中の選択範囲を要素 data に置き換える.選択範囲がセルなら,NotebookWrite[obj,data]は,そのセルを data に置き換える.しかし,挿入点がセルとセルの間にあるときは,NotebookWrite[obj,data]は適切な新規セルを生成する.

文章中の単語を選択範囲とするノートブックの例.

18.gif

選択された単語を別のテキストで置換する.
現在の選択範囲をノートブックの最初のセルの直後に移す.
そこにテキストを挿入する.
次のセルに選択範囲を移す.
選択範囲の内容を読み取り,カーネルはそれを式として返す.
In[19]:=
Click for copyable input

23.gif

Out[19]=

NotebookWrite[obj,data]は選択されているオブジェクトを捨てて,その位置に data を挿入する.しかし,特にパレットを設定するとき等,まず data の部分に選択されているオブジェクトを挿入し,これをペーストする方が都合のよい場合がある.これは selection placeholdersNotebookApplyを使うことによって実現できる.この記号""(またはEscsplEscと入力すれば得られる)が data に初めて現れると,NotebookApplyはこれに現在の選択範囲を代入する.

セルの内容が選択されているノートブック.
前の形式のコピーを含む文字列が選択位置に代入される.
SelectionEvaluate[obj]選択されている式をその位置で評価する
SelectionCreateCell[obj]選択されているオブジェクトを持つセルを作る
SelectionEvaluateCreateCell[obj]評価した後,新たなセルを作りそこに結果を入れる
SelectionAnimate[obj]選択されているグラフィックスをアニメーションにする
SelectionAnimate[obj,t]アニメーションを 秒間続行する

選択範囲のセル化,評価

選択範囲をセル全体に広げる.
選択されたセルを評価する.

SelectionEvaluateは,ノートブックからオブジェクトを選び出し,それを評価するためにカーネルに送る.ただし,SelectionEvaluateで返される結果は,もとの選択範囲を上書きする.SelectionCreateCellを使えば,通常のWolframシステムセッションのように,生成される結果を順に記録しておくことができる.

選択範囲をセル全体とする.
新たにセルを作り,そこへ選択した内容をコピーする.
選択されているセルの内容にFactorを作用させる.
セルの式を評価し,結果を新たなセルに書き出す.

NotebookWriteSelectionEvaluate等の関数では,デフォルトで,挿入されてオブジェクトの直後が新たな選択位置になる.その後,SelectionMoveを使って選択位置を移動することができる.一方,NotebookWriteSelectionEvaluateのような関数では第3の引数を与えることによって,関数が評価された後の選択位置を指定することができる.

NotebookWrite[obj,data,sel]ノートブックに data を挿入し,選択位置を sel で指定される位置に移す
NotebookApply[obj,data,sel]選択物を data 中の に挿入して置換し,選択位置を sel で指定される位置に移す
SelectionEvaluate[obj,sel]選択範囲を評価し,選択位置を sel で指定される位置に移す
SelectionCreateCell[obj,sel]新たなセルに選択物を書き出し,選択位置を sel 指定される位置に移す
SelectionEvaluateCreateCell[obj,sel]選択されている式を評価し,新たにセルに結果を書き出し,選択位置を sel で指定される位置に移す

選択範囲を使ったノートブック操作と選択範囲の再設定

After挿入されたオブジェクトの直後を選択範囲とする (デフォルト)
Before挿入されたオブジェクトの直前を選択範囲とする
All挿入されたオブジェクトそのものを選択範囲とする
Placeholder挿入されたデータ中の最初のを選択範囲とする
None現在の選択範囲をそのまま残す

新たな選択範囲の指定

何も書かれていないノートブックがある.
とノートブックに書き込むと,それが現在の選択範囲になる.
現在の選択範囲を評価し,結果を新たなセルに書き出す.書かれた式が選択されている.
選択されている式にFactorIntegerを適用する.評価はしない.
選択範囲を評価し,結果の直前に選択位置を移す.
選択位置に新たな文字列を挿入する.
Options[obj,option]ノートブック全体に関するオプションの設定値を返す
Options[NotebookSelection[obj],option]
選択されているノートブックのオプションの設定値を返す
SetOptions[obj,option->value]ノートブック全体に関するオプションの値を設定する
SetOptions[NotebookSelection[obj],option->value]
選択されているノートブックのオプションの値を設定する

ノートブック全体と選択範囲に関するオプション設定値の参照と変更

セル全体を選択する.
セルを枠で囲む.
CreateWindow[]新たなノートブックを作る
CreateWindow[options]指定されたオプションを持つ新たなノートブックを作る
NotebookOpen["name"]ファイルとして保存されているノートブックを開く
NotebookOpen["name",options]ファイルとして保存されているノートブックを,指定したオプション付きで開く
SetSelectedNotebook[obj]選択されているノートブックを設定値とする
NotebookPrint[obj]ノートブックをプリンタに出力する
NotebookPrint[obj,"file"]ノートブックをPostScript形式でファイルに書き出す
NotebookPrint[obj,"!command"]ノートブックのPostScript形式を外部プログラムコマンドに引き渡す
NotebookSave[obj]選択されているノートブックをファイルに保存する
NotebookSave[obj,"file"]選択されているノートブックを新たなファイルに保存する
NotebookClose[obj]ノートブックを閉じる

ノートブック全体に関する操作

CreateWindow[]を実行すると,画面上に空のノートブックが現れる.

SetSelectedNotebookNotebookOpen等のコマンドの実行は,フロントエンドに表示ウィンドウの変更を指示する.表示させないでノートブックの操作を行いたいこともあるだろう.そのような場合は,NotebookOpenCreateWindowにオプションVisible->Falseを設定すればよい.