20

C'è un modo per creare e modificare quaderni (sequenze di celle) in un'interfaccia a schede? Potrebbe essere realizzata un'interfaccia del genere con TabView o qualche altro strumento? Presumo che ciò sarebbe possibile se facessi un front-end da zero, ma c'è un modo all'interno del front-end standard di Wolfram?Come creare i taccuini Mathematica a schede


Due cose mi motivano a chiedere questo. Innanzitutto, vorrei creare un sostituto per Microsoft Office OneNote con i notebook Mathematica. In secondo luogo, quando lavoro in Mathematica mi sorprendo a chiedermi se un'interfaccia a schede funzioni meglio di avere numerose finestre separate aperte.

+5

Mathematica supporta l'impaginazione dei notebook per le presentazioni e supporta anche "celle agganciate" (sempre visualizzate nella parte superiore). Potrebbe essere possibile combinare i due per creare un'interfaccia utente nella cella ancorata per passare da una pagina all'altra. Questa è solo un'idea per un punto di partenza. – Szabolcs

+0

Ho postato una risposta che dopo averci pensato di più funziona solo per l'output. Penso che il modo più rapido per farlo sarebbe quello di creare una barra di tabulazione o una palette separata che passi da una finestra all'altra selezionando Visible-> False per tutti tranne la finestra/taccuino selezionato. Questo potrebbe dare l'illusione di un'interfaccia a schede. –

+3

Non c'è un'interfaccia a schede (nativa) integrata nell'interfaccia utente * Mathematica * frontend (ma questo è un eccellente suggerimento da segnalare a [email protected]). La cosa più vicina nell'interfaccia utente frontend che posso pensare è l'ambiente slide show (apri il menu 'Palettes' e seleziona' Slide Show'). –

risposta

8

Mentre Mathematica non supporta direttamente le finestre del taccuino a schede, è possibile riprodurre qualcosa dell'effetto utilizzando DockedCells. L'interfaccia Virtual Book/Function Navigator (dal menu help) fa questo ... è essenzialmente una presentazione con due diapositive, una contenente il VB e l'altra contenente il FN, con un'interfaccia di navigazione DockedCells guidata da NotebookFind che sembra un po ' come schede.

Ecco il succo di come si potrebbe fare un quaderno da soli. Siamo spiacenti, ci sono alcuni tipi di concetti avanzati qui ... se ci sono parti di questa soluzione di cui vuoi saperne di più, forse puoi fare più domande.

(* 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: cambiato NotebookFind[ButtonNotebook[],tag,All,CellTags], che sembra non sempre scorrere la presentazione in modo corretto, a NotebookLocate[tag]. Vedi la discussione nei commenti. I due bit di codice dovrebbero, in teoria, essere equivalenti, ma un bug in Mathematica 8 sembra farli comportarsi diversamente a volte.

+5

John, ho notato su V 8.04, quando eseguo quanto sopra, e ora è impostato su 'Primo', poi clicco su 'Second', quindi il pulsante mostra che ora è su 'second' ma la pagina viene visualizzata ' Primo'. Ma quando sono su 'terzo' e clicco 'secondo, allora cambia ok. Sono sicuro che è facile da risolvere, ma il tuo codice è troppo avanzato per farmelo capire ora :). Posso aggiungere una schermata, ma non so come farlo nel commento. – Nasser

+3

Sostituire la riga 'NotebookFind [ButtonNotebook [], tag, All, CellTags]' con 'NotebookLocate [tag]' sembra correggere il problema nel commento di @ Nasser. Inoltre, c'è un termine aggiuntivo 'tag' dentro 'Setter [Dynamic [CurrentValue [....] ...' che deve essere eliminato. – kglr

+0

@kguler Penso che intendiate 'tag' dentro' CurrentValue', non in 'Setter'. Se si rimuove questo, l'incastonatore non apparirà premuto fino a quando non si preme effettivamente un pulsante. Sembra essere un terzo argomento non documentato che fornisce un valore predefinito. – Szabolcs

Problemi correlati