Как: (и где) определить псевдонимы функций в Mathematica для использования в любом новом ноутбуке? - PullRequest
5 голосов
/ 11 декабря 2011

Я хочу правильно настроить псевдонимы для функций Mma.

В настоящее время я копирую и вставляю несколько псевдонимов в ячейку в новом блокноте, например:

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

и т. Д.далее.

Когда я искал псевдонимы в документе, я нашел описания метода Esc ... Esc и главу по определению пользовательской записи.Я надеялся найти какой-нибудь файл инициализации для определения псевдонимов.В данный момент я несколько сбит с толку.

Вопрос: - Какой общий / правильный / лучший способ определения псевдонимов функций, который вы используете в любом новом ноутбуке?

Ответы [ 3 ]

8 голосов
/ 12 декабря 2011

Чтобы определить входные псевдонимы для вашего конкретного блокнота, вам нужно добавить их к стандартным. Так что код вроде

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

сделает свое дело. (Хотя это не перезапишет существующие псевдонимы с тем же именем. Поэтому вы должны быть более осторожными, если нужно переопределить существующий псевдоним.)

Чтобы добавить эти псевдонимы во все записные книжки, вы можете:

  • используйте указанный выше код для объекта $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]

Это сохраняет компактность ваших исходных определений, но не требует введения новых символов в ваш глобальный контекст (или новый контекст). Похоже

tf

Чтобы превратить tf в TableForm, просто выберите его и нажмите Ctrl-Shift-I, т.е. преобразуйте его в InputForm.

7 голосов
/ 12 декабря 2011

FWIW Я просто определяю их в своей таблице стилей:

Cell[StyleData["Input"],

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

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

]
7 голосов
/ 11 декабря 2011

Возможно, будут и лучшие предложения, но вы можете собрать все такие определения в некотором пакете (но вам не обязательно нужны Begin, End, BeginPackage и EndPackage, так как ваши псевдонимы должны жить в Global`, если я правильно понимаю). Затем вы можете загрузить этот пакет из вашего init.m, чтобы он автоматически загружался при запуске M. Для файлов init.m и их использования, вот несколько полезных прошлых обсуждений SO:

Соображения и передовые практики Init.m

Как автоматически загружать пользовательские функции в Mathematica

В качестве другой альтернативы вы также можете изменить $Pre следующим образом:

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

(вы также можете поместить это переопределение в init.m, если хотите). Разница в том, что с помощью этого метода изменения кода происходят во время компиляции, а не во время выполнения, поэтому вы не создаете значения для символов, которые являются псевдонимами. В некотором смысле это может быть чище, поскольку ядро ​​увидит точно такой же код, который вы могли бы написать вручную. Это, конечно, предполагает, что вы не используете $Pre уже для чего-то другого, плюс вы работаете только интерактивно в FrontEnd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...