我做了一些我认为很愚蠢的事情。
我将我的单元格样式更改为“代码”并开始更改缩进并按照我喜欢的方式移动代码(因为在“代码”单元格样式中更容易做到这一点,因为笔记本界面不会妨碍)。但是在尝试了一段时间后,我发现这种风格还有其他问题。
现在我将样式改回“输入”。但是现在所有的代码中都有所有这些额外的空格,并且代码看起来不再像原始“输入”样式那样好。
我对代码进行了太多编辑和手动格式化。
有没有办法告诉 Mathematica 将代码“自动格式化”回默认输入样式?即在需要的地方删除所有额外的空间,按照原样重新排列事物,等等......
如果我必须手动执行此操作,将永远带我。我找不到这样的选项。我在菜单上尝试了很多选项,但没有任何帮助。
附:在 Matlab 中,这很简单,只需选择所有代码,然后从菜单中选择“smart-ident”,它就会这样做。
附:我试过 emacs Mathematica 模式,它们也没有 pretty-print 。
编辑
我尝试了这些:选择单元格,然后选择单元格->转换为,并选择“InputForm”并选择“输入表单显示”。
这似乎已经删除了所有额外的空格。哪个好。现在我只需要在所有正确的地方点击返回即可将其恢复到原始形式。
至少这比手动删除空格要好得多。所以,灾难似乎暂时被遏制了。
编辑
将“代码”样式转换回“标准格式”后的屏幕截图。很难读。
谢谢,
编辑
为了确定问题是什么,给定一些 Mathematica 代码,它被“弄乱”了,并通过手动空格插入和手动插入返回手动格式化,现在如果我只是把它放在一个默认样式的笔记本中,我希望它智能缩进回默认设置,并拥有所有换行等......就好像它最初是以默认样式编写的一样。即如果它是使用“输入”代码样式编写的,那么它会被漂亮地打印出来。
这是我手工格式化的一个小函数作为示例。当我将其粘贴到此处时,它的格式看起来会更加糟糕。如果您将此代码复制到您的笔记本中,默认样式,那么如何将其自动格式化回默认设置而无需手动操作?
If[Abs@omega <= $MachineEpsilon,
(
data = {{0, 0}};
p = ListPlot[data, Sequence@plotOptions]
),
(
driverPeriod = 2. Pi/Abs@omega;
valuesOfDriverAmplitude =
Range[aStart, aStart + aLen, aLen/aIntervals];
timeValues =
Range[initialDriverPeriod*driverPeriod,
finalDriverPeriod*driverPeriod, driverPeriod ];
data =
Table[0, {Length[valuesOfDriverAmplitude]}, {Length[timeValues ]}];
total = Length[timeValues]*Length[valuesOfDriverAmplitude];
bifurcationProgress = 0.;
count = 0.;
Do[
(
{x1, x2, x3} =
solve[q, valuesOfDriverAmplitude [[i]], omega, phase,
initialDriverPeriod*driverPeriod,
(finalDriverPeriod)*driverPeriod, x10,
x20, isDamped, 4, 4];
currentTorqueAmplitude = valuesOfDriverAmplitude[[i]];
Do[
(
data[[i, j]] = {currentTorqueAmplitude, x2[timeValues[[j]] ]};
count += 1;
bifurcationProgress = count/total;
),
{j, 1, Length[timeValues]}
]
),
{i, 1, Length[valuesOfDriverAmplitude]}
];
p = ListPlot[Flatten[data, 1], Sequence@plotOptions]
)
];
编辑
下午 6 点
1) 将笔记本保存为名为 aclFix.m 的 m 文件(mathematica 包)
2)然后我做了以下
str=Import["aclFix.m")
也试过
str=Get["aclFix.m"];
但在这两种情况下,我得到的只是屏幕上显示的实际操纵。下面显示的命令(StringReplace 等....)对它不起作用,因为它不是字符串。我收到很多错误,例如
StringReplace::strse: String or list of strings expected at position 1 in
StringReplace[Manipulate[<<1>>,
{{aStart,0.9,},0,2,0.01,ImageSize->Tiny,ImagePadding->0,ControlPlacement->1},
{{aLen,0.2,},0.01,2,0.01,ImageSize->Tiny,ImagePadding->0,ControlPlacement->2},
<<45>>,SynchronousUpdating->False,ContinuousAction->False,<<6>>],
{(x_/;x==FromCharacterCode[32])..->,(x_/;x==<<17>>[9])..->}]. >>
可能是我误解了解决方案..
编辑
凌晨 1 点
我将笔记本导出为“m”文件,将其导入为
str = Import["aclFix.m", "Text"];
然后
code=StringReplace[str, {(x_ /; x == FromCharacterCode[32]) .. ->
"", (x_ /; x == FromCharacterCode[9]) .. -> ""}]
然后
Export["fix.m", code]
但它仍然是一个字符串。当我将它导入回来时,它仍然是一个字符串。我试过
ToExpression[code] 但它什么也没做。如何将其转换为实际代码?这是使用文本编辑器查看 .m 的示例。我使用上面的代码对其进行了测试。也许我们正在接近这里?
会多看的。
(* Created by Wolfram Mathematica 8.0 for Students - Personal Use Only : www.wolfram.com *)
"If[Abs@omega<=$MachineEpsilon,\n(\ndata={{0,0}};\np=ListPlot[data,Sequence@p\
lotOptions]\n),\n(\ndriverPeriod=2.Pi/Abs@omega;\nvaluesOfDriverAmplitude=\nR\
ange[aStart,aStart+aLen,aLen/aIntervals];\ntimeValues=\nRange[initialDriverPe\
riod*driverPeriod,\nfinalDriverPeriod*driverPeriod,driverPeriod];\n\ndata=\nT\
able[0,{Length[valuesOfDriverAmplitude]},{Length[timeValues]}];\ntotal=Length\
[timeValues]*Length[valuesOfDriverAmplitude];\nbifurcationProgress=0.;\ncount\
=0.;\n\nDo[\n(\n{x1,x2,x3}=\nsolve[q,valuesOfDriverAmplitude[[i]],omega,phase\
,\ninitialDriverPeriod*driverPeriod,\n(finalDriverPeriod)*driverPeriod,x10,\n\
x20,isDamped,4,4];\ncurrentTorqueAmplitude=valuesOfDriverAmplitude[[i]];\nDo[\
\n(\n\ndata[[i,j]]={currentTorqueAmplitude,x2[timeValues[[j]]]};\ncount+=1;\n\
bifurcationProgress=count/total;\n),\n{j,1,Length[timeValues]}\n]\n),\n{i,1,L\
ength[valuesOfDriverAmplitude]}\n];\n\np=ListPlot[Flatten[data,1],Sequence@pl\
otOptions]\n)\n];"
最佳答案
有一个代码示例(不仅仅是视觉)会很有用。与此同时,也许这会奏效:
将您的代码保存在一个 m 文件中。然后将其导入变量str
,然后运行这个
StringReplace[str,
{
(x_ /; x == FromCharacterCode[32]) .. -> "",
(x_ /; x == FromCharacterCode[9]) .. -> ""
}
]
并将结果保存到另一个 m 文件中。这样做是删除所有系列的一个或多个空格或制表符。因此,如果例如
str =
"f[
g[
u ]]"
(其中包含空格和制表符)然后运行我给出的代码
f[
g[
u]]
您可以将其保存回一个 m 文件。
如果这不能满足您的要求,那么如果您提供一段格式错误的代码可能会有所帮助。
(或者您可以尝试使用 emacs 中的交互式正则表达式构建器:
m-x
re-builder
,但如果您不熟悉正则表达式,则可能不值得)
关于wolfram-mathematica - 帮助格式化我的笔记本。从 'code' 样式到输入样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7369276/