Документация FB2

Ключевые слова и тезисы

Верстка книг, издание книги в электронном формате, элеткронная книга

4 июля 2020

Дата публикации\правок.

Документация

Предполагается, что ты уже ознакомился с официальной документацией, но у тебя остались вопросы.

Поделись

Если считаешь материал полезным и он тебе помог. Если же у тебя остались вопросы, пиши mdash; info@i-am.studio.

Что это такое и для чего вообще нужен FB2

Начнем с того, что уже давно существует ряд форматов, предназначенных для чтения с экрана. И, хотя тенденции и привели к распространению электронных книг, все равно существует не так уж много форматов.

Среди них:

  1. PDF;
  2. FB2;
  3. MOBI;
  4. ePub.

Сразу отмечу, что с точки зрения выверенности и соответствию удобному чтению является корректно сверстанный PDF. Потому что издание качественной книги требует не только вычитки текста, но и адаптации ее под формат носителя.

Речь о, к примеру, вгонке и выгонке строк, установки правильного интерлиньяжа и все такое прочее. К сожалению в FB2 этого всего нет, данный формат максимально простой, хотя в этом, пожалуй и его доступность.

И если раньше, давно уже, когда не были так распространены телефоны нам хватало PDF, который плюс минус соответствовал обычному книжному «размеру» и его удобно было читать на экране компьютера, для телефонов он неудобен, так как требует как минимум переверстки, чтобы шрифты были подходящего размера.

Также пользователя определенно развратили читалки, которые позволяют на других форматах настраивать параметры под себя:

  1. Фоновое изображение;
  2. Шрифт и его кегль.

Как верстать книгу в формате FB2

К моему личному сожалению, в интернете не так уж и много информации о том, как это сделать своими руками, т.е. с помощью редактора кода и знанию синтаксиса, собственно именно поэтому я и собрал эту простую документацию.

Существует множество программ, которые позволяют конвертировать к примеру doc файлы, как-то редактировать текст, но как по мне, это только усложняет работу с простым XML.

Да, краеугольный камень формата FB2 — тот факт, что это просто расширение над XML.

Итого, чтобы сверстать книгу своими руками достаточно обзавестись редактором кода, хватит и блокнота, конечно же, но я бы рекомендовал что-то более удобное и серьезное, например VSCode или Notepad++.

Расширяемый с гибкими стандартами. Позволяет структурировать данные. Используется для хранения настроек софта, передачи данных в интерфейсах и, конечно же, подходит для того, чтобы верстать в нем книгу.

Неочевидные возможности FB2

Сам документ с легкостью можно хранить в git-репозиториях, применять к ним тактику git flow\github flow, создавать Pull Request-ы, обсуждать в комментариях во время работы, да и другие вытекающие из данного факта плюшки в наличии.

Его можно расширить данными, которые ну будут определены читалками, но которые можно использовать для интеграции в другие сервисы, например в веб-сайт.

Минусы FB2

В основном они все упираются в возможности читалок считывать и интерпретировать данные. Скорее всего у вас не получится создать ветвленную систему заголовков, придется ограничиться всего двумя.

Формат существует для Fiction, т.е. художественной литературы, а это значит, что какую-либо нестандартную для читалок информацию придется оформлять картинками, если необходимо, например, вставить кусок кода для примера, который должен выглядеть, как код. За этим придется обратиться к другим форматам.

Структура кода

Можно воспользоваться автоматическим генератором книги из какого-то простого документа и отформатировать, или собрать по базовому шаблону.

<?xml version='1.0' encoding='utf-8'?>
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">
    <description>
        <title-info>
            <genre>antique</genre>
            <author>
                <first-name>Арсений</first-name>
                <middle-name>Олегович</middle-name>
                <last-name>Матыцин</last-name>
            </author>
            <book-title>Я верстальщик. Веб-верстальщик</book-title>
            <annotation>
                <p>Данный материал предназначен в первую очередь для тех, кто только начал осваивать веб, не знает за какие ниточки потянуть и что сделать, чтобы понять, как это все работает. Не менее полезен материал будет и дизайнерам, которые рисуют макеты и слабо представляют, что с этим потом делает верстальщик. Скорее, он даже очень нужен, так как давно существует проблема взаимопонимания между дизайнерами и верстальщиками. В целом данный материала создавался для повышения компьютерной грамотности среди людей, хоть как-то связанных с версткой.</p>
            </annotation>
            <date>2018</date>
            <lang>ru</lang>
        </title-info>
        <document-info>
            <author>
                <first-name>Арсений</first-name>
                <middle-name>Олегович</middle-name>
                <last-name>Матыцин</last-name>
            </author>
            <date>2018</date>
            <id>682ee6f7-130e-47af-a2bf-90443f6f4008</id>
            <program-used>calibre 3.44.0, VS Code</program-used>
            <version>1.2</version>
            <history>
                <p>1.0 — Автоматическая генерация книги с помощью SelfPub</p>
                <p>1.1 — Ручная верстка книги</p>
                <p>1.2 — Расширение раздела «Оптимизация»</p>
            </history>
        </document-info>
        <publish-info>
            <publisher>SelfPub</publisher>
            <year>2019</year>
        </publish-info>
    </description>

    <body>
        <title><p>Матыцин Арсений Олегович</p><p>Я верстальщик. Веб-верстальщик.</p></title>
        <section id="section_intro">
            <title><p>Введение</p></title>

            <section id="section_intro_for_who">
                <title><p>Для кого</p></title>
                <p>Данный материал предназначен в первую очередь для тех, кто только начал осваивать веб, не знает за какие ниточки потянуть и что сделать, чтобы понять, как это все работает. Не менее полезен материал будет и дизайнерам, которые рисуют макеты и слабо представляют, что с этим потом делает верстальщик.</p>
                <p>Скорее, он даже очень нужен, так как давно существует проблема взаимопонимания между дизайнерами и верстальщиками.</p>
                <p>В целом данный материала создавался для повышения компьютерной грамотности среди людей хоть как-то связанных с версткой.</p>
            </section>
        </section>
    </body>
