8

TortoiseSVN (および他の Tortoise クライアント) には、Mathematica でノートブック ファイルを比較するためのスクリプトが含まれますMathematica の diff 機能はAuthorToolsパッケージに実装されています (もっと良いものがあるのではないでしょうか?)

このスクリプトは現在、一時ディレクトリに小さなノートブック ファイルを作成し、それをフロント エンドで開くことによって機能します。ノートブックには、差分を実行する大きなボタンがあり、差分をハードコーディングするファイル名があります。

欠点は、差分コードを含むノートブックが一時ディレクトリに残され、クリーンアップされないことです。また、diff を行うたびに補助ノートブックを開く必要もないようです。

コマンド ラインから diff 機能を起動して、一時的なノートブックを経由しないようにすることはできますか? または、このプロセスを改善し、一時フォルダーに補助ノートブックを散らかさないようにする他の強力な方法はありますか?

diffing エクスペリエンスを改善するための提案は大歓迎です!

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}
]
4

1 に答える 1

4

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) で動作し、プラットフォームに依存しないはずです。v8 より古いバージョンの Mathematica を使用している場合は、MathKernel -noprompt -run < diff.m代わりにを使用する必要がMathematicaScriptあり、 のデフォルト値{f1, f2}が使用されます。

于 2011-11-29T22:36:12.873 に答える