Это частичный ответ на ваш вопрос.Следующий код открывает записную книжку, назначает ей «тестовое» ядро, оценивает записную книжку в этом ядре, ожидает завершения оценки и сохраняет оцененную записную книжку. не вызывает определение a
в ядре локальной командной строки.
Это ожидает завершения оценки ядра в записной книжке:
NotebookPauseForEvaluation[nb_] := Module[{},
While[ NotebookEvaluatingQ[nb], Pause[.25] ] ]
Это проверяет, находится ли какая-либо ячейка в блокноте на стадии оценки:
NotebookEvaluatingQ[nb_]:=Module[{},
SelectionMove[nb,All,Notebook];
Or@@Map["Evaluating"/.#&,Developer`CellInformation[nb]]
]
Это просто диагностическое сообщение, когда вы пытаетесь переопределить ядро, например «Test»:
AddTestEvaluator::exists = "Evaluator `1` is already defined, but has a definition that is `2` and not the expected `3`.";
Это код для добавления оценщика, например «Test», во внешний интерфейс:
AddTestEvaluator[evaluator_String] := Module[
{evaluatornames, testevaluator},
evaluatornames = EvaluatorNames /. Options[$FrontEnd, EvaluatorNames];
testevaluator = evaluator -> {"AutoStartOnLaunch" -> False};
Which[
MemberQ[evaluatornames, evaluator -> {"AutoStartOnLaunch" -> False}],
Null,
MemberQ[evaluatornames, evaluator -> _],
Message[AddTestEvaluator::exists,
evaluator,
evaluator /. (EvaluatorNames /. Options[$FrontEnd, EvaluatorNames]),
{"AutoStartOnLaunch" -> False}
],
True,
AppendTo[evaluatornames, testevaluator];
SetOptions[$FrontEnd, EvaluatorNames -> evaluatornames]
]
]
Наконец, это код для оценки записной книжки под «Test» ядром и сохранения оцененного ядра:
UsingFrontEnd[
AddTestEvaluator["Test"];
nb = NotebookOpen["test.nb"];
SetOptions[nb,Evaluator->"Test"];
SelectionMove[nb,All,Notebook];
SelectionEvaluate[nb];
NotebookPauseForEvaluation[nb];
NotebookSave[nb]
]
Я все еще ищу решение вашей полной проблемы (определение a
в локальном ядре командной строки).