通过内核操作笔记本

在 Wolfram 语言笔记本中进行简单运算时,用标准 Wolfram 语言前端交互功能是非常方便的. 但要进行复杂和系统的运算时,最好要使用内核.

Notebooks[]所有打开的笔记本集合
Notebooks["name"]所有打开的有指定名的笔记本集合
InputNotebook[]用于输入的笔记本
EvaluationNotebook[]对这个函数正进行计算的笔记本
ButtonNotebook[]可能包含启动这个计算的按钮的笔记本

给出对应笔记本的函数.

在 Wolfram 语言内核中,前端中打开的笔记本用形式为 NotebookObject[fe,id] 的笔记本对象来表示. NotebookObject 中的第一个变量是该笔记本所在的前端 ,第二个变量是给出这个笔记本唯一的序列号.

这是一个名为 的笔记本.

3.gif

在前端中找出对应的笔记本对象.
得到内核中对应于该笔记本的表达式.
"Text" 代替每一个出现的 .
在前端中产生一个修改后的新笔记本.
NotebookGet[obj]得到对应于笔记本对象 obj 的笔记本表达式
NotebookPut[expr,obj]expr 作为对应于笔记本对象 obj 的表达式
NotebookPut[expr]expr 作为对应于当前所选笔记本的表达式

在内核和前端之间交换笔记本表达式.

对一个笔记本进行大量操作时,用 NotebookGet 将整个笔记本作为内核的一个表达式是非常方便的. 但是对笔记本进行一系列小操作时,最好还是把笔记本放在前端,然后从内核向前端发出一系列命令来指出进行怎样的操作.

在 Wolfram 语言中,笔记本前端中能交互进行的任何工作也可以从内核向前端发送适当的指令进行.

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 使用简单的赋值来改变选项.

在任何打开的笔记本中,前端总是保持当前的选择,这个选择由一个单元中的文本区域组成,或者是由这个单元组成. 通常这个选择在屏幕上是由一个高亮度形式表明. 这个选择也可以在文本的两个字符之间,或者在两个单元之间,这时它在屏幕上由两个竖直或水平的插入杠来表明.

可以用内核中的指令来修改所打开笔记本中的当前选择.

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,选择没有移动.
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 中第一次出现 的位置
NotebookDelete[obj]在笔记本中删除当前选择内容
NotebookRead[obj]得到一个笔记本中与当前选择对应的表达式

笔记本中的读和写.

NotebookWrite[obj,data] 与笔记本前端中的 Paste 运算类似. 它用 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 的某一位置对其修改往往是很方便的. 这可以选定占位符和 NotebookApply 来实现. 在 data 第一次出现字符 "" 的位置,该字符的输入方法是 EscsplEscNotebookApply 就用当前选择去替换这个字符.

这里是一个简笔记本,其当前选择是一个单元的内容.
用包含它前一个形式拷贝的字符串替换当前选择.
SelectionEvaluate[obj]对当前选择进行计算
SelectionCreateCell[obj]产生一个仅包含当前选择的新单元
SelectionEvaluateCreateCell[obj]计算当前选择并产生一个单元放置结果
SelectionAnimate[obj]激活当前选择中的图形
SelectionAnimate[obj,t]激活图形

当前选择的计算.

将当前选择作为整个单元.
计算当前选择.

SelectionEvaluate 从笔记本选取内容并将它送往内核进行计算. SelectionEvaluate 总是覆盖以前选取的内容,但使用 SelectionCreateCell 等函数可以保持所产生形式序列的记录,这与标准 Wolfram 语言进程一样.

将当前选择作为整个单元.
产生一个新单元,并将当前选择复制到其中.
这里用 Factor 把当前单元的内容包含起来.
计算当前单元的内容,产生一个新单元以给出结果.

NotebookWriteSelectionEvaluate 等函数默认将当前选择放在笔记本中所插入的内容之后. 明确地用SelectionMove 能移动选择. 但是在 NotebookWriteSelectionEvaluate 等函数中使用另外的变量也可指定任务完成后当前选择所在的位置.

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 等指令时,就是让 Wolfram 语言改变所看到的窗口. 在NotebookOpenCreateWindow 中使用选项设置 Visible->False 可以处理笔记本,但不将它显示在屏幕上.