2011-12-11 12 views
5

Tôi muốn thiết lập bí danh cho các hàm Mma theo cách phù hợp.Hướng dẫn: (và ở đâu) xác định bí danh chức năng trong Mathematica để sử dụng trong bất kỳ Notebook mới nào?

Hiện nay, tôi sao chép và dán một vài bí danh đến một ô trong một máy tính xách tay mới như:

tf:=TableForm 
fi:=FactorInteger 
re:=RegularExpression 

và vân vân.

Khi tôi tìm kiếm bí danh trong tài liệu tôi đã tìm thấy mô tả của phương thức Esc ... Esc và chương về Xác định ký hiệu tùy chỉnh. Tôi hy vọng sẽ tìm thấy một số tập tin khởi tạo để xác định bí danh, tôi giả sử. Tôi hơi bối rối vào lúc này.

Câu hỏi: - Cách phổ biến/thích hợp/tốt nhất để xác định bí danh chức năng mà bạn sử dụng trong bất kỳ Sổ tay mới nào là gì?

+4

FYI Trong câu hỏi về túi công cụ, một số bí danh và chức năng tiện ích khác: http://stackoverflow.com/a/4213366/615464 –

Trả lời

7

Để xác định các bí danh đầu vào cho máy tính xách tay cụ thể của bạn, bạn cần phải gắn nó vào những cái mặc định. Vì vậy, mã như

SetOptions[EvaluationNotebook[], 
    InputAliases -> Join[InputAliases/.Options[EvaluationNotebook[], InputAliases], 
    {"tf" -> TableForm, "fi" -> FactorInteger, "re" -> RegularExpression}]] 

sẽ thực hiện thủ thuật. (.. Mặc dù, điều này sẽ không ghi đè lên các bí danh cùng tên hiện Vì vậy, bạn phải cẩn thận hơn nếu cần thiết phải xác định lại một bí danh hiện tại)

Để thêm các bí danh cho tất cả các máy tính xách tay, bạn có thể:

  • sử dụng mã trên trên đối tượng $FrontEnd (thay vì đối tượng Notebook).
  • sử dụng Option Inspector (Global Preferences) > Editing Options > InputAliases và sử dụng giao diện được cung cấp. (Điều này cũng có thể được sử dụng để thay đổi bí danh cho bất kỳ sổ ghi chép mở nào bằng cách chọn nó từ trình đơn thả xuống.)
  • hoặc bạn có thể làm theo giải pháp của Mike và thêm chúng vào biểu định kiểu mặc định của bạn.

Hai tùy chọn đầu tiên sẽ thêm định nghĩa vào tệp init.m cần được đặt tại FileNameJoin[{$UserBaseDirectory, "FrontEnd", "init.m"}].

Ví dụ: tệp "init.m" chứa bí danh nhập không chuẩn "l=" -> \[LongEqual], vì tôi sắp xếp khá nhiều phép toán.


Ngoài ra, nếu bạn không muốn bí danh đầu vào của bạn để mở rộng "tf" ra toàn bộ TableForm, thì có lẽ bạn có thể sử dụng giống như

"tf" -> InterpretationBox[StyleBox["tf", FontSlant -> Italic, 
      FontColor -> GrayLevel[0.5], Selectable -> False], TableForm] 

này giữ chặt các định nghĩa ban đầu của bạn , nhưng không yêu cầu giới thiệu các biểu tượng mới cho ngữ cảnh toàn cầu của bạn (hoặc ngữ cảnh mới). Dường như

tf

Để bật tf vào TableForm chỉ cần chọn nó và nhấn Ctrl-Shift-I, ví dụ, chuyển nó sang InputForm.

+0

Tôi đã sử dụng Mma cho tôi thậm chí không nhớ lại bao nhiêu năm để sự hài lòng của tôi nhưng tôi không bao giờ dám (mất đến rắc rối) thay đổi phong cách, cài đặt và như vậy. (Với sự tôn trọng nhưng tôi sử dụng (d) Mma chủ yếu như một máy tính.) - Đã đến lúc phải xem xét các tùy chọn, tôi cho là vậy. ;-) –

