TortoiseSVN(以及other Tortoise clients)在Mathematica中包括script到diff笔记本文件。 Mathematica的差异功能是在AuthorTools包中实现的(也许还有更好的功能吗?)
当前,该脚本的工作方式是在temp目录中创建一个小型笔记本文件,然后在前端将其打开。笔记本电脑上有一个大按钮,可以进行比较,并具有要进行比较的文件名,这些文件名需要进行硬编码。
缺点是带有diff代码的笔记本将保留在temp目录中,并且不会被清理。每次进行差异测试时,也不必打开辅助笔记本。
是否可以从命令行启动diff功能,以避免通过临时笔记本?还是有其他健壮的方法来改进此过程,并避免在临时笔记本上堆满临时文件夹?
欢迎提出任何改善差异体验的建议!
请注意,由于TortoiseSVN是Windows程序,所以我主要对基于Windows的解决方案感兴趣。
这是脚本生成的示例笔记本。我意识到它需要清理,但是上次我也检查了它在版本5中是否可用(!),因此我不想不必要地对其进行触摸(没有明显的改进)。
Notebook[{
Cell[BoxData[ButtonBox["\<\"Compare Notebooks\"\>",
ButtonFrame->"DialogBox", Active->True, ButtonEvaluator->Automatic,
ButtonFunction:>(Needs["AuthorTools`"]; NotebookPut[Symbol["NotebookDiff"]["one.nb", "two.nb"]])
]], NotebookDefault] },
Saveable->False, Editable->False, Selectable->False, WindowToolbars->{},
WindowFrame->ModelessDialog, WindowElements->{},
WindowFrameElements->CloseBox, WindowTitle->"Diff",
ShowCellBracket->False, WindowSize->{Fit,Fit}
]
最佳答案
这是一个使用Mathematica脚本生成笔记本差异的简单示例。
将以下内容另存为diff.m
Needs["AuthorTools`"]
If[Length[$ScriptCommandLine]>=3,
{f1, f2} = $ScriptCommandLine[[{2,3}]],
{f1, f2} = {"one.nb", "two.nb"}]
diff = FileNameJoin[{$TemporaryDirectory, "diff.nb"}]
Put[NotebookDiff[f1, f2], diff]
Run["Mathematica " <> diff]
DeleteFile[diff]
Exit[]
然后从命令行使用
MathematicaScript -script diff.m "one.nb" "two.nb"
调用它。这可以在我的系统(Ubuntu 11.10,Mathematica 8.0.1)上运行,并且应该独立于平台。如果您使用的Mathematica版本低于v8,则必须使用
MathKernel -noprompt -run < diff.m
而不是MathematicaScript
,并且将使用{f1, f2}
的默认值。关于tortoisesvn - 是否可以从命令行调用Mathematica的diff功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8313379/