20

Czy istnieje sposób na tworzenie i edytowanie notatników (sekwencji komórek) w interfejsie z kartami? Czy taki interfejs można wykonać przy pomocy TabView lub innego narzędzia? Zakładam, że byłoby to możliwe, jeśli zrobiłem front-end od zera, ale czy jest jakiś sposób w standardowym interfejsie Wolfram?Tworzenie kart z notatnikiem Mathematica


Dwie rzeczy motywują mnie do zadania tego. Najpierw chciałbym zastąpić Microsoft Office OneNote notebookami Mathematica. Po drugie, kiedy pracuję w Mathematica, zastanawiam się, czy interfejs z kartami działa lepiej, niż gdy wiele oddzielnych okien jest otwartych.

+5

Mathematica obsługuje stronicowanie notebooków do prezentacji, a także obsługuje "zadokowane komórki" (zawsze wyświetlane u góry). Możesz połączyć te dwa elementy, aby utworzyć interfejs użytkownika w zadokowanej komórce do przełączania między stronami. To tylko pomysł na punkt wyjścia. – Szabolcs

+0

Napisałem odpowiedź, że po pomyśleniu więcej na temat działa tylko na wyjście. Myślę, że najszybszym rozwiązaniem byłoby utworzenie oddzielnego paska kart lub palety, która przełącza się między oknami, ustawiając Widoczny-> Fałsz dla wszystkich oprócz wybranego okna/notatnika. To może dać iluzję interfejsu z kartami. –

+3

W interfejsie użytkownika * Mathematica * nie ma wbudowanego (natywnego) interfejsu użytkownika (ale jest to doskonała propozycja do zgłoszenia na [email protected]). Najbliższą rzeczą w interfejsie użytkownika interfejsu, o której mogę pomyśleć, jest środowisko pokazu slajdów (otwórz menu 'Palety' i wybierz' Pokaz slajdów'). –

Odpowiedz

8

Chociaż program Mathematica nie obsługuje bezpośrednio okien z kartami, możliwe jest odtworzenie efektu podobnego za pomocą DockedCells. Interfejs Virtual Book/Function Navigator (z menu pomocy) robi to ... jest to zasadniczo pokaz slajdów z dwoma slajdami, z których jeden zawiera VB, a drugi zawiera FN, z interfejsem nawigacyjnym DockedCells sterowanym przez NotebookFind, który wygląda nieco jak karty.

Oto podstawowe informacje o tym, jak można zrobić samodzielny notebook. Przepraszam, są tu jakieś zaawansowane koncepcje ... jeśli jest jakaś część tego rozwiązania, o której chcesz dowiedzieć się więcej, być może będziesz mógł udzielić więcej pytań.

(* 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"}] 

Edit: zmienił NotebookFind[ButtonNotebook[],tag,All,CellTags], który wydaje się nie zawsze prawidłowo przewinąć pokaz slajdów, aby NotebookLocate[tag]. Zobacz dyskusję w komentarzach. Te dwa bity kodu powinny teoretycznie być równoważne, ale błąd w Mathematica 8 wydaje się sprawiać, że czasami zachowują się inaczej.

+5

John, zauważyłem na V 8.04, kiedy uruchomiłem powyższe i teraz jest ustawione na "First", następnie klikam na "Second", a następnie przycisk pokazuje, że jest teraz na "sekundę", ale strona wyświetla " Pierwszy'. Ale kiedy jestem na "trzecim" i klikam na "drugi", to się zmienia. Jestem pewien, że jest to łatwe do naprawienia, ale twój kod jest zbyt zaawansowany, abym mógł go teraz rozwiązać :). Mogę dodać zrzut ekranu, ale nie wiem, jak to zrobić w komentarzu. – Nasser

+3

Zastępowanie linii 'NotebookZaznacz [ButtonNotebook [], tag, Wszystkie, CellTags]' z 'NotebookLocate [tag]' wydaje się korygować problem w komentarzu @ Nasser. Wewnątrz 'Settera [Dynamic [CurrentValue [....] ..." jest dodatkowy termin "tag", który należy usunąć. – kglr

+0

@kguler Myślę, że masz na myśli 'tag' wewnątrz' CurrentValue', a nie w 'Setter'. Jeśli to usuniesz, Setter nie pojawi się naciśnięty, dopóki nie naciśniesz przycisku. Wygląda na nieudokumentowany trzeci argument, który zapewnia wartość domyślną. – Szabolcs