Проблемы конвертации Маркдаун в ФБ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.
Оглавление
Метаданные
В Пандок нет простого способа заполнить следующие поля ФБ2:
document-info—authordocument-info—datedocument-info—iddocument-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 обычно открываются в читалках. Кроме того, некоторые из описанных ограничений целесообразно убрать из схемы проверки формата. Однако пока приходится работать с существующими требованиями.