TortoiseSVN(以及other Tortoise clients)在Mathematica中包括scriptdiff笔记本文件。 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/

10-14 01:21