Mathematica предлагает пакет Notation для определения пользовательских обозначений, и кажется, что он отлично работает, пока я не сохраню записную книжку с пользовательскими обозначениями в виде пакета и не попытаюсь использовать Needs["..."]
для импорта новых обозначений. Как указано в списке рассылки Mathematica, это приводит к странным синтаксическим ошибкам. при оценке любого вызова Notation[]
. Предлагаемое решение состоит в том, чтобы вручную открыть блокнот с обозначениями и оценить его в ядре, но это проблема для файлов, которые я планирую распространять. Если у кого-то есть лучшее решение проблемы, буду очень признателен за помощь!
Способы обойти ошибку нотации Mathematica?
Ответы (1)
Я думаю, что ваша проблема заключается в том, как Mathematica обрабатывает Notation[]
, quote:
При определении собственных обозначений крайне важно использовать шаблоны обозначений. Причина этого ограничения заключается в том, что шаблоны, вставленные в записную книжку, содержат необходимые поля тегов, встроенные правильным образом.
Может быть вообще невозможно иметь файл пакета с вызовом Notation[]
, но есть предложение использовать ParsedBoxWrapper, с которым у меня сейчас не было времени поиграться.
Существует хитрое решение вашей проблемы, заключающееся в том, что вы помещаете все назначения Notation[]
в одну ячейку записной книжки и делаете ее ячейкой инициализации (щелкните правой кнопкой мыши край ячейки -> Ячейка инициализации). Кстати, это также создаст файл .m только с содержимым этой ячейки (но этот файл, увы, не будет работать с Needs[]
или <<
). После этого вы можете свернуть ячейку, сделать ее нередактируемой, неоценимой и вуаля! Почти как то, что вы хотите.
Я должен отметить, что с точки зрения распространения этот кладж довольно удобен, поскольку файл .m регенерируется каждый раз, когда вы загружаете основной файл, поэтому вам не нужно отправлять несколько файлов. Единственным недостатком является немного уродливая записная книжка (т. е. одна скрытая ячейка) и всплывающее окно с вопросом, хотите ли вы оценить ячейки инициализации записной книжки всякий раз, когда вы впервые оцениваете что-то в этой записной книжке.
Needs[]
вызывает: Syntax::sntx: Неверный синтаксис в или перед Notation[NotationTemplateTag[SubscriptBox[[Sigma], TemplateBox[{n_}, NotationPatternTag]]] ‹‹71›› TemplateBox[{n_}, NotationPatternTag], ]}]]]; ‹‹25›› ^ - person Chris Granade   schedule 26.02.2010