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

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

フロントエンドの対応するノートブックオブジェクトを探す.
In[1]:= Notebooks["Example.nb"]
Out[1]={NotebookObject[<<Example.nb>>]}
ノートブックに対応する式をカーネルに取り出す.
In[2]:= NotebookGet[First[%]]
Out[2]=Notebook[{Cell[最初のヘッディング, Section], Cell[2番目のヘッディング, Section]}]
上の式のすべての"Section"を"Text"に置き換える.
In[3]:= % /. "Section" -> "Text"
Out[3]=Notebook[{Cell[最初のヘッディング, Text], Cell[2番目のヘッディング, Text]}]
修正したノートブックをフロントエンドで開く.
In[4]:= NotebookPut[%]

Out[4]={NotebookObject[<<Untitled-1.nb>>]}

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

ノートブックのオプションの参照と設定
選択されているノートブックのWindowSizeオプションの値を返す.
In[5]:= Options[SelectedNotebook[ ], WindowSize]
Out[5]= 
選択されているノートブックの大きさを変える.
In[6]:= SetOptions[SelectedNotebook[ ], WindowSize -> {250, 100}]

Out[6]={WindowSize {250., 100.}}
開かれているすべてのノートブックにおいて,フロントエンドは常に現在の選択値を保持している.選択値とは,例えばある範囲のテキストや,1つのセル全体等である.選択範囲はスクリーン上で通常反転表示される.選択範囲はまた,文字と文字の間やセルとセルの間であることもあり,それぞれ垂直または水平のカーソル線で示される.
所定のコマンドを送って,カーネルから直接選択範囲を変更することも可能である.

ノートブックにおける選択値の移動

選択値の指定に使われる単位
これは簡単なノートブッ クの例である.

フロントエンドで選択されたノートブックオブジェクトを nbと名付ける.
In[7]:= nb = SelectedNotebook[ ];
ノートブックにおける選択範囲を次の文字に移動する.
In[8]:= SelectionMove[nb, Next, Word]

選択範囲を文字からセル全体に広げる.
In[9]:= SelectionMove[nb, All, Cell]

選択位置をノートブックの末尾に移す.
In[10]:= SelectionMove[nb, After, Notebook]


ノートブックの内容の検索
選択範囲を直前の「ル」という文字に移動させる.
In[11]:= NotebookFind[nb, "ル", Previous]

Out[11]=NotebookSelection[-NotebookObject-]
文字 を探す.見付からないので失敗($Failed)と表示され,選択範囲はそのままである.
In[12]:= NotebookFind[nb, "\[Alpha]", Next]


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

ノートブックにおけるセルの探索
NotebookLocateは,ノートブックにおいてハイパーリンクを追うときにMathematicaにより呼び出される関数である.メニューコマンド「ハイパーリンクの作成」(Create Hyperlink)は, 所定のハイパーリンクボタンに対応するスクリプトの一部として適切なNotebookLocateを設定する.

ノートブック中の選択範囲の書込み,除去,読取り
NotebookWrite[obj, data]はフロントエンドにおける「ペースト」(Paste)に似ている.つまり,ノートブック中の選択範囲を要素 dataに置き換える.選択範囲がセルなら, NotebookWrite[obj, data]は,そのセルを dataに置き換える.しかし,挿入点がセルとセルの間にあるときは, dataを入れるためのセルが新設される.
文章中の単語を選択範囲とするノートブックの例.

選択された単語を別のテキストで置換する.
In[13]:= NotebookWrite[nb, "<<挿入したテキスト>>"]

現在の選択範囲をノートブックの最初のセルの直後に移す.
In[14]:= SelectionMove[nb, After, Cell]

そこにテキストを挿入する.
In[15]:= NotebookWrite[nb, Cell["このセルはテキストを含みます.", "Text"]]

次のセルに選択範囲を移す.
In[16]:= SelectionMove[nb, Next, Cell]

選択範囲の内容を読み取り,カーネルはそれを式として返す.
In[17]:= NotebookRead[nb]

Out[17]= 
NotebookWrite[obj, data]は選択されているオブジェクトを捨てて,その位置にdataを挿入する.しかし,特にパレットを設定するとき等,まず dataの部分に選択されているオブジェクトを挿入し,これをペーストする方が都合のよい場合がある.これは selection placeholdersと NotebookApplyを使うことによって実現できる.NotebookApplyは dataに初めに現れる (\[SelectionPlaceholder]または spl と入力すれば得られる)に選択されているオブジェクトを挿入し,これを選択位置に挿入 する.
セルの内容が選択されているノート ブック.
In[18]:= nb = SelectedNotebook[ ] ;

選択されている式を に挿入した結果が選択位置にペーストされる.
In[19]:= NotebookApply[nb, "x + 1/ "]


選択範囲のセル化,評価
選択範囲をセル全体に広げる.
In[20]:= SelectionMove[nb, All, CellContents]

選択されたセルを評価する.
In[21]:= SelectionEvaluate[nb]

SelectionEvaluateは,ノートブックからオブジェクトを選び出し,それを評価するためにカーネルに送る.ただし,返される結果は上書きされ,もとの選択物は捨てられる. SelectionCreateCellを使えば,通常のMathematicaセッションのように,生成される結果を順に記録しておくことができる.
選択範囲をセル全体とする.
In[22]:= SelectionMove[nb, All, Cell]

新たにセルを作り,そこへ選択した内容をコピーする.
In[23]:= SelectionCreateCell[nb]

選択されているセルの内容に Factorを作用させる.
In[24]:= NotebookApply[nb, "Factor[ ]"]

セルの式を評価し,結果を新たなセルに書き出す.
In[25]:= SelectionEvaluateCreateCell[nb]

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

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

新たな選択範囲の指定
何も書かれていないノートブックがある.
In[26]:= nb = SelectedNotebook[ ] ;

10!とノートブックに書き込む.10!が選択されている.
In[27]:= NotebookWrite[nb, "10!", All]

10!を評価し,結果を新たなセルに書き出す.書かれた式が選択されている.
In[28]:= SelectionEvaluateCreateCell[nb, All]

選択されている式にFactorIntegerを適用する.評価はしない.
In[29]:= NotebookApply[nb, "FactorInteger[ ]", All]

選択範囲を評価し,結果の直前に選択位置を移す.
In[30]:= SelectionEvaluate[nb, Before]

選択位置に新たな文字列を挿入する.
In[31]:= NotebookWrite[nb, "a = "]


ノートブック全体と選択範囲に関するオプション設定値の参照と変更
セル全体を選択する.
In[32]:= SelectionMove[nb, All, Cell]

セルを枠で囲む.
In[33]:= SetOptions[NotebookSelection[nb], CellFrame->True]


ノートブック全体に関する操作
NotebookCreate[ ]を実行すると,画面上に空のノートブックが現れる.
SetSelectedNotebookや NotebookOpen等のコマンドの実行は,フロントエンドに表示ウィンドウの変更を指示する.表示させないでノートブックの操作を行いたいこともあるだろう.そのような場合は,NotebookOpenや NotebookCreateにオプション Visible->Falseを設定すればよい.
|