20

Có cách nào để tạo và chỉnh sửa sổ tay (chuỗi các ô) trong giao diện tab không? Một giao diện như vậy có thể được thực hiện với TabView hoặc một số công cụ khác không? Tôi cho rằng điều này có thể xảy ra nếu tôi thực hiện giao diện người dùng từ đầu, nhưng có cách nào trong tiêu chuẩn Wolfram front-end không?Cách tạo sổ ghi chép Mathematica theo bảng


Hai điều thúc đẩy tôi hỏi điều này. Đầu tiên, tôi muốn tạo một thay thế cho Microsoft Office OneNote với sổ ghi chép Mathematica. Thứ hai, khi tôi đang làm việc trong Mathematica tôi thấy mình tự hỏi liệu một giao diện tab sẽ làm việc tốt hơn so với có nhiều cửa sổ riêng biệt mở.

+5

Mathematica hỗ trợ phân trang sổ ghi chép cho bản trình bày và nó cũng hỗ trợ "ô được gắn đế" (luôn hiển thị ở trên cùng). Bạn có thể kết hợp cả hai để tạo giao diện người dùng trong ô được gắn để chuyển đổi giữa các trang. Đây chỉ là một ý tưởng cho một điểm khởi đầu. – Szabolcs

+0

Tôi đã đăng một câu trả lời rằng sau khi suy nghĩ thêm về nó chỉ hoạt động cho đầu ra. Tôi nghĩ cách nhanh nhất để làm điều này là tạo một thanh tab hoặc bảng màu riêng biệt chuyển đổi giữa các cửa sổ bằng cách đặt Hiển thị-> Sai cho tất cả trừ cửa sổ/sổ ghi chép đã chọn. Điều này có thể tạo ra ảo tưởng về giao diện tab. –

+3

Không có giao diện tab được gắn sẵn trong giao diện người dùng * Mathematica * (nhưng đây là một gợi ý tuyệt vời để báo cáo tới [email protected]). Điều gần nhất trong giao diện người dùng giao diện người dùng mà tôi có thể nghĩ đến là môi trường trình chiếu (mở trình đơn 'Palettes' và chọn 'Trình chiếu'). –

Trả lời

8

Trong khi Mathematica không hỗ trợ trực tiếp cửa sổ sổ tay được gắn thẻ, bạn có thể sao chép một số hiệu ứng bằng cách sử dụng DockedCells. Giao diện Điều hướng Sách/Chức năng Ảo (từ menu trợ giúp) thực hiện điều này ... về cơ bản nó là một trình chiếu với hai trang trình bày, một cái giữ VB và một có chứa FN, với giao diện điều hướng DockedCells được điều khiển bởi NotebookFind trông hơi như các tab.

Dưới đây là ý chính về cách bạn có thể tự tạo một sổ ghi chép như vậy. Xin lỗi, có một số loại khái niệm nâng cao ở đây ... nếu có bất kỳ phần nào của giải pháp này mà bạn muốn tìm hiểu thêm về, có thể bạn có thể quay ra nhiều câu hỏi hơn.

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

Chỉnh sửa: thay đổi NotebookFind[ButtonNotebook[],tag,All,CellTags], mà dường như không phải lúc nào di chuyển trình chiếu một cách chính xác, để NotebookLocate[tag]. Xem thảo luận trong nhận xét. Hai bit của mã nên, theo lý thuyết, là tương đương, nhưng một lỗi trong Mathematica 8 xuất hiện để làm cho chúng hành xử khác nhau đôi khi.

+5

John, tôi nhận thấy trên V 8.04, khi tôi chạy ở trên, và bây giờ thiết lập tại 'Đầu tiên', sau đó tôi nhấp vào 'Thứ hai', sau đó nút hiển thị bây giờ là 'giây' nhưng trang hiển thị ' Đầu tiên'. Nhưng khi tôi vào 'thứ ba' và nhấp vào 'thứ hai, sau đó nó thay đổi ok. Tôi chắc chắn điều này là dễ dàng để sửa chữa, nhưng mã của bạn là quá tiên tiến cho tôi để tìm ra nó ngay bây giờ :). Tôi có thể thêm ảnh chụp màn hình, nhưng không biết làm thế nào để làm điều đó trong bình luận. – Nasser

+3

Thay thế dòng 'NotebookFind [ButtonNotebook [], tag, All, CellTags] 'bằng' NotebookLocate [tag] 'dường như sửa vấn đề trong bình luận của @ Nasser. Ngoài ra, có một thuật ngữ bổ sung 'tag' bên trong' Setter [Dynamic [CurrentValue [....] ... 'cần được xóa. – kglr

+0

@kguler Tôi nghĩ bạn có nghĩa là 'tag' bên trong' CurrentValue', không phải trong 'Setter'. Nếu bạn loại bỏ điều này, Setter sẽ không xuất hiện được nhấn cho đến khi bạn thực sự nhấn một nút. Nó dường như là một đối số thứ ba không có giấy tờ cung cấp một giá trị mặc định. – Szabolcs

Các vấn đề liên quan