方法:(以及在何处)在Mathematica中定义函数别名以用于任何新笔记本?

nil*_*ock 5 wolfram-mathematica

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

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

 tf:=TableForm
 fi:=FactorInteger
 re:=RegularExpression
Run Code Online (Sandbox Code Playgroud)

等等.

当我在doc中搜索别名时,我找到了Esc ... Esc方法的描述,以及有关定义自定义表示法的章节.我想,我希望找到一些用于定义别名的初始化文件.我此刻有些困惑.

问题: - 定义在任何新Notebook中使用的函数别名的常用/正确/最佳方法是什么?

Sim*_*mon 8

要为特定笔记本定义输入别名,您需要将它们附加到默认笔记本.所以代码就像

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并使用提供的界面.(这也可用于通过从下拉菜单中选择任何打开的笔记本来更改别名.)
  • 或者您可以按照Mike的解决方案将其添加到默认样式表中.

前两个选项会将定义添加到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

要关闭tfTableForm只需选择它并按Ctrl-Shift-I,即,将其转换为InputForm.


Leo*_*rin 7

或许还会有更好的建议,但有一两件事你可以做的是收集所有这样的定义是一些包装(但你并不一定需要Begin,End,BeginPackageEndPackage,因为你的别名应该是生活中Global`,如果我理解正确的话).然后,您可以从您的加载此软件包init.m,以便在您启动时自动加载它.对于init.m文件以及如何使用它们,以下是一些有用的过去SO讨论:

Init.m考虑和良好做法

如何在mathematica中自动加载用户定义的函数

作为另一种选择,您还可以$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中以交互方式工作.


Mik*_*rch 7

FWIW我只是在我的样式表中定义它们:

Cell[StyleData["Input"],

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

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

]
Run Code Online (Sandbox Code Playgroud)