+0

Lợi thế của việc sử dụng biểu định kiểu là bạn có thể thay đổi hành vi bằng cách thay đổi biểu định kiểu. Tôi đã xem xét một số bảng định kiểu kèm theo và không thấy bất kỳ bí danh nhập nào. Trong các phiên bản trước đó, Wolfram đã từng có khá nhiều định nghĩa trong các bảng định kiểu. Có lẽ tôi đã không nhìn qua đủ của họ :) –

+0

Cảm ơn, nhưng tôi không nghĩ rằng bất kỳ phương pháp thực sự-outs out- là tốt nhất, do đó tất cả mọi người làm điều này theo cách riêng của mình. Và điều đó thật buồn vì điều đó không dẫn đến bất kỳ sự chia sẻ nào trong lĩnh vực này. –

7

Có lẽ sẽ có gợi ý tốt hơn, nhưng có một điều bạn có thể làm là để thu thập tất cả các định nghĩa như là một số gói (nhưng bạn không nhất thiết cần Begin, End, BeginPackageEndPackage, vì bí danh của bạn có nghĩa vụ phải sống trong số Global`, nếu tôi hiểu chính xác). Sau đó, bạn có thể tải gói này từ init.m của bạn, do đó nó sẽ được nạp tự động khi bạn bắt đầu M. Đối với init.m tập tin và làm thế nào để sử dụng chúng, đây là một số quá khứ hữu ích SO thảo luận:

Init.m considerations and good practices

How to automatically load user-defined functions in mathematica

Như thay thế khác, bạn cũng có thể sửa đổi $Pre trong thời trang sau:

$Pre = 
    Function[code, 
     Unevaluated[code] /. { 
     HoldPattern[tf] :> TableForm, 
     HoldPattern[fi] :> FactorInteger, 
     HoldPattern[re] :> RegularExpression 
     }, 
     HoldAll] 

(bạn cũng có thể đặt định nghĩa lại này vào init.m nếu bạn muốn). Sự khác biệt là các sửa đổi mã đang xảy ra tại "biên dịch-thời gian" với phương pháp này, không chạy thời gian, vì vậy bạn không thực sự tạo ra các giá trị cho các biểu tượng đó là bí danh. Điều này có thể sạch hơn theo một số cách, vì hạt nhân sẽ thấy chính xác mã giống như bạn viết bằng tay. Điều này tất nhiên giả định rằng bạn không sử dụng $Pre đã cho một cái gì đó khác, cộng với việc bạn chỉ làm việc tương tác trong FrontEnd.

+0

@ Leonid - Bạn có nhận xét nào về phương thức Esc ... Esc mà tôi đọc không về dưới InputAliases? Điều đó có nghĩa là cho cùng một mục đích? –

+0

@nilo de roock Xin lỗi, không bao giờ sử dụng những bản thân mình. Tôi biết rằng bạn có thể sử dụng cái gọi là biểu tượng chính thức, có thể được gõ vào như là 'ESC $ a ESC' (' a' là một ví dụ), và có những ưu điểm sau: chúng được bảo vệ theo mặc định, và chúng nằm trong ngữ cảnh '' System' ''. Tôi chưa bao giờ sử dụng chúng. –

+0

@LeonidShifrin Whoa! tốt đẹp, bạn đã học về đá quý đó ở đâu? – nixeagle

7

FWIW Tôi chỉ xác định các trong stylesheet của tôi:

Cell[StyleData["Input"], 

    InputAutoReplacements->{"hw"->"hello world"}, 

    InputAliases->{"tf"->"TableForm"} 

] 
+1

Xin chào Mike! Chào mừng bạn đến với Stack Overflow và +1. –

+0

Đây là giải pháp tốt nhất. Không cần phải thực thi mã để đặt cài đặt giao diện người dùng như bí danh nhập. –

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