.. _diff:

Comparing e-books 
========================

calibre includes an integrated e-book comparison tool that can be used to see
what has changed inside an e-book after editing or converting it. It can compare
books in the EPUB and AZW3 formats.

To use it, either open the e-book in the tool for :ref:`edit` and then click
:guilabel:`File->Compare to other book` or use the :ref:`book_details` panel.
If you do a conversion from EPUB to EPUB, the original EPUB file will be saved
as ORIGINAL_EPUB. Simply right click on the ORIGINAL_EPUB entry in the Book
details panel and choose :guilabel:`Compare to EPUB format`.

The comparison tool that opens will look like the screenshot below. It shows
you the differences in text, styles and images in the chosen books.

.. image:: images/diff.png
    :alt: The compare tool
    :align: center
    :class: fit-img

Understanding the comparison view
----------------------------------

As can be seen in the screenshot above, the comparison view shows the
differences between the two books side by side. Only the differences, with a
few lines of context around them are shown. This makes it easy to see at a
glance only what was changed inside a large document like a book.

Added text is shown with a green background, removed text with a red background 
and changed text with a blue background.

The line numbers of all changed text are shown at the sides, making it easy to
go to a particular change in the editor. When you open the comparison tool from
within the editor, you can also double click on a line in the right panel to
go to that line in the editor automatically.

One useful technique when comparing books is to tell the comparison tool to
beautify the text and style files before calculating differences. This can
often result in cleaner and easier to follow differences. To do this, click the
:guilabel:`Options` button in the bottom right and choose :guilabel:`Beautify
files before comparing`. Note that beautifying can sometimes have undesired
effects, as it can cause invalid markup to be altered to make it valid. You can
also change the number of lines of context shown around differences via the
:guilabel:`Options` button.

You can search for any text in the differences via the Search bar at the
bottom. You will need to specify which panel to search, the :guilabel:`Left` or
the :guilabel:`Right`.

Launching the comparison tool
-----------------------------------

The comparison tool is most useful when you have two versions of the same book
and you want to see what is different between them. To that end, there are
several ways to launch the tool.

Comparing two e-book files
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Open the first file in the :ref:`edit` tool. Now click :guilabel:`File->Compare
to another book` and choose the second file (it must be in the same format as
the first). The comparison view will open with the file being edited on the
right and the second file on the left.

Comparing the ORIGINAL_FMT to FMT
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

When you do a conversion in calibre from a FMT to itself, the original file is
saved as ORIGINAL_FMT. You can see what was changed by the conversion, by right
clicking on the ORIGINAL_FMT entry in the :ref:`book_details` panel in the main
calibre window and selecting :guilabel:`Compare to FMT`. The comparison view will
open with ORIGINAL_FMT on the left and FMT on the right.

Comparing a checkpoint to the current state of the book while editing
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The :ref:`edit` tool has a very useful feature, called :ref:`checkpoints`. This
allows you to save the current state of the book as a named
*checkpoint*, to which you can revert if you do not like the changes you have
made since creating the checkpoint. Checkpoints are also created automatically
when you perform various automated actions in the editor. You can see the list
of checkpoints by going to :guilabel:`View->Checkpoints` and then use the
:guilabel:`Compare` button to compare the book at the selected checkpoint with
the current state. The comparison tool will show the checkpoint on the left and
the current state on the right.

