2011-06-21 24 views
6

Cách sử dụng Messages các chức năng tích hợp sẵn có định dạng nhúng trực tuyến. Ví dụ:Cách thuận tiện để thêm định dạng nội tuyến vào tin nhắn sử dụng

In[1]:= ActionMenu::usage // FullForm 

Out[1]//FullForm= 
"\!\(\*RowBox[{\"ActionMenu\", \"[\", RowBox[{StyleBox[\"name\", \"TI\ 
\"], \",\", RowBox[{\"{\", \ 
RowBox[{RowBox[{SubscriptBox[StyleBox[\"lbl\", \"TI\"], \ 
StyleBox[\"1\", \"TR\"]], \":>\", SubscriptBox[StyleBox[\"act\", \"TI\ 
\"], StyleBox[\"1\", \"TR\"]]}], \",\", \ 
RowBox[{SubscriptBox[StyleBox[\"lbl\", \"TI\"], StyleBox[\"2\", \ 
\"TR\"]], \":>\", SubscriptBox[StyleBox[\"act\", \"TI\"], \ 
StyleBox[\"2\", \"TR\"]]}], \",\", StyleBox[\"\[Ellipsis]\", \ 
\"TR\"]}], \"}\"}]}], \"]\"}]\) represents an action menu with label \ 
\!\(\*StyleBox[\"name\", \"TI\"]\), and with items labeled \ 
\!\(\*SubscriptBox[StyleBox[\"lbl\", \"TI\"], StyleBox[\"i\", \ 
\"TI\"]]\), that evaluates the expression \ 
\!\(\*SubscriptBox[StyleBox[\"act\", \"TI\"], StyleBox[\"i\", \ 
\"TI\"]]\) if the corresponding item is chosen." 

Người ta có thể thấy định dạng nội tuyến này dựa trên bộ kiểu được xác định trong phần "Kiểu cho định dạng nội tuyến" của biểu định kiểu Core.nb. Nhưng tôi chưa tìm thấy bất kỳ tài liệu nào cho các kiểu này cũng như bất kỳ mô tả nào về thuật toán thuận tiện của việc thêm định dạng vào usageMessage s.

Cách thuận tiện để thêm định dạng nội dòng là gì do người dùng xác định usageMessage s trong Mathematica? Quy tắc sử dụng kiểu mặc định cho định dạng nội tuyến được xác định trong biểu định kiểu Core.nb là gì? Tôi muốn thêm định dạng nội dòng vào số usageMessage trong gói của mình chỉ với Mathematica, mà không cần cài đặt các thành phần bổ sung như Bàn làm việc, v.v.

P.S. Cú pháp của định dạng nhúng trong dòng trong String s được ghi một phần trên trang hướng dẫn "String Representation of Boxes". Câu hỏi liên quan trong nhóm tin chính thức về cú pháp này: "(any documentation for) linear syntax?" Hiển thị các chuỗi như vậy trong FrontEnd được điều khiển bởi tùy chọn ShowStringCharacters->False của Cell.

+0

liên quan http://www.mathematicahelp.info/minor-progress-with- Tài liệu 6-0 –

+5

Tôi không đăng câu trả lời này vì bạn đã bỏ qua WorkBench một cách rõ ràng. Nhưng tôi nghĩ bạn đang theo sau thứ gì đó như bảng màu này http://reference.wolfram.com/workbench/index.jsp?topic=/com.wolfram.eclipse.help/html/reference/DocumentationTools/tutorial/AuthoringSymbolPagesUsingDocumentationTools.html –

Trả lời

1

Một trong những vấn đề xử lý chuỗi như vậy là hầu hết các thao tác với chuỗi trong Mathematica sẽ tự động thay thế dấu gạch chéo ngược (\) với dấu gạch chéo ngược thoát (\\).

Nếu bạn cố gắng này:

enter image description here

bạn có thể nghĩ rằng bạn có chuỗi bạn đang tìm kiếm (trừ \! để làm cho nó một biểu thức), nhưng trong thực tế nó là: "\\(x\\_\\(1, 2\\) \[Equal] \\(\\(-b\\) \[PlusMinus] \\@\\(b\\^2 -\\(4\\ a\\ c\\)\\)\\)\\/\\(2\\ a\\)\\)"

Giải pháp của tôi cách xa thanh lịch, nhưng nó hoạt động.

  1. Tạo hộp từ biểu hiện định dạng của bạn: enter image description here
  2. Chọn đầu ra, và đi đến mục menu Cell > Convert to > InputForm. Kết quả: enter image description here
  3. Bây giờ bạn có thể chỉnh sửa các chuỗi, đưa \! phía trước nó và dấu ngoặc kép quanh nó: "\!\(x \_ \(1, 2\) == \(\(-b\) \[PlusMinus] \@\(b \^2 - \(4\ a\ c\)\)\) \/ \(2\ a\)\)"

Nếu bạn thực hiện bước 3 trong một biên tập viên bên ngoài, rời xa các dấu ngoặc kép và chỉ có \! ở phía trước và dán lại kết quả trong MMA nó được chuyển đổi trực tiếp sang biểu thức được định dạng

+0

+ 1. Tôi không biết rằng 'InputForm' của các hộp là dạng tuyến tính. Xem câu trả lời của tôi cho các quan sát bổ sung. –

1

Tôi nghĩ cách dễ nhất là chỉ sử dụng Giao diện Người dùng để định dạng chuỗi của bạn. Nếu bạn đang viết một gói, bạn có thể sử dụng "tự động lưu gói" (tức là khi nội dung của ô khởi tạo của sổ ghi chép trở thành gói). Nếu bạn sử dụng trình soạn thảo văn bản để viết gói thì có thể quá khó để sử dụng định dạng ...

1

Câu trả lời này là bổ sung cho câu trả lời của Sjoerd.

Trước hết, chúng tôi không phải sử dụng lệnh FrontEnd Cell > Convert to > InputForm để nhận dạng hộp tuyến tính. Chúng tôi có thể lấy nó chỉ bằng cách áp dụng InputForm đến đầu ra của MakeBoxes:

In[1]:= [email protected][Subscript[x, 1,2]==(-b\[PlusMinus]Sqrt[b^2-4 a c])/(2 a)] 
Out[1]//InputForm= 
\(x\_\(1, 2\) == \(\(-b\) \[PlusMinus] \@\(b\^2 - \(4\ a\ c\)\)\)\/\(2\ a\)\) 

Thứ hai, chúng ta có thể xuất khẩu sắp chữ cuối cùng trong dòng chuỗi đại diện của hộp bằng hai cách sau đây với kết quả tương đương (sự khác biệt duy nhất là Put kết thúc tốt đẹp các văn bản):

[email protected] 
    StringInsert[ 
    ToString[ 
    [email protected] 
    MakeBoxes[ 
     Subscript[x, 1, 2] == (-b \[PlusMinus] Sqrt[b^2 - 4 a c])/(
     2 a)], OutputForm], "\\!", 1] >> "C:\\input.txt" 

Export["C:\\input.txt", 
StringInsert[ 
    ToString[[email protected] 
    MakeBoxes[ 
    Subscript[x, 1, 2] == (-b \[PlusMinus] Sqrt[b^2 - 4 a c])/(2 a)], 
    OutputForm], "\\!", 1], "String"] 

Trong cả hai trường hợp chúng tôi nhận được một tập tin với một dòng: \!\(x\_\(1, 2\) == \(\(-b\) ± \@\(b\^2 - \(4\ a\ c\)\)\)\/\(2\ a\)\).

Chèn dòng này trong Máy tính xách tay trong FrontEnd cung cấp cho các biểu hiện ban đầu (thử nó một mình!):

screenshot

+0

bạn sẽ biết làm thế nào để nhanh chóng định dạng một chữ cái bằng Times New Roman Italic ("TI")? Những gì tôi làm là gõ chữ cái sau đó đi đến phông chữ và chuyển đổi nó. Nhưng khi tôi nhìn vào hình thức đầy đủ tôi nhận được một cái gì đó giống như 'StyleBox [\" L \ ", FontFamily -> \" Times \ ", FontSize-> 11, FontWeight -> \" Plain \ ", FontSlant -> \" Nghiêng \ "]' thay vì phiên bản rút gọn 'StyleBox [\" L \ ", \" TI \ "]'. Tôi cũng đã có vấn đề với điều này khi tôi cố gắng tạo ra một chỉ mục như nó được mô tả [ở đây] (http://www.dbaileyconsultancy.co.uk/m_documentation/m_documentation.html). – jmlopez

+1

@jmlopez Chọn văn bản của bạn, sau đó nhấn Alt + 0 và nhập '" TI "' vào hộp thoại. Cách khác, sử dụng mục trình đơn 'Định dạng> Kiểu> Khác ...'. –

+0

cảm ơn, điều này giúp đơn giản hóa quá trình định dạng. Quay lại ví dụ ban đầu của bạn: 'ActionMenu :: usage'. Nếu bạn nhìn vào '? ActionMenu' trên một sổ ghi chép, bạn sẽ thấy một thông điệp được định dạng. Bây giờ, nếu bạn tìm kiếm 'ActionMenu start: 1' trong trung tâm doc, bạn sẽ thấy cùng một thông điệp mà không có chữ nghiêng mới lạ. Đây có phải là thông báo 'ActionMenu :: usage' giống nhau không? Tôi đã cố gắng để xây dựng chỉ mục của tôi bằng cách thiết lập các bản tóm tắt của một chức năng để 'functionName :: usage' nhưng tôi luôn luôn kết thúc với' StyleBoxes' tất cả các nơi. Có cách nào để loại bỏ các định dạng từ 'ActionMenu :: usage'? – jmlopez

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