Wolfram mathematica 如何";“保存定义”;不使用操纵结构? 我正在做一个CDF文档,我把动态片段放在文本的中间。这个文档应该在播放器中工作
注册应该从分散在不同单元格中的所有动态块访问的glogal值的最佳方法是什么 例如,我想要定义g=9.8,并且我想要放置在不同单元中的所有动力学都可以访问该值。因为这应该对播放器起作用,所以这个值应该在Mathematica的各个会话中保持不变 我只能想到两种不同的方法:Wolfram mathematica 如何";“保存定义”;不使用操纵结构? 我正在做一个CDF文档,我把动态片段放在文本的中间。这个文档应该在播放器中工作,wolfram-mathematica,wolfram-cdf,mathematica-cdf,Wolfram Mathematica,Wolfram Cdf,Mathematica Cdf,注册应该从分散在不同单元格中的所有动态块访问的glogal值的最佳方法是什么 例如,我想要定义g=9.8,并且我想要放置在不同单元中的所有动力学都可以访问该值。因为这应该对播放器起作用,所以这个值应该在Mathematica的各个会话中保持不变 我只能想到两种不同的方法: 用户打开文件时必须单击的操作按钮,用于启动笔记本上使用的所有必需的=和:=命令 使用SaveDefinitions->True创建一个空操纵,其变量未本地化为操纵 两者似乎都太做作了 让任何其他方法只在显示时设置定义都是不
- 用户打开文件时必须单击的操作按钮,用于启动笔记本上使用的所有必需的=和:=命令
- 使用SaveDefinitions->True创建一个空操纵,其变量未本地化为操纵
那么,如何在不使用操纵结构的情况下“保存定义”?我在dynamics文档中没有像您这样尝试过,但您可以尝试以下方法: 使用初始化单元格,可以指定首先计算笔记本的特定输入单元格。这样可以确保代码按正确的顺序计算,例如在计算使用这些定义的单元格之前定义函数
一种可能性是为文档中的每个
动态对象定义条件初始化
,并将初始化表达式放在初始化单元格中(或者放在其他带有标记的单元格中,以便轻松识别)。例如,使用初始化单元格:
Manipulate[
Plot[n f[x], {x, -3, 3}], {n, 1, 4},
Initialization :> If[!TrueQ[$initialized],
FrontEndTokenExecute["EvaluateInitialization"]]]
这样,您就不需要在每个动态
对象中存储初始化表达式,并且不会对每个对象重复计算这些表达式
更新
似乎笔记本电脑的NotebookDynamicExpression
选项就是您想要的。约翰·富尔茨:
Dynamic
s可以存储在前端选项CellDynamicExpression
、NotebookDynamicExpression
和frontendynamicexpression
中。这些Dynamic
s不会显示,而是在显示它们所连接的单元格/笔记本/前端时更新
因此,解决方案是:
SetOptions[EvaluationNotebook[], NotebookDynamicExpression :> (a = 1)]
在评估上述内容后,尝试保存并再次打开笔记本。并检查a
的定义。您可以使用以下内容:
DynamicModule[{savetext = ""},
Dynamic[If[StringQ[string], savetext = string, savetext],
Initialization :> (string = savetext)]]
在第一次求值时,string
不存在,因此StringQ导致动态显示“”。此后,StringQ的计算结果为True,Dynamic在string
中显示文本savetext
作为DynamicModule局部变量跨会话保存
string
可以直接更新,例如string=“新文本”
但是,如果同时打开了此构造的多个副本,则一个字符串
变量将更新另一个
如果能看到关于如何隔离实例(不重命名“字符串”)的建议,那将很有意思。为什么不使用初始化
选项?当动态对象第一次显示时,它将只计算初始化一次。@Alexey-我将在哪个动态中使用它?第一个呢?如果用户在接受动态显示之前已经向下滚动并传递了它?如果我全部定义,它就失去了意义,因为有些定义只是沿着文档重复的输入字段的初始值(我让用户在不同的地方定义一个新值…)。对于info,定义是:用户最近可以更改的变量的起始值,永远不会更改的变量,函数,纯和:=我认为另一个选项,但也不是很好,就是在用户打开文件时只显示一个按钮。文件的其余部分都在一个隐藏的章节中。单击按钮后,它将定义变量、自行消失并取消隐藏作为主要文档主体的章节。但似乎也artificial@Alexey-这是可能的。该警告不会改变文档查看过程中的任何内容,但动态显示为深灰色除外。它应该可以正常工作。尽管它会在我的非常小的/优雅的动态代码中间添加一些“垃圾”代码,但我可能会朝这个方向前进。你知道如何使用NooBooDigabyEx表达式吗?这个函数的帮助太小了,我不知道如何使用它,如果它做了我想要的事情…@P.Fonseca笔记本的NotebookDynamicExpression
选项似乎就是你想要的。John Fultz对此表示:“Dynamic
s可以存储在前端选项CellDynamicExpression
,notebook dynamicexpression
,以及frontendynamicexpression
。这些Dynamic
s不会显示,而是在显示它们所连接的单元格/笔记本/前端时更新。”我会尝试一下,然后尽快回复您。不要使用setdelayed(崩溃Mathematica),这似乎很正常(不是崩溃的一部分),因为setdelayed通常会在动力学中导致无限循环。有什么想法吗?