nil*_*ock 5 wolfram-mathematica
我想以适当的方式为Mma函数设置别名.
目前,我将几个别名复制并粘贴到新笔记本中的单元格中,如:
tf:=TableForm
fi:=FactorInteger
re:=RegularExpression
Run Code Online (Sandbox Code Playgroud)
等等.
当我在doc中搜索别名时,我找到了Esc ... Esc方法的描述,以及有关定义自定义表示法的章节.我想,我希望找到一些用于定义别名的初始化文件.我此刻有些困惑.
问题: - 定义在任何新Notebook中使用的函数别名的常用/正确/最佳方法是什么?
要为特定笔记本定义输入别名,您需要将它们附加到默认笔记本.所以代码就像
SetOptions[EvaluationNotebook[],
InputAliases -> Join[InputAliases/.Options[EvaluationNotebook[], InputAliases],
{"tf" -> TableForm, "fi" -> FactorInteger, "re" -> RegularExpression}]]
Run Code Online (Sandbox Code Playgroud)
会做的.(虽然,这不会覆盖同名的现有别名.所以如果需要重新定义现有别名,则必须更加小心.)
要将这些别名添加到所有笔记本,您可以:
$FrontEnd
对象上使用上面的代码(而不是Notebook对象).Option Inspector (Global Preferences) > Editing Options > InputAliases
并使用提供的界面.(这也可用于通过从下拉菜单中选择任何打开的笔记本来更改别名.)前两个选项会将定义添加到init.m
应位于的文件中FileNameJoin[{$UserBaseDirectory, "FrontEnd", "init.m"}]
.
例如,我的"init.m"
文件包含非标准输入别名"l=" -> \[LongEqual]
,因为我排版了相当多的数学.
此外,如果您不希望您的输入别名扩展"tf"
到完整TableForm
,那么也许您可以使用类似的东西
"tf" -> InterpretationBox[StyleBox["tf", FontSlant -> Italic,
FontColor -> GrayLevel[0.5], Selectable -> False], TableForm]
Run Code Online (Sandbox Code Playgroud)
这样可以保持原始定义的紧凑性,但不需要在全局上下文(或新上下文)中引入新符号.看起来像
要关闭tf
到TableForm
只需选择它并按Ctrl-Shift-I
,即,将其转换为InputForm
.
或许还会有更好的建议,但有一两件事你可以做的是收集所有这样的定义是一些包装(但你并不一定需要Begin
,End
,BeginPackage
和EndPackage
,因为你的别名应该是生活中Global`
,如果我理解正确的话).然后,您可以从您的加载此软件包init.m
,以便在您启动时自动加载它.对于init.m
文件以及如何使用它们,以下是一些有用的过去SO讨论:
作为另一种选择,您还可以$Pre
按以下方式进行修改:
$Pre =
Function[code,
Unevaluated[code] /. {
HoldPattern[tf] :> TableForm,
HoldPattern[fi] :> FactorInteger,
HoldPattern[re] :> RegularExpression
},
HoldAll]
Run Code Online (Sandbox Code Playgroud)
(init.m
如果你愿意,你也可以把这个重新定义.)不同之处在于代码修改是在"编译时"使用此方法进行的,而不是运行时,因此您实际上并不创建作为别名的符号的值.这在某些方面可能更干净,因为内核将看到与您手写的完全相同的代码.这当然假设您没有使用$Pre
其他东西,而且您只在FrontEnd中以交互方式工作.
FWIW我只是在我的样式表中定义它们:
Cell[StyleData["Input"],
InputAutoReplacements->{"hw"->"hello world"},
InputAliases->{"tf"->"TableForm"}
]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
813 次 |
最近记录: |