Wolfram mathematica 如何:(和何处)在Mathematica中定义函数别名,以便在任何新笔记本中使用?

Wolfram mathematica 如何:(和何处)在Mathematica中定义函数别名,以便在任何新笔记本中使用?,wolfram-mathematica,Wolfram Mathematica,我想以适当的方式为Mma函数设置别名 目前,我将几个别名复制并粘贴到新笔记本中的一个单元格中,如: tf:=TableForm fi:=FactorInteger re:=RegularExpression 等等 当我在文档中搜索别名时,我找到了Esc的描述。。。Esc方法,以及定义自定义符号的一章。我想我希望找到一些用于定义别名的初始化文件。我现在有点困惑 问题: -定义新笔记本中使用的函数别名的常用/适当/最佳方法是什么?也许会有更好的建议,但您可以做的一件事是收集所有此类定义,然后

我想以适当的方式为Mma函数设置别名

目前,我将几个别名复制并粘贴到新笔记本中的一个单元格中,如:

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

当我在文档中搜索别名时,我找到了Esc的描述。。。Esc方法,以及定义自定义符号的一章。我想我希望找到一些用于定义别名的初始化文件。我现在有点困惑

问题:
-定义新笔记本中使用的函数别名的常用/适当/最佳方法是什么?

也许会有更好的建议,但您可以做的一件事是收集所有此类定义,然后进行打包(但您不一定需要
Begin
End
BeginPackage
EndPackage
,因为如果我理解正确,您的别名应该位于
Global`
)。然后,您可以从
init.m
加载此程序包,以便在启动m时自动加载。对于
init.m
文件以及如何使用它们,下面是一些有用的讨论:

作为另一种选择,您还可以按以下方式修改
$Pre

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

(如果愿意,也可以将此重新定义放到
init.m
中)。区别在于代码修改发生在“编译时”使用此方法,而不是运行时,因此您不会真正为作为别名的符号创建值。这在某些方面可能更干净,因为内核将看到与手动编写完全相同的代码。当然,这假设您没有为其他内容使用
$Pre
,而且您只在内部使用C我只是在我的样式表中定义了这些:

Cell[StyleData["Input"],

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

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

]

要定义特定笔记本的输入别名,需要将其附加到默认的别名

SetOptions[EvaluationNotebook[], 
  InputAliases -> Join[InputAliases/.Options[EvaluationNotebook[], InputAliases],
    {"tf" -> TableForm, "fi" -> FactorInteger, "re" -> RegularExpression}]]
将完成此操作。(尽管如此,这不会覆盖相同名称的现有别名。因此,如果需要重新定义现有别名,您必须更加小心。)

要将这些别名添加到所有笔记本,您可以:

  • $FrontEnd
    对象(而不是笔记本对象)上使用上述代码
  • 使用
    选项检查器(全局首选项)>编辑选项>输入属性
    并使用提供的界面。 (也可以通过从下拉菜单中选择任何打开的笔记本来更改其别名。)
  • 或者您可以按照Mike的解决方案将它们添加到默认样式表中
前两个选项将向
init.m
文件添加定义,该文件应位于
FileNameJoin[{$UserBaseDirectory,“FrontEnd”,“init.m”}]

例如,我的
“init.m”
文件包含非标准输入别名
“l=“->\[LongEqual]
,因为我排版了很多数学内容


另外,如果您不想让输入别名将
“tf”
扩展到完整的
表格,那么您可以使用类似

"tf" -> InterpretationBox[StyleBox["tf", FontSlant -> Italic, 
          FontColor -> GrayLevel[0.5], Selectable -> False], TableForm]
这将保持原始定义的紧凑性,但不需要在全局上下文(或新上下文)中引入新符号


要将
tf
转换为
TableForm
只需选择它并按
Ctrl-Shift-I
,即将其转换为
InputForm

FYI,在工具包问题中,德雷夫斯又删除了一些别名和实用程序函数:@Leonid-你对我在InputAliases下读到的Esc…Esc方法有何评论?这是什么意思t出于同样的目的?@nilo de roock抱歉,我自己从来没有使用过这些符号。我知道你可以使用所谓的形式符号,可以键入为
ESC$a ESC
a
就是一个例子),它们有这些优点:默认情况下它们受到
保护
,并且它们在
系统
上下文中。但是我从未使用过它们。@LeonidShifrin哇!很好,你从哪里了解到这个特殊的宝石的?@nixeagle对不起,你在说什么?@LeonidShifrin你关于
ESC$a ESC
结业的笔记在
系统中
上下文作为
受保护的
符号。嗨,迈克!欢迎使用堆栈溢出和+1。这是最好的解决方案。不需要执行代码来设置前端设置,如输入别名。我已经使用Mma多年了,我甚至记不起多少年了,但我从来不敢(自找麻烦)更改样式、设置等。(恕我直言,但我主要使用(d)Mma作为计算器。)-我想是时候看看选项了。;-)使用样式表的好处是,您可以通过更改样式表来更改行为。我看了一些捆绑的样式表,没有看到任何输入别名。在早期版本中,Wolfram曾经在样式表中定义了很多。也许我只是看得不够:)谢谢,但我不认为这些方法中有任何一种真的——脱颖而出——是最好的,因此每个人都以自己的方式来做。这是可悲的,因为这并没有导致这方面的任何分享。