3

テキストの中央にダイナミックピースを配置するCDFドキュメントを作成しています。このドキュメントはPlayerで動作するはずです。

異なるセルの周りに散らばっているすべての動的な部分からアクセスする必要があるグロガル値を登録するための最良の方法は何ですか?

たとえば、g = 9.8を定義し、さまざまなセルに配置されているすべてのダイナミクスがこの値にアクセスできるようにします。これはプレーヤーで機能するはずなので、この値はMathematicaのセッション間で持続するはずです。

私は2つの異なる方法しか考えられませんでした:

  • ユーザーがファイルを開いたときにクリックする必要のあるアクションボタン。ノートブックで使用されている必要なすべての=および:=を起動します。
  • SaveDefinitions-> Trueを使用し、変数がマニピュレートにローカライズされていない空のマニピュレーションを作成します

どちらも人工的すぎるようです。

ダイナミクスの表示を受け入れる人がすでに下にスクロールして、必要なすべての定義を実装するダイナミクスを通過している可能性があるため、表示された後にのみ定義を設定する他の方法を使用するのは適切ではありません。

では、Manipulate構造を使用せずに「SaveDefintions」を実行するにはどうすればよいでしょうか。

4

3 に答える 3

2

Initialization1 つの可能性は、ドキュメント内のすべてのオブジェクトに対して条件を定義Dynamicし、初期化式を初期化セル (または簡単に識別できるタグ付きの他のセル) に配置することです。たとえば、初期化セルを使用すると、次のようになります。

Manipulate[
 Plot[n f[x], {x, -3, 3}], {n, 1, 4}, 
 Initialization :> If[!TrueQ[$initialized],
                      FrontEndTokenExecute["EvaluateInitialization"]]]

このように、すべてのオブジェクトに初期化式を格納する必要はなくDynamic、これらの式はオブジェクトごとに繰り返し評価されません。


アップデート

NotebookDynamicExpressionご希望のオプションはノートブックのようです。ジョン・フルツはそれについて次のように書いています。

"Dynamicはフロント エンド オプションCellDynamicExpressionNotebookDynamicExpression、およびに保存できますFrontEndDynamicExpression。これらDynamicの は表示されませんが、それらが接続されているセル/ノートブック/フロントエンドが表示されると更新されます。"

したがって、解決策は次のとおりです。

SetOptions[EvaluationNotebook[], NotebookDynamicExpression :> (a = 1)]

上記を評価した後、ノートブックを保存して再度開いてみてください。の定義を確認しますa

于 2011-08-28T09:30:03.997 に答える
0

あなたのようにダイナミクスドキュメントでこれを試したことはありませんが、これを試すことができます:

「初期化セルを使用すると、ノートブックの特定の入力セルを最初に評価するように指定できます。これにより、関数を定義してからそれらの定義を使用するセルを評価するなど、コードが正しい順序で評価されるようになります。」

http://reference.wolfram.com/mathematica/howto/WorkWithInitializationCells.html

于 2011-08-28T09:11:41.913 に答える
0

次の行に沿って何かを使用できます。

DynamicModule[{savetext = ""},
 Dynamic[If[StringQ[string], savetext = string, savetext],
  Initialization :> (string = savetext)]]

最初の評価stringでは StringQ は存在しないため、Dynamic は "" を表示します。その後、StringQ は True と評価され、Dynamic はテキストを に表示しstringます。 savetextDynamicModule ローカル変数であることにより、セッション間で保存されます。

string直接更新できます。string = "new text"

ただし、この構造の複数のコピーが同時に開かれている場合、1 つのstring変数が他の変数を更新します。

('string' の名前を変更せずに) インスタンスを分離する方法についての提案を見るのは興味深いでしょう。

于 2011-08-28T10:28:28.067 に答える