Текстология
Mastodon
Telegram
Mastodon
Telegram

Проблемы конвертации Маркдаун в ФБ2 через Пандок

22.02.2026

Форматы Маркдаун и ФБ2 предлагают схожие возможности для разметки текста, однако между ними есть различия, которые усложняют конвертацию. Ниже описаны проблемные случаи, возникающие при преобразовании из Маркдауна в ФБ2 с помощью Пандок.

Схема валидации ФБ2 зафиксирована в репозитории Дмитрия Гибова. Дополнительные комментарии к спецификации формата доступны на fictionbook.org.

Возможно, эта информация может помочь доработать Пандок. Также часть проблем, возможно, удастся обойти с помощью настроек Пандока или пользовательских шаблонов для ФБ2.

Версия, на которой проводились эксперименты:

$pandoc -v
pandoc 3.7.0.1
Features: +server +lua
Scripting engine: Lua 5.4
User data directory: /home/petro/.local/share/pandoc
Copyright (C) 2006-2024 John MacFarlane. Web: https://pandoc.org
This is free software; see the source for copying conditions. There is no
warranty, not even for merchantability or fitness for a particular purpose.

Оглавление

  • Оглавление
  • Метаданные
  • genre
  • code
  • section
  • Заключение

Метаданные

В Пандок нет простого способа заполнить следующие поля ФБ2:

  • document-info — author
  • document-info — date
  • document-info — id
  • document-info — version

Также отсутствует возможность добавить дополнительную информацию через элементы custom-info.

genre

Указание жанра в ФБ2 обязательно. Если жанр не указан, Пандок генерирует заглушку:

<genre>unrecognised</genre>

При указании одного жанра генерация проходит корректно:

---
title: Метафизика
author:
- Аристотель
genre: sci_history
---

Результат:

<genre>sci_history</genre>

Однако при попытке добавить несколько жанров Пандок снова возвращает заглушку, хотя должен создать два отдельных элемента genre.

Пример входных данных:

---
title: Метафизика
author:
- Аристотель
genre: sci_history
genre: sci_philosophy
---

Ожидаемый результат в ФБ2:

<genre>sci_history</genre>
<genre>sci_philosophy</genre>

Фактический результат — заглушка unrecognised.

code

В ФБ2 элемент code всегда должен находиться внутри тега p. Пандок ошибочно размещает блоки с формулами вне параграфа. Остальные случаи с формулами и блоками кода конвертируются верно.

$$
x = a + b
$$

Резульат в ФБ2:

<section>
    <code>x = a + b</code>
</section>

Правильный вариант для ФБ2:

<section>
    <p>
        <code>x = a + b</code>
    </p>
</section>

section

Структура ФБ2 строже, чем в Маркдаун.

Маркдаун позволяет создавать разделы без содержания, но при валидации ФБ2 это вызовет ошибку. Такая структура заголовков часто встречается в дневниках: есть дата или тема, но самого текста записи нет.

Пример:

# Мой дневник

## 2021

### 20 января — зоопарк

Ходил в зоопарк.

### 23 января — заболел

## 2022

В этом случае для записи «23 января — заболел» Пандок сгенерирует секцию, содержащую только заголовок. Вероятно, решение заключается в автоматической генерации фиктивного параграфа.

Текущий вывод:

<section>
    <title><p>23 января — заболел</p></title>
</section>

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

# Моя книга

Это книга которую я написал.

## Глава 1

## Глава 2

Стандарт ФБ2 допускает внутри секции либо группу вложенных секций, либо контент (параграфы и изображения), но не их смесь в произвольном порядке. В примере выше секция «Моя книга» содержит сначала параграф, а затем две вложенные секции.

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

Заключение

Стоит отметить, что даже невалидные файлы ФБ2 обычно открываются в читалках. Кроме того, некоторые из описанных ограничений целесообразно убрать из схемы проверки формата. Однако пока приходится работать с существующими требованиями.

Последнее изменение: 22.02.2026, 14:08