</FictionBook>

А дальше уже то, что должно интересовать в первую очередь:

  1. description — блок с мета-информацией, которая будет использована для опознавания книги, автора.
  2. body — тело документа, именно то, что пользователь будет читать.
  3. И после body, при наличии изображений пойдут бинарники в формате base64. Но об этом позже.

Что должно быть в мета-информации FB2

В теге title-info по сути содержиться базовая информация, как на обложке обычной книги, разве что к ней добавляется жанр. Жанр, ключи необходимы для удобного поиска на сервисах, куда книги попадают.

При этом каждый ganre должен содержаться в отдельном теге, а вот теги keywords уже перечисляются через запятую. Оба при этом должны располагаться внутри title-info.

Верно

<genre>antique</genre>
<genre>sci_phys</genre>

<keywords>Карнавал, Фантастика, Купи слона</keywords>
            

Неверно

<genre>antique, sci_phys</genre>

<keywords>Карнавал</keywords>
<keywords>Фантастика</keywords>
<keywords>Купи слона</keywords>
            

Как оформлять данные об авторе

Тут ничего сложного нет. Для каждого свойства автора, а именно: имени, фамилии, отчество, псевдониму есть свой тег:

  • first-name — имя автора книги;
  • middle-name — отчество;
  • last-name — фамилия;
  • nickname — псевдоним.

Определенно не стоит пытаться вписать все в одно значение. А если речь об оцифровке книги, то данные необходимо брать из проверенных источников, данных самой книги. Чуть полегче, если автор это ты сам и издаешься первый раз.

Верно

<author>
    <first-name>Арсений</first-name>
    <middle-name>Олегович</middle-name>
    <last-name>Матыцин</last-name>
    <email>arseny@i-am.studio</email>
</author>
            

Неверно

<author>
    <first-name>Матыцин Арсений</first-name>
    <middle-name>Олегович</middle-name>
</author>

<author>
    <first-name>М. Арсений</first-name>
</author>
            

Оформление тела книги

Самая муторная и скучная часть позади, дальше… не сильно лучше. В случае с отображением тела существует ряд проблем в читалках:

  • То одна не понимает subtitle и не показывает его.
  • В другом случае section c title и без вложенного текста не будет отображен.

К слову, тел может быть несколько, как стопка книг, но при этом один body обязателен для заполнения. Вторым body могут стать сноски, например.

Основной текст

Итак, у нас есть как минимум один body, внутри которого необходимо вложить одну section. По своей сути на первом уровне вложенности это глава книги. При этом если книга это справочник, у которого нет глав, все равно необходимо вложить один section, т.к. это необходимая прослойка для верстки основного текста.

Section

Внутри section содержимое опционально, т.е. не жизненно необходимо.

В него следует внести title. В который стоит вложить текст, обернутый в тег p. Title — аналог H1–6 из мира HTML-верстки, но в данном случае определяется уровень вложенности уровнем вложенности тега section.

Если, к примеру, создать section с title, вложить в нее section без title, и во второй section вложить еще один с title, то в читалке будет навигация по трем уровням, среди которых будет пустая строка. Поэтому определенно не стоит злоупотреблять section-ами и оставлять их без заголовка.

К книгам художественным это имеет малое отношение, а вот для чего-то чуть более сложного это может стать вызовом.

Содержимое\текст

Создан section с title, что дальше.

Сразу после указания title, внутри section можно вкладывать другие теги, среди них:

  • <p> — основной тег для описания абзацев;
  • <image> — ссылка на бинарное изображение;
  • <poem> — можно и стихи указывать;
  • <subtitle> — вот этот тег не всеми читалками берется, поэтому есть смысл просто углублять структуру section-ами.;
  • <cite> — применяется почти таким же образом, как blockquote в HTML;
  • <empty-line> — создает пустую строку и в принципе этим приемом удобно отбивать отступ для изображений;
  • <table> — обычная таблица, как и в HTML, но которую тоже берут не все читалки.

В FB2 нельзя как-то по-серьезному оформлять текст, но зато можно использовать коды для указания корректных символов, например &lt;, &nbsp; или с цифровыми значениями &#34;. Но дальше уже зависит от читалки, сможет ли она это взять.

Также можно оформлять и сам текст, используя такие теги, как <strong>, <emphasis> для выделение жирным текстом и курсивом, соответственно.

Сноски

Для оформления сносок необходимо:

  • Создать отдельный body с name="notes"
  • В нем создать section-ы c уникальными ID.
  • В теле основного текста создать сноски на в виде гиперссылки на ID.

И выглядеть это может примерно таким образом:

<body>
    <section>
        <p>Текст и слово или <a xlink:href="#note1" type="note">фраза</a>, требующая сноски</p>
    </section>
</body>
<body name="notes">
    <section id="note1">
        <p>Пояснение к сноске</p>
    </section>
</body>