20

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


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

+5

Mathematica支持用于演示文稿的笔记本分页,并且还支持“停放的单元格”(始终显示在顶部)。您可以将两者结合在一起,在停靠的单元中创建用户界面,以便在页面之间进行切换。这只是一个起点的想法。 – Szabolcs 2012-01-08 17:37:22

+0

我发布了一个答案,思考更多关于它只适用于输出。我认为最快的做法是创建一个单独的标签栏或调色板,通过为所有窗口/笔记本设置Visible-> False来切换窗口。这可能会产生标签界面的错觉。 – 2012-01-08 22:28:34

+3

* Mathematica *前端用户界面中没有内置(本地)选项卡式界面(但这是向[email protected]报告的极好建议)。我能想到的前端用户界面中最接近的是幻灯片放映环境(打开“调色板”菜单并选择“幻灯片放映”)。 – 2012-01-09 00:27:44

回答

8

虽然Mathematica不直接支持标签式笔记本窗口,但可以使用DockedCells来重现某些效果。 Virtual Book/Function Navigator界面(来自帮助菜单)是这样做的......它本质上是一张带有两张幻灯片的幻灯片,其中一张持有VB,另一张含有FN,带有NotebookFind驱动的DockedCells导航界面,看起来有点像标签。

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

(* make a single page of the notebook *) 
page[tag_String] := 
    [email protected][{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] := 
    [email protected][page /@ nameList, 
    DockedCells -> 
    ToBoxes[ExpressionCell[Row[button /@ nameList], 
     "DockedCell"]][[1]], 
    ScreenStyleEnvironment -> "SlideShow"]; 

makeTabbedNotebook[{"First", "Second", "Third"}] 

编辑:改变NotebookFind[ButtonNotebook[],tag,All,CellTags],这似乎并不总是正确地滚动播放幻灯片,向NotebookLocate[tag]。请参阅评论中的讨论。理论上这两个代码应该是等价的,但Mathematica 8中的一个错误似乎有时会使它们的行为有所不同。

+5

约翰,我在V 8.04上注意到,当我运行上面的代码时,它现在设置为'First',然后点击'Second',然后按钮显示它现在'second',但页面显示'第一'。但是当我在'第三'点击'第二'时,它确实改变了。我相信这很容易解决,但是你的代码太高级了,我现在就不知道了:)。我可以添加屏幕截图,但不知道如何评论。 – Nasser 2012-01-17 00:12:40

+3

用'NotebookLocate [tag]'代替'NotebookFind [ButtonNotebook [],tag,All,CellTags]'这行似乎可以解决@ Nasser评论中的问题。此外,在Setter [Dynamic [CurrentValue [....] ...]内部还有一个额外的术语'tag',需要删除。 – kglr 2012-01-17 04:47:12

+0

@kguler我认为你的意思''标签'CurrentValue'内,而不是'Setter'。如果删除它,直到你实际按下一个按钮,Setter才会出现。它似乎是一个提供默认值的未公开的第三个参数。 – Szabolcs 2012-01-17 13:22:48

相关问题