如何创建选项卡式Mathematica笔记本

And*_*rew 21 user-interface wolfram-mathematica mathematica-frontend

有没有办法在选项卡式界面中创建和编辑笔记本(单元序列)?这样的界面可以用TabView其他工具制作吗?我认为如果我从头开始制作前端,这是可能的,但在标准的Wolfram前端中有没有办法?


有两件事激励我提出这个问题.首先,我想用Mathematica笔记本创建Microsoft Office OneNote的替代品.其次,当我在Mathematica工作时,我发现自己想知道选项卡界面是否比打开多个单独的窗口更好.

Joh*_*ltz 9

虽然Mathematica不直接支持标签式笔记本窗口,但可以使用重现某些效果DockedCells.虚拟书本/功能导航界面(来自帮助菜单)执行此操作...它本质上是一个幻灯片放映,有两个幻灯片,一个拿着VB,另一个包含FN,DockedCells导航界面NotebookFind看起来有点像制表符.

以下是您如何自己制作这样一款笔记本的要点.对不起,这里有一些高级概念......如果你想要了解更多关于这个解决方案的任何部分,也许你可以解决更多问题.

(* make a single page of the notebook *)
page[tag_String] := 
  Cell@CellGroupData[{Cell["", "SlideShowNavigationBar", 
      CellTags -> {tag}], Cell[tag, "Title"]}];
(* make a single tab-like button which selects the page *)
button[tag_String] := 
  Button[Dynamic[
    Setter[Dynamic[
      CurrentValue[EvaluationNotebook[], {TaggingRules, "page"}, 
       tag]], tag]], 
   CurrentValue[EvaluationNotebook[], {TaggingRules, "page"}] = tag; 
   NotebookLocate[tag], 
   Appearance -> None];
(* make a notebook based upon a list of strings which are names of tabs *)
makeTabbedNotebook[nameList_List] :=
  NotebookPut@Notebook[page /@ nameList,
    DockedCells -> 
     ToBoxes[ExpressionCell[Row[button /@ nameList], 
        "DockedCell"]][[1]], 
    ScreenStyleEnvironment -> "SlideShow"];

makeTabbedNotebook[{"First", "Second", "Third"}]
Run Code Online (Sandbox Code Playgroud)

编辑:更改NotebookFind[ButtonNotebook[],tag,All,CellTags],似乎并不总是正确滚动幻灯片,到NotebookLocate[tag].请参阅评论中的讨论.从理论上讲,这两段代码应该是等价的,但Mathematica 8中的一个错误似乎会使它们有时表现不同.

  • John,我在V 8.04上注意到,当我运行上面的内容时,它现在设置为'First',然后我点击'Second',然后按钮显示它现在处于'second'但页面显示'First' .但当我在'第三'并点击'秒'时,它确实改变了.我相信这很容易修复,但是你的代码太高级了,我现在想不起来:).我可以添加屏幕截图,但不知道如何在评论中这样做. (5认同)
  • 用`NotebookLocate [tag]`替换行'NotebookFind [ButtonNotebook [],tag,All,CellTags]`似乎纠正了@ Nasser评论中的问题.此外,在Setter [Dynamic [CurrentValue [....] ...`中有一个额外的术语`tag`需要删除. (3认同)