Как создать блокнот Mathematica с вкладками - PullRequest
21 голосов
/ 08 января 2012

Есть ли способ создавать и редактировать блокноты (последовательности ячеек) в интерфейсе с вкладками?Можно ли сделать такой интерфейс с помощью TabView или каким-либо другим инструментом?Я предполагаю, что это было бы возможно, если бы я сделал интерфейс с нуля, но есть ли способ в стандартном интерфейсе Wolfram?


Две вещи побуждают меня спросить об этом.Во-первых, я хотел бы создать замену для Microsoft Office OneNote с ноутбуками Mathematica.Во-вторых, когда я работаю в Mathematica, я задаюсь вопросом, будет ли работать интерфейс с вкладками лучше, чем открывать многочисленные отдельные окна.

1 Ответ

9 голосов
/ 17 января 2012

Хотя Mathematica не поддерживает окна ноутбука с вкладками напрямую, можно воспроизвести что-то из этого эффекта, используя DockedCells.Интерфейс Virtual Book / Function Navigator (из меню справки) делает это ... по сути, это слайд-шоу с двумя слайдами, один из которых содержит 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"}]

Редактировать: изменено NotebookFind[ButtonNotebook[],tag,All,CellTags], который не всегда правильно прокручивает слайд-шоу, до NotebookLocate[tag].Смотрите обсуждение в комментариях.Теоретически два бита кода должны быть эквивалентны, но ошибка в Mathematica 8 иногда заставляет их вести себя по-разному.

...