Конвертируем ePub из LaTeX

TeX и LaTeX отлично подходят для создания разного рода электронных книг. Книги формата .pdf создаются легко и, более того, у LaTeX имеется нативная поддержка данного формата. Как уже не раз было показано ранее, следует лишь ввести команду для сборки pdf-файла из tex-файла, например:

$ pdflatex my_book.tex

Но как обстоят дела с другими форматами? Многие имеют в своём распоряжении смартфоны или планшеты и, разумеется, читают с экранов этих устройств книги. В метро, по пути на работу, в парке, выгуливая собаку, да мало ли где ещё. Но порази меня гром, читать pdf с подобных девайсов совершенно неудобно.

Gadgets

Итак, что такое ePub и как конвертировать вашу собственную книгу из tex в epub?

Что такое ePub?

EPUB (electronic publication) — один из форматов электронных книг. Вообще, книга формата ePub является по сути своей документом XHTML, в котором содержится сам текст + XML с описанием книги. Последний может выводить оглавление с навигационными ссылками.

Конвертация tex в epub состоит из двух действий:

  1. конвертировать книгу в XHTML
  2. запаковать XHTML в epub-файл

Переводим tex в XHTML

В Linux доступны две отличные программы для преобразования чего угодно во что угодно: это pandoc и calibre. Но мы пойдём другим путём и вместо того, чтобы тащить многочисленные библиотеки Qt (calibre) или же over 90 пакетов haskell (pandoc) установим небольшую консольную программу с наименованием tth:

# emerge -apv tth

С TtH перегнать книгу в XHTML не составит труда:

$ tth -w2 -e2 -u my_book.tex

Эта команда создаст файл с расширением .html в текущей директории.

  • флаг -w2 гарантирует получение XHTML в выводе
  • флаг -e2 встраивает графику из tex-файла
  • флаг -u обеспечивает поддержку юникода, по-умолчанию используется iso-8859-1
  • справку можно вызвать командой tth -?

Это всё, первый шаг сделан.

Включаем метаданные

Для этого установим ещё одну небольшую программу, требующую минимального количества зависимостей (хотя и оно тянет qtgui, qtwebkit, намекая на пристрастия разработчиков), а именно sigil:

# emerge -apv sigil

Теперь откройте sigil и выбирайте вашу книгу, внести необходимые изменения и сохраните их. Какие изменения? Дело в том, что нам нужно удостовериться в правильности генерируемого XML-файла. В частности оглавления и валидации.

Оглавление

Должно быть, ваш tex-документ уже содержит созданное автоматически содержание книги, не так ли? Если оно сгенерировано самим LaTeX, TtH переведёт его в XHTML без указаний сверху. А вот TOC (Table of Content) файл для ePub должен быть сгенерирован отдельно. Для этого воспользуйтесь командой меню Generate TOC from headings, здесь всё просто.

ePub

Валидация документа

Следующим шагом будет проверка валидации: Tools -> Validate ePub. К несчастью, получаем две ошибки:

  • "The < language > element is missing"
  • "The < title > element is missing"

То есть не указан язык документа и его название. Дабы исправить это досадное недоразумение отправляемся к настройкам Tools -> Meta data и вносим соответствующие правки.

Когда закончите с этим, проверьте валиден ли документ ещё раз. Если всё в порядке, вы должны получить сообщение "No problems found".

В принципе для второго этапа может подойти и какой-нибудь онлайн-конвертер, хотя автору не попадался ни один, который генерировал бы корректное содержание для книги epub.