是否可以以编程方式打开笔记本中的所有已关闭单元格组?

时间:2016-03-29 13:54:03

标签: cell mathematica-frontend

已经有问题"Close programmatically all cell groups in Mathematica?"

奇怪的是,尚未提出二元化问题:是否可以以编程方式打开笔记本中的所有已关闭单元格组?

现在提升它的原因是使用SelectionMove可以选择一个封闭组的一部分。如果在下面的示例中,将由适当的SelectionMove命令选择的最后一个单元格是封闭组的一部分,它在封闭组中保持不可见,尽管AutoScroll-> True(与描述相反):

这一系列命令选择笔记本中的最后一个单元格:

nb = EvaluationNotebook[]; SelectionMove[nb, All, Notebook]
SelectionMove[nb, After, Cell]
SelectionMove[nb, Previous, Cell, AutoScroll -> True]

哪个附加命令将打开包含最后一个单元格的组,使其变为可见并被选为整个单元格?(它可能是几个嵌套单元格组的一部分!)

1 个答案:

答案 0 :(得分:0)

线索是两个命令

FrontEndTokenExecute[nb, "ExpandSelection"] 
FrontEndTokenExecute[nb, "SelectionOpenAllGroups"]

但是,在这两个命令之后,必须再次重新应用我的初始帖子中提到的方法。

Sample Select Last Celle Programatically.nb

nb = EvaluationNotebook[];
SelectionMove[nb, All, Notebook]                                             (* \
this one selects all cells in this notebook *)
SelectionMove[nb, After, Cell]                                                \
  (* this one moves the insertion point below everything *)
SelectionMove[nb, Previous, Cell, 
 AutoScroll -> 
  True]   (* if the last cell is part of a closed group, the selection stays \
invisible *)
FrontEndTokenExecute[nb, "ExpandSelection"]                    (* this one \
selects the group enclosing the last cell *)
FrontEndTokenExecute[nb, "SelectionOpenAllGroups"]    (* this one opens it *)
\

SelectionMove[nb, After, Cell]                                                \
  (* like command 4 steps above, this one moves the insertion point below \
everything *)
SelectionMove[nb, Previous, Cell, 
 AutoScroll -> 
  True]  (* now it is no longer part of a closed group, therefore it becomes \
visible *)


10 outmost group: Several groups are stacked one ontop the next. All cells groups are closed individually. This is a test case for the program above.

9 intermediate group

8 intermediate group

7 intermediate group

6 intermediate group

5 intermediate group

4 intermediate group

3 intermediate group

2 intermediate group

1 innermost group

f /@ Range[3]

{f[1], f[2], f[3]}

(我把这一切都放在笔记本上,但我发现无法上传它...将所有这些都复制到笔记本后,将所有内容设置为手动分组,然后将最后一个单元格依次嵌套到另一个它上面的下一行然后关闭所有子组。)

附带的笔记本显示了它是如何完成的,它还包含一个测试示例,其中包含选择所在的最深层嵌套的单元格组。但是,由于我既没有对ExpandSelection的“公理”描述,也没有SelectionOpenAllGroups的“公理”描述,因此仍然缺少此始终工作且永不失败的证据。

我希望帮助系统中还有更多链接“也可以看到”,尤其是与FrontEnd相关的功能。