Wolfram mathematica 如何:(和何处)在Mathematica中定义函数别名,以便在任何新笔记本中使用?
我想以适当的方式为Mma函数设置别名 目前,我将几个别名复制并粘贴到新笔记本中的一个单元格中,如:Wolfram mathematica 如何:(和何处)在Mathematica中定义函数别名,以便在任何新笔记本中使用?,wolfram-mathematica,Wolfram Mathematica,我想以适当的方式为Mma函数设置别名 目前,我将几个别名复制并粘贴到新笔记本中的一个单元格中,如: tf:=TableForm fi:=FactorInteger re:=RegularExpression 等等 当我在文档中搜索别名时,我找到了Esc的描述。。。Esc方法,以及定义自定义符号的一章。我想我希望找到一些用于定义别名的初始化文件。我现在有点困惑 问题: -定义新笔记本中使用的函数别名的常用/适当/最佳方法是什么?也许会有更好的建议,但您可以做的一件事是收集所有此类定义,然后
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曾经在样式表中定义了很多。也许我只是看得不够:)谢谢,但我不认为这些方法中有任何一种真的——脱颖而出——是最好的,因此每个人都以自己的方式来做。这是可悲的,因为这并没有导致这方面的任何分享。