Способы обойти ошибку нотации Mathematica?

Mathematica предлагает пакет Notation для определения пользовательских обозначений, и кажется, что он отлично работает, пока я не сохраню записную книжку с пользовательскими обозначениями в виде пакета и не попытаюсь использовать Needs["..."] для импорта новых обозначений. Как указано в списке рассылки Mathematica, это приводит к странным синтаксическим ошибкам. при оценке любого вызова Notation[]. Предлагаемое решение состоит в том, чтобы вручную открыть блокнот с обозначениями и оценить его в ядре, но это проблема для файлов, которые я планирую распространять. Если у кого-то есть лучшее решение проблемы, буду очень признателен за помощь!


person Chris Granade    schedule 25.02.2010    source источник
comment
Не могли бы вы привести пример файла .m и ошибки, которые вы видите, пожалуйста?   -  person Michael Pilat    schedule 26.02.2010
comment
Абсолютно. Пакет доступен на моем личном сайте (cgranade.com/academics/mathematica-packages). ). Попытка включить этот пакет через Needs[] вызывает: Syntax::sntx: Неверный синтаксис в или перед Notation[NotationTemplateTag[SubscriptBox[[Sigma], TemplateBox[{n_}, NotationPatternTag]]] ‹‹71›› TemplateBox[{n_}, NotationPatternTag], ]}]]]; ‹‹25›› ^   -  person Chris Granade    schedule 26.02.2010


Ответы (1)


Я думаю, что ваша проблема заключается в том, как Mathematica обрабатывает Notation[], quote:

При определении собственных обозначений крайне важно использовать шаблоны обозначений. Причина этого ограничения заключается в том, что шаблоны, вставленные в записную книжку, содержат необходимые поля тегов, встроенные правильным образом.

Может быть вообще невозможно иметь файл пакета с вызовом Notation[], но есть предложение использовать ParsedBoxWrapper, с которым у меня сейчас не было времени поиграться.

Существует хитрое решение вашей проблемы, заключающееся в том, что вы помещаете все назначения Notation[] в одну ячейку записной книжки и делаете ее ячейкой инициализации (щелкните правой кнопкой мыши край ячейки -> Ячейка инициализации). Кстати, это также создаст файл .m только с содержимым этой ячейки (но этот файл, увы, не будет работать с Needs[] или <<). После этого вы можете свернуть ячейку, сделать ее нередактируемой, неоценимой и вуаля! Почти как то, что вы хотите.

Я должен отметить, что с точки зрения распространения этот кладж довольно удобен, поскольку файл .m регенерируется каждый раз, когда вы загружаете основной файл, поэтому вам не нужно отправлять несколько файлов. Единственным недостатком является немного уродливая записная книжка (т. е. одна скрытая ячейка) и всплывающее окно с вопросом, хотите ли вы оценить ячейки инициализации записной книжки всякий раз, когда вы впервые оцениваете что-то в этой записной книжке.

person Timo    schedule 26.02.2010
comment
Это хороший обходной путь, за исключением того, что я должен убедиться, что не забываю обновлять скрытую ячейку. Спасибо! - person Chris Granade; 26.02.2010