22
$\begingroup$

How to effectively diff a notebook with another version of it? This is usually needed/encountered in revision control, but can be generally useful. What i currently do is disable notebook history, use less styling, and diff them as text files.

$\endgroup$
3

3 Answers 3

15
$\begingroup$

The old AuthorTools` package has a NotebookDiff function. You can open the package's documentation like this:

NotebookOpen@FileNameJoin[{$InstallationDirectory, "AddOns", "Applications", 
 "AuthorTools", "Documentation", "English", "AuthorToolsGuide.nb"}];

This function is also included in the undocumented NotebookTools` context (in version 8 at least). You can simply evaluate

NotebookTools`NotebookDiff[]

which will pop up a file chooser dialog, or you can pass the two notebooks to it as an argument (either file names or notebook handles, such as the ones returned by Notebooks[]). Please also see this answer of mine.

Access to this diff functionality is included in several of the Tortoise version control clients on Windows. TortoiseSVN and TortoiseHg are both set up by default to diff Mathematica notebooks this way (see here).

$\endgroup$
1
  • 4
    $\begingroup$ To be clear: the output of NotebookTools`NotebookDiff[] should be sent to CreateDocument[], i.e., CreateDocument@NotebookTools`NotebookDiff[]. This will render the diff output in a nice readable form. $\endgroup$ Dec 18, 2015 at 17:13
2
$\begingroup$

Copy as Input Text and paste into Quick Diff Online works very well. As previously described here.

$\endgroup$
0
$\begingroup$

It might be possible to use some of the techniques that the experts here provided when I asked this question before.

notebook1 = 
  StringJoin[
   Import["/Users/cormullion/Desktop/hex-chart.nb", "Plaintext"]];
notebook2 = 
  StringJoin[
   Import["/Users/cormullion/Desktop/hex-chart-a.nb", "Plaintext"]];
sa = SequenceAlignment[notebook1, notebook2];
Row@Flatten[
  sa /. {a_, b_} :> {Style[a, Red], "(", Style[b, Green], ")"}]

giving something looking like this:

dodgy screen grab

Red shows deletions, green shows additions. Perhaps the parentheses are not ideal for this application...! You can tell that I changed the base from 16 to 12 in the second version of the notebook. Although I used this solution, there's a better built-in but undocumented one found by ace spelunker @rm-rf which you could play with.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.