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.
-
1$\begingroup$ Some relevant answers here. $\endgroup$– b.gates.you.know.whatNov 8, 2012 at 17:12
-
1$\begingroup$ Yeah, I'd say it's a duplicate. $\endgroup$– rm -rf ♦Nov 8, 2012 at 17:20
-
1$\begingroup$ This might be useful for you: stackoverflow.com/a/8778007/695132 $\endgroup$– SzabolcsNov 8, 2012 at 18:07
3 Answers
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).
-
4$\begingroup$ To be clear: the output of
NotebookTools`NotebookDiff[]
should be sent toCreateDocument[]
, i.e.,CreateDocument@NotebookTools`NotebookDiff[]
. This will render the diff output in a nice readable form. $\endgroup$ Dec 18, 2015 at 17:13
Copy as Input Text and paste into Quick Diff Online works very well. As previously described here.
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:
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.